首页 > 解决方案 > VSCode - 语言服务器 - 将语法文件添加到 package.json 时代码完成停止工作

问题描述

我正在尝试创建自己的语言服务器,并且只是在学习过程中。我正在使用示例LSP Log Streaming Sample。示例的代码完成部分按预期工作。

我现在开始修改示例以添加对名为 .nso 的新文件扩展名的支持。以下是我做过的事情:

  1. 更新 package.json 文件以激活新扩展
  "main": "./client/out/extension",
  "contributes": {
        "languages": [
            {
                "id": "nso",
                "extensions": [
                    ".nso"
                ]
            }
        ],
  1. 更新 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 文件中删除语法配置,自动完成功能会再次开始工作。

如果有人有任何想法,将不胜感激。

标签: visual-studio-codevscode-extensionslanguage-server-protocol

解决方案


推荐阅读