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 2 commits intoldelossa:mainfrom
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,保持与缓冲区同步,避免“列号失效”导致的错误。 结果 |
I use chatgpt5 fix this, please review