Расширение Vscode Language Client — как отправить сообщение с сервера клиенту?

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

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

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

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


person Ricardo Ferreira da Silva    schedule 26.06.2018    source источник


Ответы (1)


Если вы уверены, что имя не конфликтует с существующими методами 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 (поскольку образец использует plaintext в качестве селектора документа):

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

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

person Gama11    schedule 28.06.2018