diff options
Diffstat (limited to 'runtime/lua/vim/lsp/diagnostic.lua')
-rw-r--r-- | runtime/lua/vim/lsp/diagnostic.lua | 26 |
1 files changed, 22 insertions, 4 deletions
diff --git a/runtime/lua/vim/lsp/diagnostic.lua b/runtime/lua/vim/lsp/diagnostic.lua index a0568bc09c..2a77992c4d 100644 --- a/runtime/lua/vim/lsp/diagnostic.lua +++ b/runtime/lua/vim/lsp/diagnostic.lua @@ -408,6 +408,16 @@ local function disable(bufnr) clear(bufnr) end +--- Refresh diagnostics, only if we have attached clients that support it +---@param bufnr (integer) buffer number +---@param opts? table Additional options to pass to util._refresh +---@private +local function _refresh(bufnr, opts) + opts = opts or {} + opts['bufnr'] = bufnr + util._refresh(ms.textDocument_diagnostic, opts) +end + --- Enable pull diagnostics for a buffer ---@param bufnr (integer) Buffer handle, or 0 for current ---@private @@ -429,7 +439,7 @@ function M._enable(bufnr) return end if bufstates[bufnr] and bufstates[bufnr].enabled then - util._refresh(ms.textDocument_diagnostic, { bufnr = bufnr, only_visible = true }) + _refresh(bufnr, { only_visible = true, client_id = opts.data.client_id }) end end, group = augroup, @@ -438,7 +448,7 @@ function M._enable(bufnr) api.nvim_buf_attach(bufnr, false, { on_reload = function() if bufstates[bufnr] and bufstates[bufnr].enabled then - util._refresh(ms.textDocument_diagnostic, { bufnr = bufnr }) + _refresh(bufnr) end end, on_detach = function() @@ -448,8 +458,16 @@ function M._enable(bufnr) api.nvim_create_autocmd('LspDetach', { buffer = bufnr, - callback = function() - disable(bufnr) + callback = function(args) + local clients = vim.lsp.get_clients({ bufnr = bufnr, method = ms.textDocument_diagnostic }) + + if + not vim.iter(clients):any(function(c) + return c.id ~= args.data.client_id + end) + then + disable(bufnr) + end end, group = augroup, }) |