Расширение Vscode Language Client - как отправить сообщение с сервера клиенту? - PullRequest
0 голосов
/ 26 июня 2018

Я разрабатываю расширение vscode, которое состоит из клиента и сервера с использованием протокола языкового сервера.

В данный момент я пытаюсь сделать следующее: когда сервер обнаруживает определенное условие, он просит клиента загрузить определенное количество файлов в рабочую область.

У меня серьезные проблемы с этим. Поскольку протокол языкового сервера не имеет конкретного запроса для этого, я подумал об отправке сообщения с сервера клиенту, и как только клиент обнаружит это сообщение, он продолжит выполнение этой команды.

Проблема в том, что я тоже не знаю, как это сделать. Может кто-нибудь помочь мне?

1 Ответ

0 голосов
/ 28 июня 2018

Пока вы уверены, что имя не вступает в противоречие с существующими методами LSP, вы можете определять произвольные собственные методы. Например, в официальном lsp-примере вы можете сделать это:

(в конце client/src/extension.ts)

let client = new LanguageClient('lspSample', 'Language Server Example', serverOptions, clientOptions);
client.onReady().then(() => {
    client.onNotification("custom/loadFiles", (files: Array<String>) => {
        console.log("loading files " + files);
    });
});
context.subscriptions.push(client.start());

documents.onDidChangeContent слушателе server/src/server.ts)

var files = ["path/to/file/a.txt", "path/to/file/b.txt"];
connection.sendNotification("custom/loadFiles", [files]);

При выводе содержимого файла .txt при выводе содержимого файла *1014* будет выводиться следующее (поскольку в качестве селектора документа в примере используется plaintext):

загрузка файлов путь / к / файлу / a.txt, путь к / файлу / b.txt

Вы в значительной степени обладаете полной гибкостью, когда дело доходит до имен пользовательских методов, их параметров или когда вы вызываете их. Языковые серверы довольно часто используют подобные методы, которые не являются частью протокола, для различных целей (расширенные функциональные возможности, функции внутренней отладки / разработки и т. Д.).

...