feat(diagnostic): pass diagnostics as data to DiagnosticChanged autocmd (#20173)

This commit is contained in:
Gregory Anders 2022-09-13 08:33:39 -06:00 committed by GitHub
parent f19e91acd8
commit 1970d2ac43
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 22 additions and 6 deletions

View File

@ -295,10 +295,18 @@ option in the "signs" table of |vim.diagnostic.config()| or 10 if unset).
EVENTS *diagnostic-events*
*DiagnosticChanged*
DiagnosticChanged After diagnostics have changed.
DiagnosticChanged After diagnostics have changed. When used from Lua,
the new diagnostics are passed to the autocmcd
callback in the "data" table.
Example: >
autocmd DiagnosticChanged * lua vim.diagnostic.setqflist({ open = false })
vim.api.nvim_create_autocmd('DiagnosticChanged', {
callback = function(args)
local diagnostics = args.data.diagnostics
vim.pretty_print(diagnostics)
end,
})
<
==============================================================================
Lua module: vim.diagnostic *diagnostic-api*

View File

@ -727,6 +727,7 @@ function M.set(namespace, bufnr, diagnostics, opts)
vim.api.nvim_exec_autocmds('DiagnosticChanged', {
modeline = false,
buffer = bufnr,
data = { diagnostics = diagnostics },
})
end

View File

@ -1983,19 +1983,26 @@ end)
end)
it('triggers the autocommand when diagnostics are set', function()
eq(true, exec_lua [[
eq({true, true}, exec_lua [[
-- Set a different buffer as current to test that <abuf> is being set properly in
-- DiagnosticChanged callbacks
local tmp = vim.api.nvim_create_buf(false, true)
vim.api.nvim_set_current_buf(tmp)
vim.g.diagnostic_autocmd_triggered = 0
vim.cmd('autocmd DiagnosticChanged * let g:diagnostic_autocmd_triggered = +expand("<abuf>")')
local triggered = {}
vim.api.nvim_create_autocmd('DiagnosticChanged', {
callback = function(args)
triggered = {args.buf, #args.data.diagnostics}
end,
})
vim.api.nvim_buf_set_name(diagnostic_bufnr, "test | test")
vim.diagnostic.set(diagnostic_ns, diagnostic_bufnr, {
make_error('Diagnostic', 0, 0, 0, 0)
})
return vim.g.diagnostic_autocmd_triggered == diagnostic_bufnr
return {
triggered[1] == diagnostic_bufnr,
triggered[2] == 1,
}
]])
end)