Fix: 'Invalid 'col': out of range' When calling 'lua vim.lsp.buf.incoming_calls()' - #30
Fix: 'Invalid 'col': out of range' When calling 'lua vim.lsp.buf.incoming_calls()'#30niexin-dev wants to merge 3 commits into
Conversation
|
修改总体思路 在写入或刷新 extmark 之前,统一调用新的 ensure_range_utf8,把 LSP range 中的列号转换成 Neovim 需要的 UTF‑8 字节列,同时根据实际缓冲区内容进行钳制,避免越界。 当 extmark 已存在时,会用 extmark 的最新位置回填节点或引用的 range,并打上 _litee_converted 标记,表示这些列号已经是安全的 UTF‑8 坐标,防止重复转换。 关键辅助函数 clamp_line / clamp_col:在访问缓冲区之前先把行、列限制在当前缓冲区范围内,防止文件内容已被编辑或折叠变化时产生越界。 get_line_byte_from_position:必要时调用 vim.lsp.util._get_line_byte_from_position 把 UTF‑16 列号转成 UTF‑8 字节列;如果服务器已返回 UTF‑8,或者之前已经转换过,就直接复用原值,避免重复运算。 extmark 更新流程 后续刷新:再次刷新时先读 extmark 的当前位置,再根据相对行列差更新节点/引用的 range,保持与缓冲区同步,避免“列号失效”导致的错误。 结果 |
动机: - `vim.lsp.with()` 已在 Nvim 0.12 中移除,原有写法会触发弃用警告并失效 - 需要改为客户端级别绑定,保持 calltree 的调用层级处理可用 改动: - 不再使用 `vim.lsp.with()` 包装全局 handler - 改为将 calltree 的 incoming/outgoing 处理器直接挂到各个 LSP client - 同时补上已存在客户端和 `LspAttach` 新客户端的绑定路径 影响: - 避免在新版 Nvim 中出现弃用警告和 handler 失效 - callHierarchy 请求在新旧客户端接入场景下都能继续生效 - 风险有限
I use chatgpt5 fix this, please review