mirror of
https://github.com/neovim/neovim.git
synced 2025-12-09 08:02:38 +00:00
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:
2
runtime/lua/vim/_meta/options.lua
generated
2
runtime/lua/vim/_meta/options.lua
generated
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -8831,7 +8831,7 @@ local options = {
|
||||
"%{% &showcmdloc == 'statusline' ? '%-10.S ' : '' %}",
|
||||
"%{% exists('b:keymap_name') ? '<'..b:keymap_name..'> ' : '' %}",
|
||||
"%{% &busy > 0 ? '◐ ' : '' %}",
|
||||
"%(%{luaeval('(package.loaded[''vim.diagnostic''] and vim.diagnostic.status()) or '''' ')} %)",
|
||||
"%{% luaeval('(package.loaded[''vim.diagnostic''] and vim.diagnostic.status() .. '' '') or '''' ') %}",
|
||||
"%{% &ruler ? ( &rulerformat == '' ? '%-14.(%l,%c%V%) %P' : &rulerformat ) : '' %}",
|
||||
}),
|
||||
doc = 'is very long',
|
||||
|
||||
@@ -4081,7 +4081,10 @@ describe('vim.diagnostic', function()
|
||||
return vim.diagnostic.status()
|
||||
end)
|
||||
|
||||
eq('E:1 W:2 I:3 H:4', result)
|
||||
eq(
|
||||
'%#DiagnosticSignError#E:1 %#DiagnosticSignWarn#W:2 %#DiagnosticSignInfo#I:3 %#DiagnosticSignHint#H:4%##',
|
||||
result
|
||||
)
|
||||
|
||||
exec_lua('vim.cmd.enew()')
|
||||
|
||||
@@ -4113,7 +4116,7 @@ describe('vim.diagnostic', function()
|
||||
return vim.diagnostic.status()
|
||||
end)
|
||||
|
||||
eq('⨯:1 ⚠︎:1', result)
|
||||
eq('%#DiagnosticSignError#⨯:1 %#DiagnosticSignWarn#⚠︎:1%##', result)
|
||||
end)
|
||||
end)
|
||||
|
||||
|
||||
@@ -850,7 +850,7 @@ describe('default statusline', function()
|
||||
"%{% &showcmdloc == 'statusline' ? '%-10.S ' : '' %}",
|
||||
"%{% exists('b:keymap_name') ? '<'..b:keymap_name..'> ' : '' %}",
|
||||
"%{% &busy > 0 ? '◐ ' : '' %}",
|
||||
"%(%{luaeval('(package.loaded[''vim.diagnostic''] and vim.diagnostic.status()) or '''' ')} %)",
|
||||
"%{% luaeval('(package.loaded[''vim.diagnostic''] and vim.diagnostic.status() .. '' '') or '''' ') %}",
|
||||
"%{% &ruler ? ( &rulerformat == '' ? '%-14.(%l,%c%V%) %P' : &rulerformat ) : '' %}",
|
||||
})
|
||||
|
||||
|
||||
Reference in New Issue
Block a user