From 442f7db9caf3f25815be0e9bfb5bd0c9bc83380f Mon Sep 17 00:00:00 2001 From: duckdoom4 <60387522+duckdoom4@users.noreply.github.com> Date: Fri, 16 Aug 2024 13:40:54 +0200 Subject: [PATCH] Fix crash on invalid field name --- src/outline.ts | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/outline.ts b/src/outline.ts index baefbd08..8626298f 100644 --- a/src/outline.ts +++ b/src/outline.ts @@ -1,8 +1,9 @@ // Document Symbol (Outline) Provider -import { TextDocument, DocumentSymbol, Uri, Range, SymbolKind, languages, CancellationToken, ProviderResult } from "vscode"; +import { TextDocument, DocumentSymbol, Uri, Range, SymbolKind, languages, CancellationToken, ProviderResult, LogLevel } from "vscode"; import { Navigation } from "./navigation"; import { NavigationData } from "./navigation-data"; import { stripWorkspaceFromFile } from "./workspace"; +import { logMessage } from "./logger"; export const symbolProvider = languages.registerDocumentSymbolProvider("renpy", { provideDocumentSymbols(document: TextDocument, token: CancellationToken): ProviderResult { @@ -170,7 +171,14 @@ function getStoreDocumentSymbols(classParent: DocumentSymbol, key: string) { if (fields) { for (const f of fields) { const childRange = new Range(f.location - 1, 0, f.location - 1, 0); - classParent.children.push(new DocumentSymbol(f.keyword.substring(key.length + 1), `:${f.location}`, SymbolKind.Field, childRange, childRange)); + const name = f.keyword.substring(key.length + 1); + + if (!name) { + logMessage(LogLevel.Warning, `Invalid field name: ${f.keyword}`); + continue; + } + + classParent.children.push(new DocumentSymbol(name, `:${f.location}`, SymbolKind.Field, childRange, childRange)); } } }