最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

Vscode语言客户端扩展

IT培训 admin 5浏览 0评论

Vscode语言客户端扩展

我一直在使用语言服务器协议开发一个由客户端和服务器组成的vscode扩展。

目前,我正在尝试执行以下操作:当服务器检测到某种情况时,他请求客户端将一定数量的文件加载到工作区中。

我这样做有严重的问题。由于语言服务器协议没有执行此操作的特定请求,因此我考虑从服务器向客户端发送消息,并且一旦客户端检测到此消息,他将继续执行此命令。

问题是,我也不知道该怎么做。谁能帮帮我吗?

回答如下:

只要您确定该名称不会与现有的LSP方法发生冲突,您就可以定义自己的任意方法。例如,在official lsp-sample中,你可以这样做:

(在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.onDidChangeContentserver/src/server.ts听众)

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

每当您更改.txt文件的内容时,这将输出以下内容到开发控制台(因为该示例使用plaintext作为其文档选择器):

加载文件path / to / file / a.txt,path / to / file / b.txt

在自定义方法的名称,参数或调用它们时,您在这里几乎具有完全的灵活性。语言服务器使用这样的自定义方法是很常见的,这些方法不是用于各种目的的协议的一部分(高级功能,内部调试/开发功能等......)。

Vscode语言客户端扩展

我一直在使用语言服务器协议开发一个由客户端和服务器组成的vscode扩展。

目前,我正在尝试执行以下操作:当服务器检测到某种情况时,他请求客户端将一定数量的文件加载到工作区中。

我这样做有严重的问题。由于语言服务器协议没有执行此操作的特定请求,因此我考虑从服务器向客户端发送消息,并且一旦客户端检测到此消息,他将继续执行此命令。

问题是,我也不知道该怎么做。谁能帮帮我吗?

回答如下:

只要您确定该名称不会与现有的LSP方法发生冲突,您就可以定义自己的任意方法。例如,在official lsp-sample中,你可以这样做:

(在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.onDidChangeContentserver/src/server.ts听众)

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

每当您更改.txt文件的内容时,这将输出以下内容到开发控制台(因为该示例使用plaintext作为其文档选择器):

加载文件path / to / file / a.txt,path / to / file / b.txt

在自定义方法的名称,参数或调用它们时,您在这里几乎具有完全的灵活性。语言服务器使用这样的自定义方法是很常见的,这些方法不是用于各种目的的协议的一部分(高级功能,内部调试/开发功能等......)。

与本文相关的文章

发布评论

评论列表 (0)

  1. 暂无评论