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
|
vim.diagnostic.severity.HINT
|
||||||
|
|
||||||
Functions that take a severity as an optional parameter (e.g.
|
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
|
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
|
2. A table with a "min" or "max" key (or both): >lua
|
||||||
|
|
||||||
vim.diagnostic.get(0, { severity = { min = vim.diagnostic.severity.WARN } })
|
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*
|
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)
|
• 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*
|
CHANGED FEATURES *news-changed*
|
||||||
|
|
||||||
|
@ -94,11 +94,22 @@ local function filter_by_severity(severity, diagnostics)
|
|||||||
end, diagnostics)
|
end, diagnostics)
|
||||||
end
|
end
|
||||||
|
|
||||||
local min_severity = to_severity(severity.min) or M.severity.HINT
|
if severity.min or severity.max then
|
||||||
local max_severity = to_severity(severity.max) or M.severity.ERROR
|
local min_severity = to_severity(severity.min) or M.severity.HINT
|
||||||
|
local max_severity = to_severity(severity.max) or M.severity.ERROR
|
||||||
|
|
||||||
|
return vim.tbl_filter(function(t)
|
||||||
|
return t.severity <= min_severity and t.severity >= max_severity
|
||||||
|
end, diagnostics)
|
||||||
|
end
|
||||||
|
|
||||||
|
local severities = {}
|
||||||
|
for _, s in ipairs(severity) do
|
||||||
|
severities[to_severity(s)] = true
|
||||||
|
end
|
||||||
|
|
||||||
return vim.tbl_filter(function(t)
|
return vim.tbl_filter(function(t)
|
||||||
return t.severity <= min_severity and t.severity >= max_severity
|
return severities[t.severity]
|
||||||
end, diagnostics)
|
end, diagnostics)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -860,7 +860,7 @@ end)
|
|||||||
]])
|
]])
|
||||||
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 [[
|
eq({2, 3, 2}, exec_lua [[
|
||||||
vim.diagnostic.set(diagnostic_ns, diagnostic_bufnr, {
|
vim.diagnostic.set(diagnostic_ns, diagnostic_bufnr, {
|
||||||
make_error("Error 1", 1, 1, 1, 5),
|
make_error("Error 1", 1, 1, 1, 5),
|
||||||
@ -882,6 +882,28 @@ end)
|
|||||||
]])
|
]])
|
||||||
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()
|
it('allows filtering by line', function()
|
||||||
eq(1, exec_lua [[
|
eq(1, exec_lua [[
|
||||||
vim.diagnostic.set(diagnostic_ns, diagnostic_bufnr, {
|
vim.diagnostic.set(diagnostic_ns, diagnostic_bufnr, {
|
||||||
|
Loading…
Reference in New Issue
Block a user