From 1429f78b5a10560b9a3ed111217cc22e881dcd41 Mon Sep 17 00:00:00 2001 From: Raul Santos Date: Thu, 24 Feb 2022 17:07:03 +0100 Subject: [PATCH] Use the LSP defined SymbolKind enum and fix marked Since Godot uses the `SymbolKind` enum defined by the LSP protocol instead of the one defined by VSCode. Also fixes `marked` being called incorrectly to parse codeblocks. --- src/lsp/NativeDocumentManager.ts | 36 +++++++++++++++----------------- src/lsp/gdscript.capabilities.ts | 2 +- 2 files changed, 18 insertions(+), 20 deletions(-) diff --git a/src/lsp/NativeDocumentManager.ts b/src/lsp/NativeDocumentManager.ts index abaa7ece5..9a18f8419 100644 --- a/src/lsp/NativeDocumentManager.ts +++ b/src/lsp/NativeDocumentManager.ts @@ -1,4 +1,5 @@ import * as vscode from "vscode"; +import * as ls from "vscode-languageclient"; import { EventEmitter } from "events"; import { MessageIO } from "./MessageIO"; import { NotificationMessage } from "vscode-jsonrpc"; @@ -190,8 +191,8 @@ export default class NativeDocumentManager extends EventEmitter { with_class = false ): { index?: string; body: string } { switch (s.kind) { - case vscode.SymbolKind.Property: - case vscode.SymbolKind.Variable: + case ls.SymbolKind.Property: + case ls.SymbolKind.Variable: { // var Control.anchor_left: float const parts = /\.([A-z_0-9]+)\:\s(.*)$/.exec(s.detail); @@ -215,7 +216,7 @@ export default class NativeDocumentManager extends EventEmitter { }; } break; - case vscode.SymbolKind.Constant: + case ls.SymbolKind.Constant: { // const Control.FOCUS_ALL: FocusMode = 2 // const Control.NOTIFICATION_RESIZED = 40 @@ -243,7 +244,7 @@ export default class NativeDocumentManager extends EventEmitter { }; } break; - case vscode.SymbolKind.Event: + case ls.SymbolKind.Event: { const parts = /\.([A-z0-9]+)\((.*)?\)/.exec(s.detail); if (!parts) { @@ -269,8 +270,8 @@ export default class NativeDocumentManager extends EventEmitter { }; } break; - case vscode.SymbolKind.Method: - case vscode.SymbolKind.Function: + case ls.SymbolKind.Method: + case ls.SymbolKind.Function: { const signature = make_function_signature(s, with_class); const title = element("h4", signature); @@ -290,7 +291,7 @@ export default class NativeDocumentManager extends EventEmitter { } } - if (symbol.kind == vscode.SymbolKind.Class) { + if (symbol.kind == ls.SymbolKind.Class) { let doc = element("h2", `Native class ${symbol.name}`); const parts = /extends\s+([A-z0-9]+)/.exec(symbol.detail); let inherits = parts && parts.length > 1 ? parts[1] : ""; @@ -326,19 +327,19 @@ export default class NativeDocumentManager extends EventEmitter { for (let s of symbol.children as GodotNativeSymbol[]) { const elements = make_symbol_elements(s); switch (s.kind) { - case vscode.SymbolKind.Property: - case vscode.SymbolKind.Variable: + case ls.SymbolKind.Property: + case ls.SymbolKind.Variable: properties_index += element("li", elements.index); propertyies += element("li", elements.body, { id: s.name }); break; - case vscode.SymbolKind.Constant: + case ls.SymbolKind.Constant: constants += element("li", elements.body, { id: s.name }); break; - case vscode.SymbolKind.Event: + case ls.SymbolKind.Event: signals += element("li", elements.body, { id: s.name }); break; - case vscode.SymbolKind.Method: - case vscode.SymbolKind.Function: + case ls.SymbolKind.Method: + case ls.SymbolKind.Function: methods_index += element("li", elements.index); methods += element("li", elements.body, { id: s.name }); break; @@ -373,11 +374,8 @@ export default class NativeDocumentManager extends EventEmitter { let doc = ""; const elements = make_symbol_elements(symbol, true); if (elements.index) { - if ( - [vscode.SymbolKind.Function, vscode.SymbolKind.Method].indexOf( - symbol.kind - ) == -1 - ) { + const symbols: ls.SymbolKind[] = [ls.SymbolKind.Function, ls.SymbolKind.Method]; + if (!symbols.includes(symbol.kind)) { doc += element("h2", elements.index); } } @@ -419,7 +417,7 @@ function make_link(classname: string, symbol: string) { } function make_codeblock(code: string) { - const md = marked("```gdscript\n" + code + "\n```"); + const md = marked.parse("```gdscript\n" + code + "\n```"); return `
${md}
`; } diff --git a/src/lsp/gdscript.capabilities.ts b/src/lsp/gdscript.capabilities.ts index 20dd6cb3e..ce3109b58 100644 --- a/src/lsp/gdscript.capabilities.ts +++ b/src/lsp/gdscript.capabilities.ts @@ -1,4 +1,4 @@ -import { DocumentSymbol } from "vscode"; +import { DocumentSymbol } from "vscode-languageclient"; export const enum Methods { GDSCRIPT_CAPABILITIES = 'gdscript/capabilities',