fix(lsp): check for lens range in vim.lsp.codelens.run() (#35294)

This commit is contained in:
Maria José Solano
2025-08-11 09:37:32 -07:00
committed by GitHub
parent e3fd906b61
commit e94d8f03b9
2 changed files with 9 additions and 5 deletions

View File

@@ -1982,7 +1982,7 @@ refresh({opts}) *vim.lsp.codelens.refresh()*
for current buffer for current buffer
run() *vim.lsp.codelens.run()* run() *vim.lsp.codelens.run()*
Run the code lens in the current line Run the code lens available in the current line.
save({lenses}, {bufnr}, {client_id}) *vim.lsp.codelens.save()* save({lenses}, {bufnr}, {client_id}) *vim.lsp.codelens.save()*
Store lenses for a specific buffer and client Store lenses for a specific buffer and client

View File

@@ -70,16 +70,20 @@ function M.get(bufnr)
return lenses return lenses
end end
--- Run the code lens in the current line --- Run the code lens available in the current line.
---
function M.run() function M.run()
local line = api.nvim_win_get_cursor(0)[1] local line = api.nvim_win_get_cursor(0)[1] - 1
local bufnr = api.nvim_get_current_buf() local bufnr = api.nvim_get_current_buf()
local options = {} --- @type {client: integer, lens: lsp.CodeLens}[] local options = {} --- @type {client: integer, lens: lsp.CodeLens}[]
local lenses_by_client = lens_cache_by_buf[bufnr] or {} local lenses_by_client = lens_cache_by_buf[bufnr] or {}
for client, lenses in pairs(lenses_by_client) do for client, lenses in pairs(lenses_by_client) do
for _, lens in pairs(lenses) do for _, lens in pairs(lenses) do
if lens.range.start.line == (line - 1) and lens.command and lens.command.command ~= '' then if
lens.command
and lens.command.command ~= ''
and lens.range.start.line <= line
and lens.range['end'].line >= line
then
table.insert(options, { client = client, lens = lens }) table.insert(options, { client = client, lens = lens })
end end
end end