首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >VSCode扩展中的多个完成提供程序

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

Stack Overflow用户
提问于 2017-11-11 04:50:11
回答 1查看 608关注 0票数 1

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

问题是我的解决方案似乎不能正常工作。下面的代码只从最后一行(itemsCompletion)执行补全,不包含任何来自LSP的补全。

代码语言:javascript
运行
复制
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。在这种情况下,我想保留这两个补全的源代码。

我不能理解这件事,我会感激任何帮助的。:)干杯

EN

回答 1

Stack Overflow用户

发布于 2018-07-09 19:07:03

从你发布的代码中很难看出是什么导致了这个问题,但是我可能有一些信息可以帮助你解决这个问题。

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

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

您可以看到here,您可以选择语言服务器协议或直接实现(提供程序)。我想你可能把他们两个都混在一起了。

如果您缺少的是来自语言服务器的完成,请确保您已经在服务器功能上声明了项目完成。

代码语言:javascript
运行
复制
{
...
"capabilities" : {
    "completionProvider" : {
        "resolveProvider": "true",
        "triggerCharacters": [ '.' ]
    }
    ...
}
}

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

希望这篇文章至少能对你有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47230906

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档