【问题标题】:Multiple Completion Providers in VSCode ExtensionVSCode 扩展中的多个完成提供程序
【发布时间】:2018-07-09 19:07:03
【问题描述】:

我有一个 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。 在这种情况下,我想保留两个完成源。

对此我无法理解,我将不胜感激。 :) 干杯

【问题讨论】:

    标签: visual-studio-code vscode-extensions


    【解决方案1】:

    仅通过查看您发布的代码很难判断导致此问题的原因,但是我可能有一些信息可以帮助您。

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

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

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

    如果您缺少来自语言服务器的补全,请确保您已在服务器功能上声明项目补全。

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

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

    希望这至少对您有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多