From addd408b3955a16ebecb7972d6a12a91711ea108 Mon Sep 17 00:00:00 2001 From: Yi Ming Date: Wed, 18 Mar 2026 23:02:46 +0800 Subject: [PATCH] fix(lsp): redraw codelens after request completed #38352 Problem: When code lens is enabled, `on_attach` is executed, but it does not trigger a redraw. Another event, eg, moving the cursor, is required to trigger a redraw and execute the decoration provider's `on_win`. Solution: Trigger a `redraw` after each request is completed. --- runtime/lua/vim/lsp/codelens.lua | 2 ++ test/functional/plugin/lsp/codelens_spec.lua | 8 +++++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/runtime/lua/vim/lsp/codelens.lua b/runtime/lua/vim/lsp/codelens.lua index f9047fc9e1..669d601efb 100644 --- a/runtime/lua/vim/lsp/codelens.lua +++ b/runtime/lua/vim/lsp/codelens.lua @@ -128,6 +128,8 @@ function Provider:handler(err, result, ctx) state.row_lenses = row_lenses self.version = ctx.version + + api.nvim__redraw({ buf = self.bufnr, valid = true, flush = false }) end ---@package diff --git a/test/functional/plugin/lsp/codelens_spec.lua b/test/functional/plugin/lsp/codelens_spec.lua index 78661de6e7..997037210b 100644 --- a/test/functional/plugin/lsp/codelens_spec.lua +++ b/test/functional/plugin/lsp/codelens_spec.lua @@ -178,12 +178,18 @@ describe('vim.lsp.codelens', function() screen:expect({ grid = grid_with_lenses }) end) - it('clears code lenses when disabled', function() + it('clears/shows code lenses when disabled/enabled', function() exec_lua(function() vim.lsp.codelens.enable(false) end) screen:expect({ grid = grid_without_lenses }) + + exec_lua(function() + vim.lsp.codelens.enable(true) + end) + + screen:expect({ grid = grid_with_lenses }) end) it('clears code lenses when sole client detaches', function()