我正在使用Metals(Scala语言服务器)中的代码镜头来进行“运行代码”操作。在我们的用例中,只有在编译完成后才能提供这些代码镜头。如果用户在编译过程中或编译后未修改源文件,则vscode不会发送对代码镜头的请求。从编译之前,这可能导致“陈旧的代码镜头”的丑陋状态。
深入研究vscode-languageserver-node的内部结构,我注意到CodeLensProvider可以发出onDidChangeCodeLenses事件,但不会反映在LSP中(https://github.com/microsoft/language-server-protocol/issues/192) ,因此我无法将此事件发送到vscode。
可能会强制重新加载代码镜头的另一件事是ICodeEditor :: setModel方法,但是我不确定是否可以直接从vscode扩展名直接完成,因为我无法获得对代码编辑器的引用。
如何从Language Server或vscode扩展中完成此操作?还是有另一种首选的方式?
不幸的是,语言服务器协议确实还不支持此功能。我之前打开过的相应功能请求可以在这里找到。
我可以通过在扩展侧为相同的语言ID实现一个虚拟对象CodeLensProvider
来解决此问题(VSCode API通常允许为语言功能注册多个提供程序)。它什么也没有做,只是在必要时调用事件,实际的实现仍在语言服务器端。onDidChangeCodeLenses
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句