diff options
author | Tristan Knight <admin@snappeh.com> | 2025-02-02 09:56:01 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-02-02 01:56:01 -0800 |
commit | 5bc948c050ce321ed56ff48b0d41e189b1ea4c87 (patch) | |
tree | 5a5f3a9c00eba45ea6a46f7775e8461bef4e4bf8 /runtime/lua/vim/diagnostic.lua | |
parent | a22f2102ceb0b9f33125ce95b4d3cbdcac0f87c3 (diff) | |
download | rneovim-5bc948c050ce321ed56ff48b0d41e189b1ea4c87.tar.gz rneovim-5bc948c050ce321ed56ff48b0d41e189b1ea4c87.tar.bz2 rneovim-5bc948c050ce321ed56ff48b0d41e189b1ea4c87.zip |
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.
Diffstat (limited to 'runtime/lua/vim/diagnostic.lua')
-rw-r--r-- | runtime/lua/vim/diagnostic.lua | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/runtime/lua/vim/diagnostic.lua b/runtime/lua/vim/diagnostic.lua index 2538cd3048..6016867046 100644 --- a/runtime/lua/vim/diagnostic.lua +++ b/runtime/lua/vim/diagnostic.lua @@ -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, } |