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