Пока вы уверены, что имя не вступает в противоречие с существующими методами 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
Вы в значительной степени обладаете полной гибкостью, когда дело доходит до имен пользовательских методов, их параметров или когда вы вызываете их. Языковые серверы довольно часто используют подобные методы, которые не являются частью протокола, для различных целей (расширенные функциональные возможности, функции внутренней отладки / разработки и т. Д.).