使用textDocument/didOpen时clangd返回"method not found"的原因排查
问题原因及解决办法
核心问题:你错误地把textDocument/didOpen作为带id的请求发送了,但它是LSP规范里的通知类型方法,不需要也不能携带id字段。
LSP中的方法分两种:
- 请求(Request):需要服务端返回响应,必须包含
id字段 - 通知(Notification):不需要服务端响应,绝对不能带
id
textDocument/didOpen属于通知,clangd收到带id的该请求时,会认为这是一个不存在的请求方法,因此返回-32601 method not found。
修正后的请求报文
Content-Length: 1759 { "jsonrpc": "2.0", "method": "textDocument/didOpen", "params": { "textDocument": { "languageId": "cpp", "text": "file content...", "uri": "file://src/main.cpp", "version": 1 } } }
额外检查点
- 确认初始化阶段clangd返回的
serverCapabilities中包含textDocumentSync(didOpen属于文本同步的一部分,初始化正常的话一般已支持) - 确保
Content-Length的数值与JSON正文的字节数完全匹配,避免解析错误
内容的提问来源于stack exchange,提问作者Lasersköld
相关产品推荐
相关产品推荐

