禁用竞争语言服务器/代码荧光笔

Disable competing language servers / code highlighters

我想添加一个语言服务器来处理文件的完成/突出显示等。 作为测试内容的基础,我使用了 Microsoft (https://github.com/microsoft/vscode-extension-samples/tree/main/lsp-sample) 的示例并将其更改为对任何文件都有效。此语言服务器突出显示所有大写字母的单词。

打开 C++ 文件时,我得到了我的语言服务器的突出显示/完成以及 C++ 的默认突出显示/完成(见图)。

我想检测某个文件的其他扩展/内置荧光笔是否处于活动状态,如果当前工作区不可能,则为该工作区或当前文件停用它)

  1. 有没有办法以一种通用的方式执行此操作,而我不必知道哪些扩展正在突出显示代码?
  2. 如果否,如果我知道要停用的一组扩展程序,是否有办法做到这一点?

我终于有足够的时间尝试更多,发现为相同的扩展提供你自己的语言就足够了。

package.json 中,我在 contributes.languages 中添加了一个元素 extensions 包含 .cpp(因为我正在使用 cpp 文件进行测试)。

我也复制了一些实现代码from an example

这抑制了 cpp 文件的默认荧光笔和代码完成。因为我只实现了 semantic token provider, I can see the default highlighting before my provider takes over. (I think this could be solved by adding a syntax highlighter,但这已经足够我进行初步测试了)

我不确定,所有这些作为插件会有多稳定(我只在扩展开发主机模式下测试过)

这是结果的图片: