visual-studio-code - VSCode - 语言服务器 - 将语法文件添加到 package.json 时代码完成停止工作
问题描述
我正在尝试创建自己的语言服务器,并且只是在学习过程中。我正在使用示例LSP Log Streaming Sample。示例的代码完成部分按预期工作。
我现在开始修改示例以添加对名为 .nso 的新文件扩展名的支持。以下是我做过的事情:
- 更新 package.json 文件以激活新扩展
"main": "./client/out/extension",
"contributes": {
"languages": [
{
"id": "nso",
"extensions": [
".nso"
]
}
],
- 更新 extension.ts 以注册 .nso 文档
// Options to control the language client
const clientOptions: LanguageClientOptions = {
// Register the server for .nso documents
documentSelector: [
{ scheme: 'file', language: 'nso' },
{ scheme: 'untitled', language: 'nso'}
],
synchronize: {
// Notify the server about file changes to '.clientrc files contained in the workspace
fileEvents: workspace.createFileSystemWatcher('**/.clientrc')
},
// Hijacks all LSP logs and redirect them to a specific port through WebSocket connection
outputChannel: websocketOutputChannel
};
进行上述更改并运行示例后,代码完成仍然按预期工作。在编辑器上将文件类型设置为 nso,当您输入“J”或“T”时,代码完成会自动显示“Typescript”和“Javascript”选项。
接下来,我向工作区添加了一个现有的 Yaml 语法文件,并在 package.json 中为 .nso 扩展名添加了语法配置:
"activationEvents": [
"onLanguage:nso"
],
"main": "./client/out/extension",
"contributes": {
"languages": [
{
"id": "nso",
"extensions": [
".nso"
]
}
],
"grammars": [
{
"language": "nso",
"scopeName": "source.nso",
"path": "./syntaxes/nso.tmLanguage.xml"
}
],
对于我正在进行的测试,我刚刚使用了一个预先存在的 Yaml 语言文件,可以在此处找到。
添加上述 JSON 配置并运行示例后,自动补全停止工作。编辑器应用语法文件中的语法突出显示,但如果我输入字母“J”或“T”,我看不到代码完成。使用 Ctrl + Space 手动调用代码完成是可行的,但我无法弄清楚为什么添加语法文件会阻止它自动工作。如果我从 package.json 文件中删除语法配置,自动完成功能会再次开始工作。
如果有人有任何想法,将不胜感激。
解决方案
推荐阅读
- c++ - C++20 模块实现分区的 hpp/cpp 拆分
- ruby-on-rails - 我应该把 entrypoint.sh 文件 Rails App for Docker 放在哪里?
- node.js - 如何在 Sequelize 函数中添加 where 子句?
- c# - 使用 Google.Apis.Auth 会导致 .Net 项目中的唯一异常
- powershell - Azure AD - 无法设置类型为“Sign”的应用程序注册密钥凭据
- regex - 使用正则表达式在连接的 id 中搜索
- python - 将数据框转换为特定的 JSON
- c++ - 删除嵌套 xml 中的节点会从 QDomNodeList 中删除节点,但是在保存文件时,没有任何变化
- laravel - HasOne 显示“null”或“未定义属性:Illuminate\\Database\\Eloquent\\Relations\\HasOne”
- eclipse - https://download.eclipse.org/releases/2021-09 的镜像是否存在?