VSCode扩展中的多个完成提供程序

时间:2017-11-10 20:50:11

标签: visual-studio-code vscode-extensions

我有一个连接到远程语言服务器的VSCode扩展,然后注册一个新的CompletionItemProvider

问题是我的解决方案似乎无法正常工作。以下代码仅从最后一行(itemsCompletion)生成完成,并且不包括LSP的任何完成。

if (isOpenHABWorkspace()) {
    disposables.push(window.registerTreeDataProvider('openhabItems', itemsExplorer))
    if (hasExtension('misc-lsp')) {
        let languageClientProvider = new LanguageClientProvider()
        disposables.push(languageClientProvider.connect())
    }
    const itemsCompletion = new ItemsCompletion(getHost())
    disposables.push(languages.registerCompletionItemProvider('openhab', itemsCompletion))
}

但是,如果我评论最后两行,则完成来自LSP完美。 在这种情况下,我想保留两个完成源。

无法绕过这个,我很感激任何帮助。 :) 干杯

1 个答案:

答案 0 :(得分:0)

仅通过查看您发布的代码很难分辨出是什么原因引起的,但是我可能有一些信息可以帮助您。

什么是注册完成提供者?扩展本身还是语言服务器?

我问你这个是因为语言服务器通常不处理vscode提供程序。您可以使用在扩展程序上注册的完成提供程序来实现代码完成,该完成程序提供程序与语言服务器无关,或者您可以响应服务器中的onCompletion请求并将项目发送回扩展程序。通常,可以使用这些方法中的一种,但是您当然可以同时使用这两种方法,只需知道它们将单独工作即可。

您会看到here,您可以选择语言服务器协议或直接实现(提供者)。我想您可能会混合两者。

如果缺少的是语言服务器的补全,请确保已声明服务器功能的补全。

{
...
"capabilities" : {
    "completionProvider" : {
        "resolveProvider": "true",
        "triggerCharacters": [ '.' ]
    }
    ...
}
}

此外,请确保您使用正确的数据结构响应完成请求,该数据结构应该是completionItems的列表。您可以阅读有关here的更多信息 在LSP规范中。

希望这对您至少有帮助。