4

我正在编写一个与 neovim 一起使用的语言服务器协议 (LSP) 服务器,我想针对 VSCode 对其进行测试,以确保我掌握了所有细节并且我不会意外编码任何 neovim-isms进入我的实施。

当前的文档建议我应该编写一个 VSCode 扩展来充当我的服务器的客户端,但我对在我不会使用的平台上投入那么多精力并不感兴趣。

在 neovim 中,我可以定义一个 CLI 命令和它对应的文件类型,然后点击 go:

let g:LanguageClient_serverCommands = {
    \ 'rust': ['rustup', 'run', 'nightly', 'rls'],
    \ 'javascript': ['/opt/javascript-typescript-langserver/lib/language-server-stdio.js'],
    \ }

Visual Studio 代码中是否存在类似的东西?

4

1 回答 1

5

在 VSCode 中编写语言客户端并不费力,我是这样做的:

export function activate(context: vscode.ExtensionContext) {

    // This line of code will only be executed once when your extension is activated

    // TODO: Start server exe and communicate with it
    let serverExe = <Path_to_server>;

    let ServerOptions: ServerOptions = {
        run: {command: serverExe, args:['-lsp']},
        debug: {command: serverExe, args:['-lsp']}
    }

    let clientOptions: LanguageClientOptions = {
        // Register the server for plain text documents
        documentSelector: [
            {
                pattern: '**/*.txt',
            }
        ],

    }

    let lspClient = new LanguageClient("Hello LSP", ServerOptions, clientOptions);

    // For debugging only
    //lspClient.trace = Trace.Verbose;

    //add all disposables here
    context.subscriptions.push(lspClient.start());
}

一旦客户端启动,它就会启动服务器并开始初始化会话,客户端监视 VSCode 上的所有重要事件(文档打开/关闭/修改,Ctrl+空格,...)并向服务器发送正确的请求/通知

于 2018-02-23T18:13:42.020 回答