我正在基于official "lsp-sample"开发用于VS Code的语言服务器(和客户端)。根据文档(Language Server Extension Guide),设置功能textDocumentSync: TextDocumentSyncKind.Incremental
应该使语言服务器能够接收事件onDidOpenTextDocument
,onDidChangeTextDocument
和onDidCloseTextDocument
。
但是,VS Code似乎没有将这些事件发送到语言服务器,并且未击中事件处理程序(例如on this line)中的断点(其他事件处理程序中的断点 命中,因此调试语言服务器 起作用了。
在客户端或服务器配置中哪些问题会阻止VS Code发送这些事件?
答案 0 :(得分:0)
在对语言客户端进行大量调试之后,我发现了问题:在启动时,我的语言服务器会向stdout打印一些内容以表明它已经准备就绪。由于语言服务器正在通过stdout / stdin进行通信,因此VS Code(正确)将其解释为违反协议,从而导致整个程序甚至无法正确启动。删除打印语句即可解决此问题。
令人惊讶的是,尽管我的语言服务器实现有问题,Sublime Text中的LSP插件显然忽略了该协议违规并继续起作用。