用途:解决 LSP 自定义请求/通知中 URI 参数跨进程传输后失效的问题。当使用 Connection.sendRequest(method, params) 时,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.parse(fileUri) 构造参数并 sendRequest;接收端用 URI.revive(params.uri) 复原,它是 toJSON 的精确逆操作,会恢复 _formatted/_fsPath 缓存。
限制与注意:不要把反序列化后的参数直接传给 vscode.workspace.fs.*,这些 API 需要真正的 URI 实例;当参数写成 uri: URI 时编译能通过,但运行时接收端仍是普通 UriComponents,可通过处理器日志中 uri=[object Object] 确认。