From 2cb32f3e63d1aa6c230da827ed6fdb1b29990691 Mon Sep 17 00:00:00 2001 From: Diya Date: Thu, 13 Aug 2026 22:43:21 +0530 Subject: [PATCH] prevent crash on incomplete Json --- .../src/features/DocumentSymbols.test.ts | 27 +++++++++++++++++++ .../src/features/DocumentSymbols.ts | 4 +++ 2 files changed, 31 insertions(+) diff --git a/language-server/src/features/DocumentSymbols.test.ts b/language-server/src/features/DocumentSymbols.test.ts index d4ffd1a..d69adb7 100644 --- a/language-server/src/features/DocumentSymbols.test.ts +++ b/language-server/src/features/DocumentSymbols.test.ts @@ -186,4 +186,31 @@ describe("DocumentSymbols", () => { expect(result).toEqual([]); }); + + test("should skip incomplete properties when generating document symbols, prevents crash", async () => { + await client.writeDocument("test.json", `{ + "bar": 1, + "foo": + }`); + const uri = await client.openDocument("test.json"); + + const result = await client.sendRequest(DocumentSymbolRequest.type, { + textDocument: { uri } + }); + + expect(result).toEqual([ + { + name: "bar", + kind: SymbolKind.Number, + range: { + start: { line: 1, character: 6 }, + end: { line: 1, character: 14 } + }, + selectionRange: { + start: { line: 1, character: 6 }, + end: { line: 1, character: 11 } + } + } + ]); + }); }); diff --git a/language-server/src/features/DocumentSymbols.ts b/language-server/src/features/DocumentSymbols.ts index 052b2ba..0658d1e 100644 --- a/language-server/src/features/DocumentSymbols.ts +++ b/language-server/src/features/DocumentSymbols.ts @@ -41,6 +41,10 @@ export class DocumentSymbols { const keyNode = propertyNode.children![0]; const valueNode = propertyNode.children![1]; + if (!valueNode) { + continue; + } + const name = String(keyNode.value); const range = { start: jsonDocument.positionAt(propertyNode.offset),