diff --git a/runtime/lua/vim/lsp/buf.lua b/runtime/lua/vim/lsp/buf.lua index 14bbb279f1..e475b39861 100644 --- a/runtime/lua/vim/lsp/buf.lua +++ b/runtime/lua/vim/lsp/buf.lua @@ -1365,11 +1365,17 @@ function M.code_action(opts) params.context = context else local ns_push = lsp.diagnostic.get_namespace(client.id, false) - -- TODO(tris203): should we aggregate diagnostics from all the possible pull namespaces? - local ns_pull = lsp.diagnostic.get_namespace(client.id, true) local diagnostics = {} local lnum = api.nvim_win_get_cursor(0)[1] - 1 - vim.list_extend(diagnostics, vim.diagnostic.get(bufnr, { namespace = ns_pull, lnum = lnum })) + + client:_provider_foreach('textDocument/diagnostic', function(cap) + local ns_pull = lsp.diagnostic.get_namespace(client.id, cap.identifier) + vim.list_extend( + diagnostics, + vim.diagnostic.get(bufnr, { namespace = ns_pull, lnum = lnum }) + ) + end) + vim.list_extend(diagnostics, vim.diagnostic.get(bufnr, { namespace = ns_push, lnum = lnum })) params.context = vim.tbl_extend('force', context, { ---@diagnostic disable-next-line: no-unknown