问题理解VSCode扩展以完成代码

时间:2019-08-18 13:25:44

标签: visual-studio-code vscode-extensions completionhandler language-server-protocol

我正在尝试在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也弹出了。

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

0 个答案:

没有答案