mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
fix(diagnostic): support severity_sort
This commit is contained in:
parent
f87779a24d
commit
32c0631183
@ -216,18 +216,31 @@ config({opts}, {namespace}) *vim.diagnostic.config()*
|
|||||||
{opts} table Configuration table with the following
|
{opts} table Configuration table with the following
|
||||||
keys:
|
keys:
|
||||||
• underline: (default true) Use underline for
|
• underline: (default true) Use underline for
|
||||||
diagnostics
|
diagnostics. Options:
|
||||||
|
• severity: Only underline diagnostics
|
||||||
|
matching the given severity
|
||||||
|
|diagnostic-severity|
|
||||||
|
|
||||||
• virtual_text: (default true) Use virtual
|
• virtual_text: (default true) Use virtual
|
||||||
text for diagnostics
|
text for diagnostics. Options:
|
||||||
|
• severity: Only show virtual text for
|
||||||
|
diagnostics matching the given severity
|
||||||
|
|diagnostic-severity|
|
||||||
|
|
||||||
• signs: (default true) Use signs for
|
• signs: (default true) Use signs for
|
||||||
diagnostics
|
diagnostics. Options:
|
||||||
|
• severity: Only show signs for diagnostics
|
||||||
|
matching the given severity
|
||||||
|
|diagnostic-severity|
|
||||||
|
|
||||||
• update_in_insert: (default false) Update
|
• update_in_insert: (default false) Update
|
||||||
diagnostics in Insert mode (if false,
|
diagnostics in Insert mode (if false,
|
||||||
diagnostics are updated on InsertLeave)
|
diagnostics are updated on InsertLeave)
|
||||||
• severity_sort: (default false) Sort
|
• severity_sort: (default false) Sort
|
||||||
diagnostics by severity. This affects the
|
diagnostics by severity. This affects the
|
||||||
order in which signs and virtual text are
|
order in which signs and virtual text are
|
||||||
displayed
|
displayed. Options:
|
||||||
|
• reverse: (boolean) Reverse sort order
|
||||||
{namespace} number|nil Update the options for the given
|
{namespace} number|nil Update the options for the given
|
||||||
namespace. When omitted, update the global
|
namespace. When omitted, update the global
|
||||||
diagnostic options.
|
diagnostic options.
|
||||||
|
@ -440,13 +440,20 @@ end
|
|||||||
--- - `function`: Function with signature (namespace, bufnr) that returns any of the above.
|
--- - `function`: Function with signature (namespace, bufnr) that returns any of the above.
|
||||||
---
|
---
|
||||||
---@param opts table Configuration table with the following keys:
|
---@param opts table Configuration table with the following keys:
|
||||||
--- - underline: (default true) Use underline for diagnostics
|
--- - underline: (default true) Use underline for diagnostics. Options:
|
||||||
--- - virtual_text: (default true) Use virtual text for diagnostics
|
--- * severity: Only underline diagnostics matching the given severity
|
||||||
--- - signs: (default true) Use signs for diagnostics
|
--- |diagnostic-severity|
|
||||||
|
--- - virtual_text: (default true) Use virtual text for diagnostics. Options:
|
||||||
|
--- * severity: Only show virtual text for diagnostics matching the given
|
||||||
|
--- severity |diagnostic-severity|
|
||||||
|
--- - signs: (default true) Use signs for diagnostics. Options:
|
||||||
|
--- * severity: Only show signs for diagnostics matching the given severity
|
||||||
|
--- |diagnostic-severity|
|
||||||
--- - update_in_insert: (default false) Update diagnostics in Insert mode (if false,
|
--- - update_in_insert: (default false) Update diagnostics in Insert mode (if false,
|
||||||
--- diagnostics are updated on InsertLeave)
|
--- diagnostics are updated on InsertLeave)
|
||||||
--- - severity_sort: (default false) Sort diagnostics by severity. This affects the order in
|
--- - severity_sort: (default false) Sort diagnostics by severity. This affects the order in
|
||||||
--- which signs and virtual text are displayed
|
--- which signs and virtual text are displayed. Options:
|
||||||
|
--- * reverse: (boolean) Reverse sort order
|
||||||
---@param namespace number|nil Update the options for the given namespace. When omitted, update the
|
---@param namespace number|nil Update the options for the given namespace. When omitted, update the
|
||||||
--- global diagnostic options.
|
--- global diagnostic options.
|
||||||
function M.config(opts, namespace)
|
function M.config(opts, namespace)
|
||||||
@ -989,6 +996,14 @@ function M.show(namespace, bufnr, diagnostics, opts)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if vim.F.if_nil(opts.severity_sort, false) then
|
||||||
|
if type(opts.severity_sort) == "table" and opts.severity_sort.reverse then
|
||||||
|
table.sort(diagnostics, function(a, b) return a.severity > b.severity end)
|
||||||
|
else
|
||||||
|
table.sort(diagnostics, function(a, b) return a.severity < b.severity end)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
if opts.underline then
|
if opts.underline then
|
||||||
M._set_underline(namespace, bufnr, diagnostics, opts.underline)
|
M._set_underline(namespace, bufnr, diagnostics, opts.underline)
|
||||||
end
|
end
|
||||||
|
@ -195,10 +195,6 @@ function M.on_publish_diagnostics(_, result, ctx, config)
|
|||||||
local diagnostics = result.diagnostics
|
local diagnostics = result.diagnostics
|
||||||
|
|
||||||
if config then
|
if config then
|
||||||
if vim.F.if_nil(config.severity_sort, false) then
|
|
||||||
table.sort(diagnostics, function(a, b) return a.severity > b.severity end)
|
|
||||||
end
|
|
||||||
|
|
||||||
for _, opt in pairs(config) do
|
for _, opt in pairs(config) do
|
||||||
if type(opt) == 'table' then
|
if type(opt) == 'table' then
|
||||||
if not opt.severity and opt.severity_limit then
|
if not opt.severity and opt.severity_limit then
|
||||||
|
@ -35,7 +35,7 @@ describe('vim.diagnostic', function()
|
|||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
function make_information(msg, x1, y1, x2, y2)
|
function make_info(msg, x1, y1, x2, y2)
|
||||||
return {
|
return {
|
||||||
lnum = x1,
|
lnum = x1,
|
||||||
col = y1,
|
col = y1,
|
||||||
@ -456,7 +456,7 @@ describe('vim.diagnostic', function()
|
|||||||
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),
|
||||||
make_warning("Warning on Server 1", 1, 1, 2, 5),
|
make_warning("Warning on Server 1", 1, 1, 2, 5),
|
||||||
make_information("Ignored information", 1, 1, 2, 5),
|
make_info("Ignored information", 1, 1, 2, 5),
|
||||||
make_hint("Here's a hint", 1, 1, 2, 5),
|
make_hint("Here's a hint", 1, 1, 2, 5),
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -478,7 +478,7 @@ describe('vim.diagnostic', function()
|
|||||||
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),
|
||||||
make_warning("Warning on Server 1", 1, 1, 2, 5),
|
make_warning("Warning on Server 1", 1, 1, 2, 5),
|
||||||
make_information("Ignored information", 1, 1, 2, 5),
|
make_info("Ignored information", 1, 1, 2, 5),
|
||||||
make_error("Error On Other Line", 2, 1, 1, 5),
|
make_error("Error On Other Line", 2, 1, 1, 5),
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -538,6 +538,47 @@ describe('vim.diagnostic', function()
|
|||||||
eq(1, get_extmark_count_with_severity("WARN"))
|
eq(1, get_extmark_count_with_severity("WARN"))
|
||||||
eq(1, get_extmark_count_with_severity("HINT"))
|
eq(1, get_extmark_count_with_severity("HINT"))
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
it('allows sorting by severity', function()
|
||||||
|
local result = exec_lua([[
|
||||||
|
vim.diagnostic.config({
|
||||||
|
underline = true,
|
||||||
|
virtual_text = false,
|
||||||
|
severity_sort = false,
|
||||||
|
})
|
||||||
|
|
||||||
|
vim.diagnostic.set(diagnostic_ns, diagnostic_bufnr, {
|
||||||
|
make_warning('Warning', 4, 4, 4, 4),
|
||||||
|
make_error('Error', 4, 4, 4, 4),
|
||||||
|
make_info('Info', 4, 4, 4, 4),
|
||||||
|
})
|
||||||
|
|
||||||
|
local extmarks = vim.api.nvim_buf_get_extmarks(diagnostic_bufnr, diagnostic_ns, 0, -1, {details = true})
|
||||||
|
|
||||||
|
local warn_highlight = extmarks[1][4].hl_group
|
||||||
|
|
||||||
|
vim.diagnostic.config({
|
||||||
|
severity_sort = true,
|
||||||
|
})
|
||||||
|
|
||||||
|
extmarks = vim.api.nvim_buf_get_extmarks(diagnostic_bufnr, diagnostic_ns, 0, -1, {details = true})
|
||||||
|
|
||||||
|
local err_highlight = extmarks[1][4].hl_group
|
||||||
|
|
||||||
|
vim.diagnostic.config({
|
||||||
|
severity_sort = { reverse = true },
|
||||||
|
})
|
||||||
|
|
||||||
|
extmarks = vim.api.nvim_buf_get_extmarks(diagnostic_bufnr, diagnostic_ns, 0, -1, {details = true})
|
||||||
|
|
||||||
|
local info_highlight = extmarks[1][4].hl_group
|
||||||
|
|
||||||
|
return { warn_highlight, err_highlight, info_highlight }
|
||||||
|
]])
|
||||||
|
eq('DiagnosticUnderlineWarn', result[1])
|
||||||
|
eq('DiagnosticUnderlineError', result[2])
|
||||||
|
eq('DiagnosticUnderlineInfo', result[3])
|
||||||
|
end)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
describe('set()', function()
|
describe('set()', function()
|
||||||
|
Loading…
Reference in New Issue
Block a user