语言服务器:如何启用“ onDidOpenTextDocument”事件

时间:2019-03-07 18:35:16

标签: visual-studio-code vscode-extensions language-server-protocol

我正在基于official "lsp-sample"开发用于VS Code的语言服务器(和客户端)。根据文档(Language Server Extension Guide),设置功能textDocumentSync: TextDocumentSyncKind.Incremental应该使语言服务器能够接收事件onDidOpenTextDocumentonDidChangeTextDocumentonDidCloseTextDocument

但是,VS Code似乎没有将这些事件发送到语言服务器,并且未击中事件处理程序(例如on this line)中的断点(其他事件处理程序中的断点 命中,因此调试语言服务器 起作用了。

在客户端或服务器配置中哪些问题会阻止VS Code发送这些事件?

1 个答案:

答案 0 :(得分:0)

在对语言客户端进行大量调试之后,我发现了问题:在启动时,我的语言服务器会向stdout打印一些内容以表明它已经准备就绪。由于语言服务器正在通过stdout / stdin进行通信,因此VS Code(正确)将其解释为违反协议,从而导致整个程序甚至无法正确启动。删除打印语句即可解决此问题。

令人惊讶的是,尽管我的语言服务器实现有问题,Sublime Text中的LSP插件显然忽略了该协议违规并继续起作用。