From cdf6b00bb7d01477fff808a9e3856b0864b34ccd Mon Sep 17 00:00:00 2001 From: Sergey Minaev Date: Thu, 20 Nov 2025 12:38:24 +0000 Subject: [PATCH] Add regression test for equivalent bigint map keys --- src/languageservice/parser/ast-converter.ts | 13 +++++++++++++ src/languageservice/parser/yamlParser07.ts | 1 + test/yamlValidation.test.ts | 15 +++++++++++++++ 3 files changed, 29 insertions(+) diff --git a/src/languageservice/parser/ast-converter.ts b/src/languageservice/parser/ast-converter.ts index f3501a334..ec51422a7 100644 --- a/src/languageservice/parser/ast-converter.ts +++ b/src/languageservice/parser/ast-converter.ts @@ -145,6 +145,19 @@ function convertScalar(node: Scalar, parent: ASTNode): ASTNode { result.isInteger = Number.isInteger(result.value); return result; } + case 'bigint': { + const numberValue = Number(node.value); + if (Number.isSafeInteger(numberValue)) { + const result = new NumberASTNodeImpl(parent, node, ...toOffsetLength(node.range)); + result.value = numberValue; + result.isInteger = true; + return result; + } + + const result = new StringASTNodeImpl(parent, node, ...toOffsetLength(node.range)); + result.value = node.value.toString(); + return result; + } default: { // fail safe converting, we need to return some node anyway const result = new StringASTNodeImpl(parent, node, ...toOffsetLength(node.range)); diff --git a/src/languageservice/parser/yamlParser07.ts b/src/languageservice/parser/yamlParser07.ts index 1f39a8220..bd52ec8f4 100644 --- a/src/languageservice/parser/yamlParser07.ts +++ b/src/languageservice/parser/yamlParser07.ts @@ -32,6 +32,7 @@ export function parse(text: string, parserOptions: ParserOptions = defaultOption customTags: getCustomTags(parserOptions.customTags), version: parserOptions.yamlVersion ?? defaultOptions.yamlVersion, keepSourceTokens: true, + intAsBigInt: true, }; const composer = new Composer(options); const lineCounter = new LineCounter(); diff --git a/test/yamlValidation.test.ts b/test/yamlValidation.test.ts index 466daf166..92d85973c 100644 --- a/test/yamlValidation.test.ts +++ b/test/yamlValidation.test.ts @@ -256,4 +256,19 @@ animals: [dog , cat , mouse] `; expect(result).to.be.empty; }); }); + + describe('Map key duplication Tests', () => { + it('should not report big integer key duplication error', async () => { + const yaml = '123456789012345671: 1\n123456789012345672: 2'; + const result = await parseSetup(yaml); + expect(result).to.be.empty; + }); + + it('should report duplication when bigint keys match across formats', async () => { + const yaml = '123456789012345671: 1\n0x1b69b4ba630f347: 2'; + const result = await parseSetup(yaml); + expect(result).not.to.be.empty; + expect(result[0].message).to.include('Map keys must be unique'); + }); + }); });