diff --git a/runtime/lua/vim/lsp/codelens.lua b/runtime/lua/vim/lsp/codelens.lua index 63688b96d0..a2639f3397 100644 --- a/runtime/lua/vim/lsp/codelens.lua +++ b/runtime/lua/vim/lsp/codelens.lua @@ -259,6 +259,12 @@ function Provider:on_win(toprow, botrow) virt_lines_overflow = 'scroll', hl_mode = 'combine', }) + + -- Fix https://github.com/neovim/neovim/issues/16166 + -- Make sure the code lens on the first line is visible when updating. + if row == 0 then + vim.cmd('normal! zb') + end end self.row_version[row] = self.version end diff --git a/test/functional/plugin/lsp/codelens_spec.lua b/test/functional/plugin/lsp/codelens_spec.lua index e099aaf5d2..530ae6639c 100644 --- a/test/functional/plugin/lsp/codelens_spec.lua +++ b/test/functional/plugin/lsp/codelens_spec.lua @@ -34,6 +34,7 @@ describe('vim.lsp.codelens', function() ]]) local grid_with_lenses = dedent([[ + {1: 1 implementation} | struct S { | a: i32, | b: String, | @@ -52,7 +53,6 @@ describe('vim.lsp.codelens', function() println!("S.a: {}, S.b: {}", s.a, s.b); | } | ^ | - {1:~ }| | ]]) @@ -248,6 +248,7 @@ describe('vim.lsp.codelens', function() feed('ggdd') screen:expect([[ + {1: 1 implementation} | ^a: i32, | b: String, | } | @@ -265,7 +266,7 @@ describe('vim.lsp.codelens', function() println!("S.a: {}, S.b: {}", s.a, s.b); | } | | - {1:~ }|*2 + {1:~ }| | ]]) exec_lua(function() @@ -276,6 +277,7 @@ describe('vim.lsp.codelens', function() ) end) screen:expect([[ + {1: 1 implementation} | ^a: i32, | b: String, | } | @@ -293,7 +295,7 @@ describe('vim.lsp.codelens', function() println!("S.a: {}, S.b: {}", s.a, s.b); | } | | - {1:~ }|*2 + {1:~ }| | ]]) end) @@ -378,6 +380,7 @@ describe('vim.lsp.codelens', function() it('clears extmarks beyond the bottom of the buffer', function() feed('12G4dd') screen:expect([[ + {1: 1 implementation} | struct S { | a: i32, | b: String, | @@ -390,7 +393,7 @@ describe('vim.lsp.codelens', function() } | | ^ | - {1:~ }|*7 + {1:~ }|*6 4 fewer lines | ]]) end)