我正在 Metals 中使用代码镜头处理“运行代码”操作(Scala 语言服务器)。在我们的用例中,我们只能在编译完成后提供这些代码镜头。如果用户在编译期间或之后没有修改源文件,vscode 将不会发送代码镜头请求。这可能会导致编译前出现“陈旧代码镜头”的丑陋状态。
深入研究 vscode-languageserver-node 的内部结构,我注意到 CodeLensProvider 可以发出 onDidChangeCodeLenses 事件,但它没有反射(reflect)在 LSP ( https://github.com/microsoft/language-server-protocol/issues/192 ) 中,因此我无法将此事件发送到 vscode。
可能会强制重新加载代码镜头的另一件事是 ICodeEditor::setModel 方法,但我不确定这是否可以直接从 vscode 扩展完成,因为我无法获得对代码编辑器的引用。
这如何从语言服务器或 vscode 扩展中完成?或者还有其他首选方法吗?
最佳答案
不幸的是,语言服务器协议(protocol)确实还不支持这个。我前段时间打开的相应功能请求可以找到here .
我能够通过实现 dummy CodeLensProvider
来解决这个问题在扩展端相同的语言 ID(VSCode API 通常允许为语言功能注册多个提供程序)。它只在必要时调用 onDidChangeCodeLenses
事件,实际实现仍在语言服务器端。
关于visual-studio-code - 如何在vscode中强制更新代码镜头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57477684/