mirror of
https://github.com/neovim/neovim.git
synced 2025-10-26 12:27:24 +00:00
feat(lsp): add function to clear codelens (#21504)
Currently once you retrieve the lenses you're pretty much stuck with them as saving new lenses is additive. Adding a dedicated method to reset lenses allows users to toggle lenses on/off which can be useful for language servers where they are noisy or expensive and you only want to see them temporary.
This commit is contained in:
committed by
GitHub
parent
cce736218f
commit
6ba34e21fe
@@ -108,13 +108,36 @@ function M.run()
|
||||
end
|
||||
end
|
||||
|
||||
---@private
|
||||
local function resolve_bufnr(bufnr)
|
||||
return bufnr == 0 and api.nvim_get_current_buf() or bufnr
|
||||
end
|
||||
|
||||
--- Clear the lenses
|
||||
---
|
||||
---@param client_id number|nil filter by client_id. All clients if nil
|
||||
---@param bufnr number|nil filter by buffer. All buffers if nil
|
||||
function M.clear(client_id, bufnr)
|
||||
local buffers = bufnr and { resolve_bufnr(bufnr) } or vim.tbl_keys(lens_cache_by_buf)
|
||||
for _, iter_bufnr in pairs(buffers) do
|
||||
local client_ids = client_id and { client_id } or vim.tbl_keys(namespaces)
|
||||
for _, iter_client_id in pairs(client_ids) do
|
||||
local ns = namespaces[iter_client_id]
|
||||
lens_cache_by_buf[iter_bufnr][iter_client_id] = {}
|
||||
api.nvim_buf_clear_namespace(iter_bufnr, ns, 0, -1)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
--- Display the lenses using virtual text
|
||||
---
|
||||
---@param lenses table of lenses to display (`CodeLens[] | null`)
|
||||
---@param bufnr number
|
||||
---@param client_id number
|
||||
function M.display(lenses, bufnr, client_id)
|
||||
local ns = namespaces[client_id]
|
||||
if not lenses or not next(lenses) then
|
||||
api.nvim_buf_clear_namespace(bufnr, ns, 0, -1)
|
||||
return
|
||||
end
|
||||
local lenses_by_lnum = {}
|
||||
@@ -126,7 +149,6 @@ function M.display(lenses, bufnr, client_id)
|
||||
end
|
||||
table.insert(line_lenses, lens)
|
||||
end
|
||||
local ns = namespaces[client_id]
|
||||
local num_lines = api.nvim_buf_line_count(bufnr)
|
||||
for i = 0, num_lines do
|
||||
local line_lenses = lenses_by_lnum[i] or {}
|
||||
|
||||
Reference in New Issue
Block a user