feat(diagnostic): highlights in diagnostic.status() #36685

Applies the appropriate `DiagnosticSign*` highlight to each group,
resetting the highlights at the end of the expression.
This commit is contained in:
Riley Bruins
2025-11-25 10:14:46 -08:00
committed by GitHub
parent 8d8f17c924
commit 4107442103
5 changed files with 20 additions and 6 deletions

View File

@@ -6999,7 +6999,7 @@ vim.wo.stc = vim.wo.statuscolumn
---
---
--- @type string
vim.o.statusline = "%<%f %h%w%m%r %=%{% &showcmdloc == 'statusline' ? '%-10.S ' : '' %}%{% exists('b:keymap_name') ? '<'..b:keymap_name..'> ' : '' %}%{% &busy > 0 ? '◐ ' : '' %}%(%{luaeval('(package.loaded[''vim.diagnostic''] and vim.diagnostic.status()) or '''' ')} %)%{% &ruler ? ( &rulerformat == '' ? '%-14.(%l,%c%V%) %P' : &rulerformat ) : '' %}"
vim.o.statusline = "%<%f %h%w%m%r %=%{% &showcmdloc == 'statusline' ? '%-10.S ' : '' %}%{% exists('b:keymap_name') ? '<'..b:keymap_name..'> ' : '' %}%{% &busy > 0 ? '◐ ' : '' %}%{% luaeval('(package.loaded[''vim.diagnostic''] and vim.diagnostic.status() .. '' '') or '''' ') %}%{% &ruler ? ( &rulerformat == '' ? '%-14.(%l,%c%V%) %P' : &rulerformat ) : '' %}"
vim.o.stl = vim.o.statusline
vim.wo.statusline = vim.o.statusline
vim.wo.stl = vim.wo.statusline

View File

@@ -2876,6 +2876,13 @@ function M.fromqflist(list)
return diagnostics
end
local hl_map = {
[M.severity.ERROR] = 'DiagnosticSignError',
[M.severity.WARN] = 'DiagnosticSignWarn',
[M.severity.INFO] = 'DiagnosticSignInfo',
[M.severity.HINT] = 'DiagnosticSignHint',
}
--- Returns formatted string with diagnostics for the current buffer.
--- The severities with 0 diagnostics are left out.
--- Example `E:2 W:3 I:4 H:5`
@@ -2899,10 +2906,14 @@ function M.status(bufnr)
local result_str = vim
.iter(pairs(counts))
:map(function(severity, count)
return ('%s:%s'):format(signs[severity], count)
return ('%%#%s#%s:%s'):format(hl_map[severity], signs[severity], count)
end)
:join(' ')
if result_str:len() > 0 then
result_str = result_str .. '%##'
end
return result_str
end