只要您确定该名称不会与现有的 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());
(in the documents.onDidChangeContent
的听众server/src/server.ts
)
var files = ["path/to/file/a.txt", "path/to/file/b.txt"];
connection.sendNotification("custom/loadFiles", [files]);
每当您更改 a 的内容时,都会将以下内容输出到开发控制台.txt
文件(因为示例使用plaintext
作为其文档选择器):
加载文件path/to/file/a.txt,path/to/file/b.txt
当涉及到自定义方法的名称、参数或调用它们时,您几乎具有完全的灵活性。语言服务器出于各种目的(高级功能、内部调试/开发功能等)使用此类不属于协议一部分的自定义方法是很常见的。