mirror of
https://github.com/neovim/neovim.git
synced 2025-09-06 11:28:22 +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
|
--- @class (private) vim.diagnostic.Handler
|
||||||
--- @field show? fun(namespace: integer, bufnr: integer, diagnostics: vim.Diagnostic[], opts?: vim.diagnostic.OptsResolved)
|
--- @field show? fun(namespace: integer, bufnr: integer, diagnostics: vim.Diagnostic[], opts?: vim.diagnostic.OptsResolved)
|
||||||
--- @field hide? fun(namespace:integer, bufnr:integer)
|
--- @field hide? fun(namespace:integer, bufnr:integer)
|
||||||
--- @field _augroup? integer
|
|
||||||
|
|
||||||
--- @nodoc
|
--- @nodoc
|
||||||
--- @type table<string,vim.diagnostic.Handler>
|
--- @type table<string,vim.diagnostic.Handler>
|
||||||
@@ -1841,12 +1840,14 @@ M.handlers.virtual_lines = {
|
|||||||
ns.user_data.virt_lines_ns =
|
ns.user_data.virt_lines_ns =
|
||||||
api.nvim_create_namespace(string.format('nvim.%s.diagnostic.virtual_lines', ns.name))
|
api.nvim_create_namespace(string.format('nvim.%s.diagnostic.virtual_lines', ns.name))
|
||||||
end
|
end
|
||||||
if not M.handlers.virtual_lines._augroup then
|
if not ns.user_data.virt_lines_augroup then
|
||||||
M.handlers.virtual_lines._augroup =
|
ns.user_data.virt_lines_augroup = api.nvim_create_augroup(
|
||||||
api.nvim_create_augroup('nvim.lsp.diagnostic.virt_lines', { clear = true })
|
string.format('nvim.%s.diagnostic.virt_lines', ns.name),
|
||||||
|
{ clear = true }
|
||||||
|
)
|
||||||
end
|
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
|
if opts.virtual_lines.format then
|
||||||
diagnostics = reformat_diagnostics(opts.virtual_lines.format, diagnostics)
|
diagnostics = reformat_diagnostics(opts.virtual_lines.format, diagnostics)
|
||||||
@@ -1855,7 +1856,7 @@ M.handlers.virtual_lines = {
|
|||||||
if opts.virtual_lines.current_line == true then
|
if opts.virtual_lines.current_line == true then
|
||||||
api.nvim_create_autocmd('CursorMoved', {
|
api.nvim_create_autocmd('CursorMoved', {
|
||||||
buffer = bufnr,
|
buffer = bufnr,
|
||||||
group = M.handlers.virtual_lines._augroup,
|
group = ns.user_data.virt_lines_augroup,
|
||||||
callback = function()
|
callback = function()
|
||||||
render_virtual_lines_at_current_line(diagnostics, ns.user_data.virt_lines_ns, bufnr)
|
render_virtual_lines_at_current_line(diagnostics, ns.user_data.virt_lines_ns, bufnr)
|
||||||
end,
|
end,
|
||||||
@@ -1875,7 +1876,7 @@ M.handlers.virtual_lines = {
|
|||||||
if api.nvim_buf_is_valid(bufnr) then
|
if api.nvim_buf_is_valid(bufnr) then
|
||||||
api.nvim_buf_clear_namespace(bufnr, ns.user_data.virt_lines_ns, 0, -1)
|
api.nvim_buf_clear_namespace(bufnr, ns.user_data.virt_lines_ns, 0, -1)
|
||||||
end
|
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
|
||||||
end,
|
end,
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user