Необработанный метод языкового сервера VSCode JSON - PullRequest
0 голосов
/ 08 апреля 2019

Я разместил в этом на прошлой неделе и с тех пор добился прогресса, где я обнаружил пакеты, которые поддержка JSON VSCode поставляется через расширения:

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 запускается и показывает, что он работает правильно.Я думаю, что я просто хочу отправить событие textDocument / didChange согласно LSP :

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 на языковой сервер, чтобы выполнить проверку схемы.

РЕДАКТИРОВАТЬ: я даже вижу инициализированный необработанный метод при реализации connection.onInitialized () в jsonServerMain.js.

EDIT2: Обновление, я выяснил, где я ошибался с некоторыми из этого.initialized и textDocument / didChange являются уведомлениями, а не запросами.

1 Ответ

0 голосов
/ 08 апреля 2019

EDIT2: обновление, я выяснил, где я не так с некоторыми из этого.Согласно LSP, initialized и textDocument / didChange являются уведомлениями, а не запросами.У запросов есть поле идентификатора, которого нет у уведомлений, поэтому при отправке уведомления удалите поле идентификатора.

...