我有一个连接到远程语言服务器的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完美。 在这种情况下,我想保留两个完成源。
无法绕过这个,我很感激任何帮助。 :) 干杯
答案 0 :(得分:0)
仅通过查看您发布的代码很难分辨出是什么原因引起的,但是我可能有一些信息可以帮助您。
什么是注册完成提供者?扩展本身还是语言服务器?
我问你这个是因为语言服务器通常不处理vscode提供程序。您可以使用在扩展程序上注册的完成提供程序来实现代码完成,该完成程序提供程序与语言服务器无关,或者您可以响应服务器中的onCompletion请求并将项目发送回扩展程序。通常,可以使用这些方法中的一种,但是您当然可以同时使用这两种方法,只需知道它们将单独工作即可。
您会看到here,您可以选择语言服务器协议或直接实现(提供者)。我想您可能会混合两者。
如果缺少的是语言服务器的补全,请确保已声明服务器功能的补全。
{
...
"capabilities" : {
"completionProvider" : {
"resolveProvider": "true",
"triggerCharacters": [ '.' ]
}
...
}
}
此外,请确保您使用正确的数据结构响应完成请求,该数据结构应该是completionItems的列表。您可以阅读有关here的更多信息 在LSP规范中。
希望这对您至少有帮助。