mirror of
https://github.com/neovim/neovim
synced 2025-07-16 01:01:49 +00:00
fix(diagnostic): improve current_line refresh logic #32275
Problem: The current implementation uses a global augroup for virtual lines in diagnostics, which can lead to conflicts and unintended behavior when multiple namespaces/buffers are involved. Solution: Refactor the code to use a namespace-specific augroup for virtual lines. This ensures that each namespace has its own augroup. Scope the clear commands to only the relevant buffer.
This commit is contained in:
@ -344,7 +344,6 @@ local global_diagnostic_options = {
|
||||
--- @class (private) vim.diagnostic.Handler
|
||||
--- @field show? fun(namespace: integer, bufnr: integer, diagnostics: vim.Diagnostic[], opts?: vim.diagnostic.OptsResolved)
|
||||
--- @field hide? fun(namespace:integer, bufnr:integer)
|
||||
--- @field _augroup? integer
|
||||
|
||||
--- @nodoc
|
||||
--- @type table<string,vim.diagnostic.Handler>
|
||||
@ -1841,12 +1840,14 @@ M.handlers.virtual_lines = {
|
||||
ns.user_data.virt_lines_ns =
|
||||
api.nvim_create_namespace(string.format('nvim.%s.diagnostic.virtual_lines', ns.name))
|
||||
end
|
||||
if not M.handlers.virtual_lines._augroup then
|
||||
M.handlers.virtual_lines._augroup =
|
||||
api.nvim_create_augroup('nvim.lsp.diagnostic.virt_lines', { clear = true })
|
||||
if not ns.user_data.virt_lines_augroup then
|
||||
ns.user_data.virt_lines_augroup = api.nvim_create_augroup(
|
||||
string.format('nvim.%s.diagnostic.virt_lines', ns.name),
|
||||
{ clear = true }
|
||||
)
|
||||
end
|
||||
|
||||
api.nvim_clear_autocmds({ group = M.handlers.virtual_lines._augroup })
|
||||
api.nvim_clear_autocmds({ group = ns.user_data.virt_lines_augroup, buffer = bufnr })
|
||||
|
||||
if opts.virtual_lines.format then
|
||||
diagnostics = reformat_diagnostics(opts.virtual_lines.format, diagnostics)
|
||||
@ -1855,7 +1856,7 @@ M.handlers.virtual_lines = {
|
||||
if opts.virtual_lines.current_line == true then
|
||||
api.nvim_create_autocmd('CursorMoved', {
|
||||
buffer = bufnr,
|
||||
group = M.handlers.virtual_lines._augroup,
|
||||
group = ns.user_data.virt_lines_augroup,
|
||||
callback = function()
|
||||
render_virtual_lines_at_current_line(diagnostics, ns.user_data.virt_lines_ns, bufnr)
|
||||
end,
|
||||
@ -1875,7 +1876,7 @@ M.handlers.virtual_lines = {
|
||||
if api.nvim_buf_is_valid(bufnr) then
|
||||
api.nvim_buf_clear_namespace(bufnr, ns.user_data.virt_lines_ns, 0, -1)
|
||||
end
|
||||
api.nvim_clear_autocmds({ group = M.handlers.virtual_lines._augroup })
|
||||
api.nvim_clear_autocmds({ group = ns.user_data.virt_lines_augroup, buffer = bufnr })
|
||||
end
|
||||
end,
|
||||
}
|
||||
|
Reference in New Issue
Block a user