繁体   English   中英

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

[英]Connect external language server to VSCode extension

我想实现一个使用Language Server Protocol的 VSCode 扩展,但我希望服务器组件位于实际服务器上(在云中),而不是 VSCode 扩展的一部分。

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

我不确定您是否可以控制语言服务器的位置,但还有另一种选择。 例如,您不需要实现语言服务器协议来提供解析帮助。 在这种情况下,您可以实现自己方便的解析服务 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内容相关

根据ServerOptions的签名初始化LanguageClient时支持多个ServerOptions 在此处输入图片说明

如果您想使用真正的删除服务器作为您的语言服务器,您可以使用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);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM