我正在开发一个 Visual Studio Code 扩展,它使用语言服务器协议(protocol)提供一个完成列表。我的问题是实现后,用户丢失了基于文档内容的完成。
我希望完成显示我自己的提供者的结果以及 VSCode 的基于单词的建议。
非工作示例:
工作示例:
(https://github.com/APerricone/harbourCodeExtension/issues/16)
我试图设置isIncomplete
至false
,没有任何改善。
最佳答案
这是一个称为“基于单词的建议”的 VSCode 功能(参见 "editor.wordBasedSuggestions"
设置)。每当所有其他注册的完成提供程序未能返回任何结果时,默认情况下都会提供基于单词的建议。
我不知道有任何方法可以将基于单词的建议与您自己的提供商的结果合并。 This statement by a VSCode dev似乎证实这是不可能的:
Why not include string based matching even when there is a completion provider returning suggestions?
每个提供者都会获得一个 rank取决于它在注册时使用的选择器。基于单词的提供者通常得分最低,rule是没有询问排名较低的提供商是否产生了结果。那是为了避免重复和垃圾邮件。registerCompletionItemProvider()
的文档注释仍然是一样的,所以我认为从那以后在这方面没有任何改变。也许您可以为此打开一个功能请求,但我不确定实现它的可能性有多大。
但是,有一个简单的解决方法:只需自己实现基于单词的建议。如果您使用CompletionItemKind.Text
,它应该看起来与 VSCode 的内置提供程序相同。我假设要完成,您无论如何都必须扫描文档内容。作为额外的好处,这可以避免问题中提到的重复。
可能相关问题:#21611
关于visual-studio-code - 显示基于单词的建议和自己的完成提供程序的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55219025/