mirror of
https://github.com/neovim/neovim.git
synced 2024-12-23 20:55:18 -07:00
feat(diagnostic): filter diagnostics by specific severities (#24736)
Allow users to filter diagnostics by specifying severities
This commit is contained in:
parent
9cb7e00b97
commit
e780177506
@ -66,7 +66,7 @@ The "severity" key in a diagnostic is one of the values defined in
|
||||
vim.diagnostic.severity.HINT
|
||||
|
||||
Functions that take a severity as an optional parameter (e.g.
|
||||
|vim.diagnostic.get()|) accept one of two forms:
|
||||
|vim.diagnostic.get()|) accept one of three forms:
|
||||
|
||||
1. A single |vim.diagnostic.severity| value: >lua
|
||||
|
||||
@ -75,8 +75,17 @@ Functions that take a severity as an optional parameter (e.g.
|
||||
2. A table with a "min" or "max" key (or both): >lua
|
||||
|
||||
vim.diagnostic.get(0, { severity = { min = vim.diagnostic.severity.WARN } })
|
||||
<
|
||||
This form allows users to specify a range of severities.
|
||||
|
||||
The latter form allows users to specify a range of severities.
|
||||
3. A list-like table: >lua
|
||||
|
||||
vim.diagnostic.get(0, { severity = {
|
||||
vim.diagnostic.severity.WARN,
|
||||
vim.diagnostic.severity.INFO,
|
||||
} })
|
||||
<
|
||||
This form allows users to filter for specific severities
|
||||
|
||||
==============================================================================
|
||||
HANDLERS *diagnostic-handlers*
|
||||
|
@ -145,6 +145,9 @@ The following new APIs and features were added.
|
||||
|
||||
• Improved messages for type errors in `vim.api.*` calls (including `opts` params)
|
||||
|
||||
• Functions that take a severity as an optional parameter (e.g.
|
||||
|vim.diagnostic.get()|) now also accept a list of severities |vim.diagnostic.severity|
|
||||
|
||||
==============================================================================
|
||||
CHANGED FEATURES *news-changed*
|
||||
|
||||
|
@ -94,6 +94,7 @@ local function filter_by_severity(severity, diagnostics)
|
||||
end, diagnostics)
|
||||
end
|
||||
|
||||
if severity.min or severity.max then
|
||||
local min_severity = to_severity(severity.min) or M.severity.HINT
|
||||
local max_severity = to_severity(severity.max) or M.severity.ERROR
|
||||
|
||||
@ -102,6 +103,16 @@ local function filter_by_severity(severity, diagnostics)
|
||||
end, diagnostics)
|
||||
end
|
||||
|
||||
local severities = {}
|
||||
for _, s in ipairs(severity) do
|
||||
severities[to_severity(s)] = true
|
||||
end
|
||||
|
||||
return vim.tbl_filter(function(t)
|
||||
return severities[t.severity]
|
||||
end, diagnostics)
|
||||
end
|
||||
|
||||
local function count_sources(bufnr)
|
||||
local seen = {}
|
||||
local count = 0
|
||||
|
@ -860,7 +860,7 @@ end)
|
||||
]])
|
||||
end)
|
||||
|
||||
it('returns only requested diagnostics when severity is supplied', function()
|
||||
it('returns only requested diagnostics when severity range is supplied', function()
|
||||
eq({2, 3, 2}, exec_lua [[
|
||||
vim.diagnostic.set(diagnostic_ns, diagnostic_bufnr, {
|
||||
make_error("Error 1", 1, 1, 1, 5),
|
||||
@ -882,6 +882,28 @@ end)
|
||||
]])
|
||||
end)
|
||||
|
||||
it('returns only requested diagnostics when severities are supplied', function()
|
||||
eq({1, 1, 2}, exec_lua [[
|
||||
vim.diagnostic.set(diagnostic_ns, diagnostic_bufnr, {
|
||||
make_error("Error 1", 1, 1, 1, 5),
|
||||
make_warning("Warning on Server 1", 1, 1, 2, 3),
|
||||
make_info("Ignored information", 1, 1, 2, 3),
|
||||
make_hint("Here's a hint", 1, 1, 2, 3),
|
||||
})
|
||||
|
||||
return {
|
||||
#vim.diagnostic.get(diagnostic_bufnr, { severity = {vim.diagnostic.severity.WARN} }),
|
||||
#vim.diagnostic.get(diagnostic_bufnr, { severity = {vim.diagnostic.severity.ERROR} }),
|
||||
#vim.diagnostic.get(diagnostic_bufnr, {
|
||||
severity = {
|
||||
vim.diagnostic.severity.INFO,
|
||||
vim.diagnostic.severity.WARN,
|
||||
}
|
||||
}),
|
||||
}
|
||||
]])
|
||||
end)
|
||||
|
||||
it('allows filtering by line', function()
|
||||
eq(1, exec_lua [[
|
||||
vim.diagnostic.set(diagnostic_ns, diagnostic_bufnr, {
|
||||
|
Loading…
Reference in New Issue
Block a user