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

Posted

技术标签:

【中文标题】将外部语言服务器连接到 VSCode 扩展【英文标题】:Connect external language server to VSCode extension 【发布时间】:2017-03-10 03:11:15 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

根据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);

【讨论】:

【参考方案2】:

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

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

【讨论】:

以上是关于将外部语言服务器连接到 VSCode 扩展的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Visual Studio Code 连接到 MySQL 服务器

将 JSON 从外部服务器连接到 Swift tableView

Codeigniter 无法连接到外部 SQL Server

将 Android 应用程序连接到外部数据库 (phpmyadmin)

从外部IP将TCP客户端连接到我的服务器

如何将外部服务器上的网站连接到本地主机上通过 Xaamp 运行的数据库?