diff options
author | Viktor Kojouharov <developer@sugr.org> | 2021-05-07 16:07:38 +0200 |
---|---|---|
committer | Viktor <viktor.kojouharov@globus.ch> | 2021-06-06 09:59:46 +0200 |
commit | 36d05845f7def1b8416f92dd4fc350276ed64636 (patch) | |
tree | eb4ddab199b04479848187755b776c34a4e0b2cd /runtime/lua/vim/lsp/diagnostic.lua | |
parent | b3e3ab0567a1a3c2f97de943ef9d7b24c0008979 (diff) | |
download | rneovim-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.lua | 40 |
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 |