0

我正在尝试在 VSCode 中为针对可编程 ASIC 的汇编程序提供语言支持。到目前为止,我只有 TextMate 语法,现在我正在尝试了解如何实现语言服务器。我正在学习

https://github.com/Microsoft/vscode-extension-samples/tree/master/lsp-sample

并且已经到了让我的环境进行调试的地步。我苦苦挣扎的地方是我不明白示例中的完成机制是如何完成的。
我在调试时看到的是,第一个字母(单词边界)是:

  • j 或 J 带有字符串 JavaScript(J 突出显示)的小文本弹出窗口和详细信息显示,因此我无需输入即可选择
  • t 或 T 相同,但用于 TypeScript(T 突出显示)
  • s 或 S 给出了两个先前弹出窗口的列表(S 都突出显示)和向上/向下箭头以供选择

据我了解,涵盖此内容的唯一代码是 server.ts 文件中的此部分

// This handler provides the initial list of the completion items.
connection.onCompletion(
    (_textDocumentPosition: TextDocumentPositionParams): CompletionItem[] => {
        // The pass parameter contains the position of the text document in
        // which code complete got requested. For the example we ignore this
        // info and always provide the same completion items.
        return [
            {
                label: 'TypeScript',
                kind: CompletionItemKind.Text,
                data: 1
            },
            {
                label: 'JavaScript',
                kind: CompletionItemKind.Text,
                data: 2
            }
        ];
    }
);

// This handler resolves additional information for the item selected in
// the completion list.
connection.onCompletionResolve(
    (item: CompletionItem): CompletionItem => {
        if (item.data === 1) {
            item.detail = 'TypeScript details';
            item.documentation = 'TypeScript documentation';
        } else if (item.data === 2) {
            item.detail = 'JavaScript details';
            item.documentation = 'JavaScript documentation';
        }
        return item;
    }
);

我已经使用更多标签进行了测试,它显示为 Completionparser 检查标签中的大写字母。添加了另外 2 个标签,“TwoMore”和“JetBrain”,它们的行为方式相同,例如 m/M 或 b/B 也会弹出一个窗口。

不明显的是为什么会这样?

4

0 回答 0