aboutsummaryrefslogtreecommitdiff
path: root/runtime/lua/vim/diagnostic.lua
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/lua/vim/diagnostic.lua')
-rw-r--r--runtime/lua/vim/diagnostic.lua28
1 files changed, 26 insertions, 2 deletions
diff --git a/runtime/lua/vim/diagnostic.lua b/runtime/lua/vim/diagnostic.lua
index ad40723737..a447463dff 100644
--- a/runtime/lua/vim/diagnostic.lua
+++ b/runtime/lua/vim/diagnostic.lua
@@ -363,7 +363,6 @@ local function get_diagnostics(bufnr, opts, clamp)
local function add(b, d)
if not opts.lnum or d.lnum == opts.lnum then
- d = vim.deepcopy(d)
if clamp and api.nvim_buf_is_loaded(b) then
local line_count = buf_line_count[b] - 1
if
@@ -374,6 +373,7 @@ local function get_diagnostics(bufnr, opts, clamp)
or d.col < 0
or d.end_col < 0
then
+ d = vim.deepcopy(d)
d.lnum = math.max(math.min(d.lnum, line_count), 0)
d.end_lnum = math.max(math.min(d.end_lnum, line_count), 0)
d.col = math.max(d.col, 0)
@@ -756,7 +756,31 @@ function M.get(bufnr, opts)
opts = { opts, 't', true },
})
- return get_diagnostics(bufnr, opts, false)
+ return vim.deepcopy(get_diagnostics(bufnr, opts, false))
+end
+
+--- Get current diagnostics count.
+---
+---@param bufnr integer|nil Buffer number to get diagnostics from. Use 0 for
+--- current buffer or nil for all buffers.
+---@param opts table|nil A table with the following keys:
+--- - namespace: (number) Limit diagnostics to the given namespace.
+--- - lnum: (number) Limit diagnostics to the given line number.
+--- - severity: See |diagnostic-severity|.
+---@return table A table with actually present severity values as keys (see |diagnostic-severity|) and integer counts as values.
+function M.count(bufnr, opts)
+ vim.validate({
+ bufnr = { bufnr, 'n', true },
+ opts = { opts, 't', true },
+ })
+
+ local diagnostics = get_diagnostics(bufnr, opts, false)
+ local count = {}
+ for i = 1, #diagnostics do
+ local severity = diagnostics[i].severity
+ count[severity] = (count[severity] or 0) + 1
+ end
+ return count
end
--- Get the previous diagnostic closest to the cursor position.