diff options
author | Jaehwang Jung <tomtomjhj@gmail.com> | 2023-10-17 10:51:36 +0900 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-10-16 20:51:36 -0500 |
commit | 35f475d0a51aad03abfc005a0224d315c45ffd67 (patch) | |
tree | 1124c0978baff457979587bca112367c7cafa0b0 /runtime/lua/vim/diagnostic.lua | |
parent | a63c67005b9ea17214d86391e2fd649658c1bdec (diff) | |
download | rneovim-35f475d0a51aad03abfc005a0224d315c45ffd67.tar.gz rneovim-35f475d0a51aad03abfc005a0224d315c45ffd67.tar.bz2 rneovim-35f475d0a51aad03abfc005a0224d315c45ffd67.zip |
fix(diagnostics): if buffer not loaded, skip handlers that set extmark (#25628)
Problem:
When enabling diagnostics, there can be diagnostics for unloaded buffer,
but some handlers nevertheless attempt to set extmarks in such buffers.
Solution:
* Exit underline/virtual_text handler if buffer is not loaded.
* Don't require is_loaded as precondition for show(), because handlers
don't necessarily depend on it.
Diffstat (limited to 'runtime/lua/vim/diagnostic.lua')
-rw-r--r-- | runtime/lua/vim/diagnostic.lua | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/runtime/lua/vim/diagnostic.lua b/runtime/lua/vim/diagnostic.lua index b8d3906b7f..9e9b09ed1d 100644 --- a/runtime/lua/vim/diagnostic.lua +++ b/runtime/lua/vim/diagnostic.lua @@ -652,16 +652,14 @@ function M.config(opts, namespace) if namespace then for bufnr, v in pairs(diagnostic_cache) do - if api.nvim_buf_is_loaded(bufnr) and v[namespace] then + if v[namespace] then M.show(namespace, bufnr) end end else for bufnr, v in pairs(diagnostic_cache) do - if api.nvim_buf_is_loaded(bufnr) then - for ns in pairs(v) do - M.show(ns, bufnr) - end + for ns in pairs(v) do + M.show(ns, bufnr) end end end @@ -693,9 +691,7 @@ function M.set(namespace, bufnr, diagnostics, opts) set_diagnostic_cache(namespace, bufnr, diagnostics) end - if api.nvim_buf_is_loaded(bufnr) then - M.show(namespace, bufnr, nil, opts) - end + M.show(namespace, bufnr, nil, opts) api.nvim_exec_autocmds('DiagnosticChanged', { modeline = false, @@ -928,6 +924,10 @@ M.handlers.underline = { bufnr = get_bufnr(bufnr) opts = opts or {} + if not vim.api.nvim_buf_is_loaded(bufnr) then + return + end + if opts.underline and opts.underline.severity then diagnostics = filter_by_severity(opts.underline.severity, diagnostics) end @@ -994,6 +994,10 @@ M.handlers.virtual_text = { bufnr = get_bufnr(bufnr) opts = opts or {} + if not vim.api.nvim_buf_is_loaded(bufnr) then + return + end + local severity if opts.virtual_text then if opts.virtual_text.format then |