VSCode JSON语言服务器未处理的方法

问题描述 投票:0回答:1

我上周发布了this并取得了进展,因为我发现了VSCode的JSON支持通过扩展提供的软件包:

https://github.com/vscode-langservers/vscode-json-languageserver https://github.com/Microsoft/vscode-json-languageservice

和其他所有。我正试图在Electron(NodeJS)应用程序中重用它。我能够分叉启动语言服务器并初始化它的进程:

lspProcess = child_process.fork("node_modules/vscode-json-languageserver/out/jsonServerMain.js", [ "--node-ipc" ]);    
function initialize() {
    send("initialize", {
        rootPath: process.cwd(),
        processId: process.pid,
        capabilities: {
            textDocument: true
        }
    });
}

lspProcess.on('message', function (json) {
    console.log(json);
});

我看到console.log触发并显示它似乎正确。我的想法是,我只想根据LSP发送一个textDocument / didChange事件:

send('textDocument/didChange', {
    textDocument: TextDocument.create('foo://bar/file.json', 'json', 0, JSON.stringify(data))
});

其中data是表示文件的JSON对象。

当我发送该消息和其他尝试时,我得到了

error: {code: -32601, message: "Unhandled method textDocument/didChange"}
id: 2
jsonrpc: "2.0"

知道我在这里做错了吗?我的主要目标是允许通过我的Electron应用程序进行编辑,然后将更新的JSON发送到语言服务器以完成模式验证。

编辑:当我在jsonServerMain.js中实现connection.onInitialized()时,我甚至看到未初始化的未处理方法。

编辑2:更新,我弄清楚我在哪里出错了。 initialized和textDocument / didChange是通知,而不是请求。

json visual-studio-code vscode-extensions language-server-protocol
1个回答
0
投票

编辑2:更新,我弄清楚我在哪里出错了。根据LSP,initialized和textDocument / didChange是通知,而不是请求。请求具有通知不具有的id字段,因此在发送通知时,请删除ID字段。

© www.soinside.com 2019 - 2024. All rights reserved.