aboutsummaryrefslogtreecommitdiff
path: root/runtime/lua/vim/lsp/diagnostic.lua
diff options
context:
space:
mode:
authorViktor Kojouharov <developer@sugr.org>2021-05-07 16:07:38 +0200
committerViktor <viktor.kojouharov@globus.ch>2021-06-06 09:59:46 +0200
commit36d05845f7def1b8416f92dd4fc350276ed64636 (patch)
treeeb4ddab199b04479848187755b776c34a4e0b2cd /runtime/lua/vim/lsp/diagnostic.lua
parentb3e3ab0567a1a3c2f97de943ef9d7b24c0008979 (diff)
downloadrneovim-36d05845f7def1b8416f92dd4fc350276ed64636.tar.gz
rneovim-36d05845f7def1b8416f92dd4fc350276ed64636.tar.bz2
rneovim-36d05845f7def1b8416f92dd4fc350276ed64636.zip
feat(lsp): extend diagnostic.set_loclist
add option to show workspace diagnostic instead of the current buffer's
Diffstat (limited to 'runtime/lua/vim/lsp/diagnostic.lua')
-rw-r--r--runtime/lua/vim/lsp/diagnostic.lua40
1 files changed, 26 insertions, 14 deletions
diff --git a/runtime/lua/vim/lsp/diagnostic.lua b/runtime/lua/vim/lsp/diagnostic.lua
index 66a7e39749..06f2babde4 100644
--- a/runtime/lua/vim/lsp/diagnostic.lua
+++ b/runtime/lua/vim/lsp/diagnostic.lua
@@ -1197,27 +1197,25 @@ end
--- - Exclusive severity to consider. Overrides {severity_limit}
--- - {severity_limit}: (DiagnosticSeverity)
--- - Limit severity of diagnostics found. E.g. "Warning" means { "Error", "Warning" } will be valid.
+--- - {workspace}: (boolean, default false)
+--- - Set the list with workspace diagnostics
function M.set_loclist(opts)
opts = opts or {}
local open_loclist = if_nil(opts.open_loclist, true)
local win_id = vim.api.nvim_get_current_win()
-
- local bufnr = vim.api.nvim_get_current_buf()
- local buffer_diags = M.get(bufnr, opts.client_id)
-
- if opts.severity then
- buffer_diags = filter_to_severity_limit(opts.severity, buffer_diags)
- elseif opts.severity_limit then
- buffer_diags = filter_by_severity_limit(opts.severity_limit, buffer_diags)
- end
+ local current_bufnr = vim.api.nvim_get_current_buf()
+ local diags = opts.workspace and M.get_all() or {
+ [current_bufnr] = M.get(current_bufnr, opts.client_id)
+ }
local items = {}
- local insert_diag = function(diag)
+ local insert_diag = function(bufnr, diag)
local pos = diag.range.start
local row = pos.line
- local col = util.character_offset(bufnr, row, pos.character)
+
+ local col = util.character_offset(bufnr, row, pos.character) or 0
table.insert(items, {
bufnr = bufnr,
@@ -1228,11 +1226,25 @@ function M.set_loclist(opts)
})
end
- for _, diag in ipairs(buffer_diags) do
- insert_diag(diag)
+ for bufnr, diagnostic in pairs(diags) do
+ if opts.severity then
+ diagnostic = filter_to_severity_limit(opts.severity, diagnostic)
+ elseif opts.severity_limit then
+ diagnostic = filter_by_severity_limit(opts.severity_limit, diagnostic)
+ end
+
+ for _, diag in ipairs(diagnostic) do
+ insert_diag(bufnr, diag)
+ end
end
- table.sort(items, function(a, b) return a.lnum < b.lnum end)
+ table.sort(items, function(a, b)
+ if a.bufnr == b.bufnr then
+ return a.lnum < b.lnum
+ else
+ return a.bufnr < b.bufnr
+ end
+ end)
util.set_loclist(items, win_id)
if open_loclist then