我正在使用Metals(Scala 语言服务器)中的代码镜头进行“运行代码”操作。在我们的用例中,我们只能在编译完成后提供这些代码镜头。如果用户在编译过程中或编译后没有修改源文件,vscode 不会发送代码镜头请求。这可能会导致编译前出现“陈旧代码镜头”的丑陋状态。
深入了解 vscode-languageserver-node 的内部结构,我注意到 CodeLensProvider 可以发出 onDidChangeCodeLenses 事件,但它并未反映在 LSP 中(https://github.com/microsoft/language-server-protocol/issues/192) ,因此我无法将此事件发送到 vscode。
可能会强制重新加载代码镜头的另一件事是 ICodeEditor::setModel 方法,但我不确定这是否可以直接从 vscode 扩展中完成,因为我无法获得对代码编辑器的引用。
如何通过语言服务器或 vscode 扩展来完成这项工作?还是有另一种首选方式?