From 88dd4929962a85da0c42ac7f8c64f995dc2dfc7e Mon Sep 17 00:00:00 2001 From: Jaehwang Jung Date: Sun, 19 Apr 2026 10:27:02 +0900 Subject: [PATCH] fix(lsp): stale codelens after external file change (#39203) Problem: Codelens virtual lines remain on stale rows after an external file change and buffer reload. Solution: Clear codelens extmarks and cached row/version state in `on_reload` before requesting fresh code lenses. --- runtime/lua/vim/lsp/codelens.lua | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/runtime/lua/vim/lsp/codelens.lua b/runtime/lua/vim/lsp/codelens.lua index 474176fe9c..07212e6554 100644 --- a/runtime/lua/vim/lsp/codelens.lua +++ b/runtime/lua/vim/lsp/codelens.lua @@ -55,6 +55,7 @@ function Provider:new(bufnr) on_reload = function(_, buf) local provider = Provider.active[buf] if provider then + provider:clear() provider:automatic_request() end end, @@ -94,6 +95,20 @@ function Provider:on_detach(client_id) end end +---@package +function Provider:clear() + self:reset_timer() + self.version = nil + self.row_version = {} + + for _, state in pairs(self.client_state) do + state.row_lenses = {} + api.nvim_buf_clear_namespace(self.bufnr, state.namespace, 0, -1) + end + + api.nvim__redraw({ buf = self.bufnr, valid = true, flush = false }) +end + --- `lsp.Handler` for `textDocument/codeLens`. --- ---@package