SuperAPI AI 工具集

lsp-custom-requests

编程与开发

查看项目

更新于 10-15 21:43

技能介绍

用途:解决 LSP 自定义请求/通知中 URI 参数跨进程传输后失效的问题。当使用 Connection.sendRequest(method, params) 时,参数会经过 JSON.stringify;vscode-uri 的 Uri.toJSON() 返回的是 UriComponents 纯数据对象,接收端拿到的是无原型对象,没有 toString/fsPath,调用 uri.toString() 会得到 "[object Object]",导致 fs.stat/readFile 报 EntryNotFound。

主要能力与规则:不要在未复原的情况下对线上收到的 URI 调用 .toString() 或 .fsPath;应把 URI 参数类型声明为 UriComponents(派生类型),接收端再复原。

用法模式:用 ReturnType<URI['toJSON']> 派生 UriComponents 类型(vscode-uri 包入口未再导出该类型),定义形如 { uri: UriComponents } 的参数类型;发送端用 URI.parse(fileUri) 构造参数并 sendRequest;接收端在 handler 中调用 URI.revive(params.uri) 得到真正的 URI 实例。URI.revive 是 toJSON 的精确逆操作,会恢复 _formatted / _fsPath 缓存。

限制与注意:不要把反序列化后的参数直接传给 vscode.workspace.fs.*,这些 API 需要真实 URI 实例;参数写成 uri: URI 虽能编译通过,但运行时接收端仍是普通 UriComponents,可通过 handler 日志中 uri=[object Object] 确认该故障模式。