1

我正在基于官方的 "lsp-sample"为 VS Code 开发语言服务器(和客户端) 。根据文档(语言服务器扩展指南),设置能力textDocumentSync: TextDocumentSyncKind.Incremental应该使语言服务器能够接收事件onDidOpenTextDocumentonDidChangeTextDocument并且onDidCloseTextDocument.

但是,VS Code 似乎没有将这些事件发送到语言服务器,并且事件处理程序中的断点(例如在这一行)没有被命中(但是,其他事件处理程序中的断点命中,因此调试语言服务器确实有效) .

阻止 VS Code 发送这些事件的客户端或服务器配置可能有什么问题?

4

1 回答 1

1

在对语言客户端进行大量调试后,我发现了问题:在启动时,我的语言服务器向标准输出打印了一些东西,表明它已经准备好了。由于语言服务器通过 stdout/stdin 进行通信,VS Code(正确地)将此解释为违反协议,导致整个事情甚至无法正确启动。删除打印语句解决了该问题。

令人惊讶的是,Sublime Text 中的 LSP 插件显然忽略了这种违反协议的行为,尽管我的语言服务器实现有误,但它仍然继续运行。

于 2019-03-26T14:47:59.710 回答