Skip to content

Commit

Permalink
fix(diagnostic): use nvim_exec_autocmds to trigger DiagnosticChanged (#…
Browse files Browse the repository at this point in the history
…18205)

Use nvim_exec_autocmds to issue the DiagnosticChanged autocommand,
rather than nvim_buf_call, which has some side effects when drawing
statuslines.

(cherry picked from commit 4a64ce1)

Co-authored-by: Gregory Anders <greg@gpanders.com>
  • Loading branch information
github-actions[bot] and gpanders committed Apr 21, 2022
1 parent 0302c35 commit 7f8faac
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 22 deletions.
24 changes: 8 additions & 16 deletions runtime/lua/vim/diagnostic.lua
Original file line number Diff line number Diff line change
Expand Up @@ -668,14 +668,10 @@ function M.set(namespace, bufnr, diagnostics, opts)
M.show(namespace, bufnr, nil, opts)
end

vim.api.nvim_buf_call(bufnr, function()
vim.api.nvim_command(
string.format(
"doautocmd <nomodeline> DiagnosticChanged %s",
vim.fn.fnameescape(vim.api.nvim_buf_get_name(bufnr))
)
)
end)
vim.api.nvim_exec_autocmds("DiagnosticChanged", {
modeline = false,
buffer = bufnr,
})
end

--- Get namespace metadata.
Expand Down Expand Up @@ -1382,14 +1378,10 @@ function M.reset(namespace, bufnr)
M.hide(iter_namespace, iter_bufnr)
end

vim.api.nvim_buf_call(iter_bufnr, function()
vim.api.nvim_command(
string.format(
"doautocmd <nomodeline> DiagnosticChanged %s",
vim.fn.fnameescape(vim.api.nvim_buf_get_name(iter_bufnr))
)
)
end)
vim.api.nvim_exec_autocmds("DiagnosticChanged", {
modeline = false,
buffer = iter_bufnr,
})
end
end

Expand Down
19 changes: 13 additions & 6 deletions test/functional/lua/diagnostic_spec.lua
Original file line number Diff line number Diff line change
Expand Up @@ -1939,24 +1939,31 @@ describe('vim.diagnostic', function()
end)

it('triggers the autocommand when diagnostics are set', function()
eq(1, exec_lua [[
eq(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 = 1')
vim.cmd('autocmd DiagnosticChanged * let g:diagnostic_autocmd_triggered = +expand("<abuf>")')
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
return vim.g.diagnostic_autocmd_triggered == diagnostic_bufnr
]])
end)

it('triggers the autocommand when diagnostics are cleared', function()
eq(1, exec_lua [[
eq(true, exec_lua [[
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 = 1')
vim.cmd('autocmd DiagnosticChanged * let g:diagnostic_autocmd_triggered = +expand("<abuf>")')
vim.api.nvim_buf_set_name(diagnostic_bufnr, "test | test")
vim.diagnostic.reset(diagnostic_ns, diagnostic_bufnr)
return vim.g.diagnostic_autocmd_triggered
return vim.g.diagnostic_autocmd_triggered == diagnostic_bufnr
]])
end)
end)
Expand Down

0 comments on commit 7f8faac

Please sign in to comment.