将外部语言服务器连接到VSCode扩展程序

21

我希望实现一个使用语言服务器协议的VSCode扩展,但是我希望服务器组件在实际的服务器(云上)上运行,而不是作为VSCode扩展的一部分。

我可以将客户端扩展设置为通过WebSockets或HTTP连接到服务器吗?

2个回答

4
当您按照ServerOptions的签名初始化LanguageClient时,支持多个ServerOptionsenter image description here 如果您想使用真实的远程服务器作为语言服务器,则可以使用StreamInfo。以下是连接到您的服务器通过WebSocket并初始化LanguageClient的示例代码。
const connection = connectToServer(hostname, path);
const client = new LanguageClient(
    "docfxLanguageServer",
    "Docfx Language Server",
    () => Promise.resolve<StreamInfo>({
        reader: connection,
        writer: connection,
    }),
    {});

private connectToServer(hostname: string, path: string): Duplex {
    const ws = new WebSocket(`ws://${hostname}/${path}`);
    return WebSocket.createWebSocketStream(ws);
}

无法编辑但可以将“remove”更改为“remote”。 - infinitezero

0

我不确定您是否可以控制语言服务器的位置,但还有另一种选择。例如,您不需要实现语言服务器协议来提供解析帮助。在这种情况下,您可以实现自己方便的解析服务API(根据您想要支持的语言的性质进行定制)。

  1. 在扩展中使用 workspace.onDidChangeTextDocument 订阅工作区编辑事件
  2. 每次文件更改事件被触发时重新启动1秒超时
  3. 当超时到期且没有进一步的文件修改时,收集所有相关文件并将它们发送到您的解析服务器
  4. 在您的扩展中,使用 https://code.visualstudio.com/api/references/vscode-api#languages.createDiagnosticCollection 创建一个 DiagnosticCollection 并用云端解析服务器产生的警告/错误/提示替换它
  5. 订阅其他 workspace 事件,例如 workspace.onDidOpenTextDocumentworkspace.onDidCloseTextDocument,以使 DiagnosticCollection 内容保持相关

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接