visual-studio-code - vscode中如何强制更新code lens
问题描述
我正在使用Metals(Scala 语言服务器)中的代码镜头进行“运行代码”操作。在我们的用例中,我们只能在编译完成后提供这些代码镜头。如果用户在编译过程中或编译后没有修改源文件,vscode 不会发送代码镜头请求。这可能会导致编译前出现“陈旧代码镜头”的丑陋状态。
深入了解 vscode-languageserver-node 的内部结构,我注意到 CodeLensProvider 可以发出 onDidChangeCodeLenses 事件,但它并未反映在 LSP 中(https://github.com/microsoft/language-server-protocol/issues/192) ,因此我无法将此事件发送到 vscode。
可能会强制重新加载代码镜头的另一件事是 ICodeEditor::setModel 方法,但我不确定这是否可以直接从 vscode 扩展中完成,因为我无法获得对代码编辑器的引用。
如何通过语言服务器或 vscode 扩展来完成这项工作?还是有另一种首选方式?
解决方案
不幸的是,语言服务器协议确实还不支持这一点。我刚才打开的相应功能请求可以在这里找到。
我能够通过在扩展端为相同的语言 ID实现一个虚拟CodeLensProvider
对象来解决这个问题(VSCode API 通常允许为语言功能注册多个提供程序)。它只是在必要时调用事件,实际实现仍然在语言服务器端。onDidChangeCodeLenses
推荐阅读
- r - R如何从ggplot2输出写入PNG或KML文件
- perforce - 使用 p4 命令从终端设置仓库路径
- c++ - 动态分配的字符串的输入和输出数组
- javascript - 使用 splice 函数时如何将 javascript 移动到数组中的整个对象?(反应.js)
- java - 如何在 Spring Boot 中初始化一次 MongoClient 并使用它的方法?
- javascript - Javascript。我怎样才能返回一个空字符串(即“”)
- prolog - [YAP 6.2.2][Prolog] 在 Ubuntu 20.04 上编译期间出现“mmap”错误
- django - 为什么我的 login_required 重定向不起作用?
- pip - 管理特定 python 发行版的 python 包
- reactjs - 对于这个例子,如何在 React 中思考:我应该将重复的 html 标记存储在 Array 中并将其导入到类组件中吗?