fix(diagnostic): ensure autocmd always is always sent diagnostics

This commit is contained in:
Lewis Russell
2025-06-05 12:24:33 +01:00
committed by Lewis Russell
parent b6b35cb557
commit 2b21c9c23f
2 changed files with 26 additions and 13 deletions

View File

@ -418,7 +418,7 @@ local bufnr_and_namespace_cacher_mt = {
}
-- bufnr -> ns -> Diagnostic[]
local diagnostic_cache = {} --- @type table<integer,table<integer,vim.Diagnostic[]>>
local diagnostic_cache = {} --- @type table<integer,table<integer,vim.Diagnostic[]?>>
do
local group = api.nvim_create_augroup('nvim.diagnostic.buf_wipeout', {})
setmetatable(diagnostic_cache, {
@ -710,16 +710,6 @@ local function norm_diag(bufnr, namespace, d)
d1.bufnr = bufnr
end
--- @param namespace integer
--- @param bufnr integer
--- @param diagnostics vim.Diagnostic.Set[]
local function set_diagnostic_cache(namespace, bufnr, diagnostics)
for _, diagnostic in ipairs(diagnostics) do
norm_diag(bufnr, namespace, diagnostic)
end
diagnostic_cache[bufnr][namespace] = diagnostics
end
--- @param bufnr integer
--- @param last integer
local function restore_extmarks(bufnr, last)
@ -1260,10 +1250,16 @@ function M.set(namespace, bufnr, diagnostics, opts)
bufnr = vim._resolve_bufnr(bufnr)
for _, diagnostic in ipairs(diagnostics) do
norm_diag(bufnr, namespace, diagnostic)
end
--- @cast diagnostics vim.Diagnostic[]
if vim.tbl_isempty(diagnostics) then
diagnostic_cache[bufnr][namespace] = nil
else
set_diagnostic_cache(namespace, bufnr, diagnostics)
diagnostic_cache[bufnr][namespace] = diagnostics
end
M.show(namespace, bufnr, nil, opts)
@ -1272,7 +1268,7 @@ function M.set(namespace, bufnr, diagnostics, opts)
modeline = false,
buffer = bufnr,
-- TODO(lewis6991): should this be deepcopy()'d like they are in vim.diagnostic.get()
data = { diagnostics = diagnostic_cache[bufnr][namespace] },
data = { diagnostics = diagnostics },
})
end