aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthew Toohey <contact@mtoohey.com>2021-12-05 21:39:00 -0500
committerGitHub <noreply@github.com>2021-12-05 19:39:00 -0700
commit62f0157853c0363d47466d06c6548dbd96d9b39c (patch)
tree673b0ee9f18eac50b8fd3b7bd5391b9ef4aa83d1
parent24f9463dd07abc5953e01d3a5ca52b734544b471 (diff)
downloadrneovim-62f0157853c0363d47466d06c6548dbd96d9b39c.tar.gz
rneovim-62f0157853c0363d47466d06c6548dbd96d9b39c.tar.bz2
rneovim-62f0157853c0363d47466d06c6548dbd96d9b39c.zip
fix(diagnostic): escape special chars in file names (#16527)
Co-authored-by: zeertzjq <zeertzjq@outlook.com> Co-authored-by: Gregory Anders <greg@gpanders.com>
-rw-r--r--runtime/lua/vim/diagnostic.lua7
-rw-r--r--test/functional/lua/diagnostic_spec.lua22
2 files changed, 27 insertions, 2 deletions
diff --git a/runtime/lua/vim/diagnostic.lua b/runtime/lua/vim/diagnostic.lua
index 708ee1727a..2973f293f3 100644
--- a/runtime/lua/vim/diagnostic.lua
+++ b/runtime/lua/vim/diagnostic.lua
@@ -658,7 +658,10 @@ function M.set(namespace, bufnr, diagnostics, opts)
vim.api.nvim_buf_call(bufnr, function()
vim.api.nvim_command(
- string.format("doautocmd <nomodeline> DiagnosticChanged %s", vim.api.nvim_buf_get_name(bufnr))
+ string.format(
+ "doautocmd <nomodeline> DiagnosticChanged %s",
+ vim.fn.fnameescape(vim.api.nvim_buf_get_name(bufnr))
+ )
)
end)
end
@@ -1333,7 +1336,7 @@ function M.reset(namespace, bufnr)
end
vim.api.nvim_command(
- string.format("doautocmd <nomodeline> DiagnosticChanged %s", vim.api.nvim_buf_get_name(bufnr))
+ string.format("doautocmd <nomodeline> DiagnosticChanged %s", vim.fn.fnameescape(vim.api.nvim_buf_get_name(bufnr)))
)
end
diff --git a/test/functional/lua/diagnostic_spec.lua b/test/functional/lua/diagnostic_spec.lua
index 927ee8060d..eeb9316b06 100644
--- a/test/functional/lua/diagnostic_spec.lua
+++ b/test/functional/lua/diagnostic_spec.lua
@@ -1918,5 +1918,27 @@ describe('vim.diagnostic', function()
return {show_called, hide_called}
]])
end)
+
+ it('triggers the autocommand when diagnostics are set', function()
+ eq(1, exec_lua [[
+ vim.g.diagnostic_autocmd_triggered = 0
+ vim.cmd('autocmd DiagnosticChanged * let g:diagnostic_autocmd_triggered = 1')
+ 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
+ ]])
+ end)
+
+ it('triggers the autocommand when diagnostics are cleared', function()
+ eq(1, exec_lua [[
+ vim.g.diagnostic_autocmd_triggered = 0
+ vim.cmd('autocmd DiagnosticChanged * let g:diagnostic_autocmd_triggered = 1')
+ vim.api.nvim_buf_set_name(diagnostic_bufnr, "test | test")
+ vim.diagnostic.reset(diagnostic_ns, diagnostic_bufnr)
+ return vim.g.diagnostic_autocmd_triggered
+ ]])
+ end)
end)
end)