我有一个连接到远程语言服务器的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。在这种情况下,我想保留这两个补全的源代码。
我不能理解这件事,我会感激任何帮助的。:)干杯
发布于 2018-07-09 19:07:03
从你发布的代码中很难看出是什么导致了这个问题,但是我可能有一些信息可以帮助你解决这个问题。
什么是注册完成提供程序?是扩展本身还是语言服务器?
我问你这个问题是因为语言服务器通常不会与vscode提供者打交道。您可以使用在扩展上注册的完成提供程序来实现代码完成,该提供程序与语言服务器无关,也可以响应服务器中的onCompletion请求并将项发送回扩展。通常会使用其中一种方法,但您当然可以同时使用这两种方法,只要知道它们将单独工作即可。
您可以看到here,您可以选择语言服务器协议或直接实现(提供程序)。我想你可能把他们两个都混在一起了。
如果您缺少的是来自语言服务器的完成,请确保您已经在服务器功能上声明了项目完成。
{
...
"capabilities" : {
"completionProvider" : {
"resolveProvider": "true",
"triggerCharacters": [ '.' ]
}
...
}
}
另外,确保您使用正确的数据结构响应完成请求,该数据结构应该是一个completionItems列表。您可以在LSP规范中阅读有关该here的更多信息。
希望这篇文章至少能对你有所帮助。
https://stackoverflow.com/questions/47230906
复制相似问题