feat(diagnostics): add padding when using different background colors (#594)
* feat(diagnostics): add padding when using different background colors When each "sub-section" of the diagnostics components have a different background the rendering is off when multiple more than one of them is shown. * chore: fix typo and spelling
This commit is contained in:
parent
a1304ea8b6
commit
91142983d0
|
@ -104,13 +104,17 @@ function M:update_status()
|
||||||
|
|
||||||
-- format the counts with symbols and highlights
|
-- format the counts with symbols and highlights
|
||||||
if self.options.colored then
|
if self.options.colored then
|
||||||
local colors = {}
|
local colors, bgs = {}, {}
|
||||||
for name, hl in pairs(self.highlight_groups) do
|
for name, hl in pairs(self.highlight_groups) do
|
||||||
colors[name] = modules.highlight.component_format_highlight(hl)
|
colors[name] = modules.highlight.component_format_highlight(hl)
|
||||||
|
bgs[name] = modules.utils.extract_highlight_colors(colors[name]:match('%%#(.-)#'), 'bg')
|
||||||
end
|
end
|
||||||
|
local previous_section, padding
|
||||||
for _, section in ipairs(self.options.sections) do
|
for _, section in ipairs(self.options.sections) do
|
||||||
if diagnostics_count[section] ~= nil and (always_visible or diagnostics_count[section] > 0) then
|
if diagnostics_count[section] ~= nil and (always_visible or diagnostics_count[section] > 0) then
|
||||||
table.insert(result, colors[section] .. self.symbols[section] .. diagnostics_count[section])
|
padding = previous_section and (bgs[previous_section] ~= bgs[section]) and ' ' or ''
|
||||||
|
previous_section = section
|
||||||
|
table.insert(result, colors[section] .. padding .. self.symbols[section] .. diagnostics_count[section])
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
|
|
|
@ -752,4 +752,103 @@ describe('Lualine', function()
|
||||||
end)
|
end)
|
||||||
end)
|
end)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
describe('diagnostics', function()
|
||||||
|
local diagnostics_conf = vim.deepcopy(config)
|
||||||
|
diagnostics_conf.sections = {
|
||||||
|
lualine_a = { {
|
||||||
|
'diagnostics',
|
||||||
|
symbols = { error = 'E:', warn = 'W:', info = 'I:', hint = 'H:' },
|
||||||
|
diagnostics_color = {
|
||||||
|
error = { bg = "#a89984", fg = "#ff0000" },
|
||||||
|
warn = { bg = "#a89984", fg = "#ffa500" },
|
||||||
|
info = { bg = "#a89984", fg = "#add8e6" },
|
||||||
|
hint = { bg = "#a89984", fg = "#d3d3d3" },
|
||||||
|
},
|
||||||
|
sources = { function() return {} end },
|
||||||
|
} },
|
||||||
|
lualine_b = {},
|
||||||
|
lualine_c = {},
|
||||||
|
lualine_x = {},
|
||||||
|
lualine_y = {},
|
||||||
|
lualine_z = {},
|
||||||
|
}
|
||||||
|
|
||||||
|
it('does not show without diagnostics', function()
|
||||||
|
local conf = vim.deepcopy(diagnostics_conf)
|
||||||
|
require('lualine').setup(conf)
|
||||||
|
statusline:expect([===[
|
||||||
|
highlights = {
|
||||||
|
1: lualine_c_normal = { bg = "#3c3836", fg = "#a89984" }
|
||||||
|
}
|
||||||
|
|{1: }|
|
||||||
|
]===])
|
||||||
|
end)
|
||||||
|
|
||||||
|
it('shows only positive diagnostics', function()
|
||||||
|
local conf = vim.deepcopy(diagnostics_conf)
|
||||||
|
conf.sections.lualine_a[1].sources[1] = function() return { error = 0, warn = 0, info = 1, hint = 0 } end
|
||||||
|
require('lualine').setup(conf)
|
||||||
|
statusline:expect([===[
|
||||||
|
highlights = {
|
||||||
|
1: lualine_a_diagnostics_info = { bg = "#a89984", fg = "#add8e6" }
|
||||||
|
2: lualine_transitional_lualine_a_diagnostics_info_to_lualine_c_normal = { bg = "#3c3836", fg = "#a89984" }
|
||||||
|
3: lualine_c_normal = { bg = "#3c3836", fg = "#a89984" }
|
||||||
|
}
|
||||||
|
|{1: I:1 }
|
||||||
|
{2:}
|
||||||
|
{3: }|
|
||||||
|
]===])
|
||||||
|
end)
|
||||||
|
|
||||||
|
it('shows all diagnostics with same background', function()
|
||||||
|
local conf = vim.deepcopy(diagnostics_conf)
|
||||||
|
conf.sections.lualine_a[1].sources[1] = function() return { error = 1, warn = 2, info = 3, hint = 4 } end
|
||||||
|
require('lualine').setup(conf)
|
||||||
|
statusline:expect([===[
|
||||||
|
highlights = {
|
||||||
|
1: lualine_a_diagnostics_error = { bg = "#a89984", fg = "#ff0000" }
|
||||||
|
2: lualine_a_diagnostics_warn = { bg = "#a89984", fg = "#ffa500" }
|
||||||
|
3: lualine_a_diagnostics_info = { bg = "#a89984", fg = "#add8e6" }
|
||||||
|
4: lualine_a_diagnostics_hint = { bg = "#a89984", fg = "#d3d3d3" }
|
||||||
|
5: lualine_transitional_lualine_a_diagnostics_hint_to_lualine_c_normal = { bg = "#3c3836", fg = "#a89984" }
|
||||||
|
6: lualine_c_normal = { bg = "#3c3836", fg = "#a89984" }
|
||||||
|
}
|
||||||
|
|{1: E:1 }
|
||||||
|
{2:W:2 }
|
||||||
|
{3:I:3 }
|
||||||
|
{4:H:4 }
|
||||||
|
{5:}
|
||||||
|
{6: }|
|
||||||
|
]===])
|
||||||
|
end)
|
||||||
|
|
||||||
|
it('shows all diagnostics with padding when background changes', function()
|
||||||
|
local conf = vim.deepcopy(diagnostics_conf)
|
||||||
|
conf.sections.lualine_a[1].sources[1] = function() return { error = 1, warn = 2, info = 3, hint = 4 } end
|
||||||
|
conf.sections.lualine_a[1].diagnostics_color = {
|
||||||
|
error = { bg = "#ff0000", fg = "#a89984" },
|
||||||
|
warn = { bg = "#ffa500", fg = "#a89984" },
|
||||||
|
info = { bg = "#add8e6", fg = "#a89984" },
|
||||||
|
hint = { bg = "#add8e6", fg = "#a89984" },
|
||||||
|
}
|
||||||
|
require('lualine').setup(conf)
|
||||||
|
statusline:expect([===[
|
||||||
|
highlights = {
|
||||||
|
1: lualine_a_diagnostics_error = { bg = "#ff0000", fg = "#a89984" }
|
||||||
|
2: lualine_a_diagnostics_warn = { bg = "#ffa500", fg = "#a89984" }
|
||||||
|
3: lualine_a_diagnostics_info = { bg = "#add8e6", fg = "#a89984" }
|
||||||
|
4: lualine_a_diagnostics_hint = { bg = "#add8e6", fg = "#a89984" }
|
||||||
|
5: lualine_transitional_lualine_a_diagnostics_hint_to_lualine_c_normal = { bg = "#3c3836", fg = "#add8e6" }
|
||||||
|
6: lualine_c_normal = { bg = "#3c3836", fg = "#a89984" }
|
||||||
|
}
|
||||||
|
|{1: E:1 }
|
||||||
|
{2: W:2 }
|
||||||
|
{3: I:3 }
|
||||||
|
{4:H:4 }
|
||||||
|
{5:}
|
||||||
|
{6: }|
|
||||||
|
]===])
|
||||||
|
end)
|
||||||
|
end)
|
||||||
end)
|
end)
|
||||||
|
|
|
@ -5,23 +5,23 @@
|
||||||
---
|
---
|
||||||
--- ###Uses:
|
--- ###Uses:
|
||||||
---
|
---
|
||||||
--- Create a new instence with status width 120 & for active statusline
|
--- Create a new instance with status width 120 & for active statusline
|
||||||
--- like following.
|
--- like following.
|
||||||
---
|
---
|
||||||
--- ``lua
|
--- ``lua
|
||||||
--- local statusline = require('tests.statusline').new(120, 'active')
|
--- local statusline = require('tests.statusline').new(120, 'active')
|
||||||
--- ```
|
--- ```
|
||||||
---
|
---
|
||||||
--- To create a new instence with status width 80 & for inactive statusline use following.
|
--- To create a new instance with status width 80 & for inactive statusline use following.
|
||||||
---
|
---
|
||||||
--- ``lua
|
--- ``lua
|
||||||
--- local statusline = require('tests.statusline').new(120, 'inactive')
|
--- local statusline = require('tests.statusline').new(120, 'inactive')
|
||||||
--- ```
|
--- ```
|
||||||
---
|
---
|
||||||
--- Now setup the state you want to test.
|
--- Now setup the state you want to test.
|
||||||
--- To test you'll call `expect` pmethod on statusline for example.
|
--- To test you'll call `expect` method on statusline for example.
|
||||||
---
|
---
|
||||||
--- To create a new instence with status width 80 & tabline
|
--- To create a new instance with status width 80 & tabline
|
||||||
---
|
---
|
||||||
--- ``lua
|
--- ``lua
|
||||||
--- local statusline = require('tests.statusline').new(120, 'tabline')
|
--- local statusline = require('tests.statusline').new(120, 'tabline')
|
||||||
|
|
Loading…
Reference in New Issue