fix(highlight): handle nil Normal.bg in blending logic (#175)
Co-authored-by: Barrett Ruth <br.barrettruth@gmail.com>
This commit is contained in:
parent
595c35d910
commit
53dd5d6325
3 changed files with 98 additions and 3 deletions
20
.github/ISSUE_TEMPLATE/bug_report.yaml
vendored
20
.github/ISSUE_TEMPLATE/bug_report.yaml
vendored
|
|
@ -68,10 +68,26 @@ body:
|
||||||
load(vim.fn.system('curl -s https://raw.githubusercontent.com/folke/lazy.nvim/main/bootstrap.lua'))()
|
load(vim.fn.system('curl -s https://raw.githubusercontent.com/folke/lazy.nvim/main/bootstrap.lua'))()
|
||||||
require('lazy.nvim').setup({
|
require('lazy.nvim').setup({
|
||||||
spec = {
|
spec = {
|
||||||
'tpope/vim-fugitive',
|
{ 'barrettruth/midnight.nvim', lazy = false, config = function() vim.cmd.colorscheme('midnight') end },
|
||||||
|
{ 'tpope/vim-fugitive' },
|
||||||
|
{ 'NeogitOrg/neogit', dependencies = { 'nvim-lua/plenary.nvim' } },
|
||||||
|
{ 'lewis6991/gitsigns.nvim', config = true },
|
||||||
|
{ 'rhysd/committia.vim' },
|
||||||
|
{ 'nvim-telescope/telescope.nvim', dependencies = { 'nvim-lua/plenary.nvim' } },
|
||||||
{
|
{
|
||||||
'barrettruth/diffs.nvim',
|
'barrettruth/diffs.nvim',
|
||||||
opts = {},
|
init = function()
|
||||||
|
vim.g.diffs = {
|
||||||
|
debug = '/tmp/diffs.log',
|
||||||
|
integrations = {
|
||||||
|
fugitive = true,
|
||||||
|
neogit = true,
|
||||||
|
gitsigns = true,
|
||||||
|
committia = true,
|
||||||
|
telescope = true,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
end,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
|
||||||
|
|
@ -510,7 +510,6 @@ local function compute_highlight_groups()
|
||||||
if not normal.bg and not hl_retry_pending then
|
if not normal.bg and not hl_retry_pending then
|
||||||
hl_retry_pending = true
|
hl_retry_pending = true
|
||||||
vim.schedule(function()
|
vim.schedule(function()
|
||||||
hl_retry_pending = false
|
|
||||||
compute_highlight_groups()
|
compute_highlight_groups()
|
||||||
for bufnr, _ in pairs(attached_buffers) do
|
for bufnr, _ in pairs(attached_buffers) do
|
||||||
invalidate_cache(bufnr)
|
invalidate_cache(bufnr)
|
||||||
|
|
@ -1115,6 +1114,13 @@ M._test = {
|
||||||
process_pending_clear = process_pending_clear,
|
process_pending_clear = process_pending_clear,
|
||||||
ft_retry_pending = ft_retry_pending,
|
ft_retry_pending = ft_retry_pending,
|
||||||
compute_hunk_context = compute_hunk_context,
|
compute_hunk_context = compute_hunk_context,
|
||||||
|
compute_highlight_groups = compute_highlight_groups,
|
||||||
|
get_hl_retry_pending = function()
|
||||||
|
return hl_retry_pending
|
||||||
|
end,
|
||||||
|
set_hl_retry_pending = function(v)
|
||||||
|
hl_retry_pending = v
|
||||||
|
end,
|
||||||
}
|
}
|
||||||
|
|
||||||
return M
|
return M
|
||||||
|
|
|
||||||
|
|
@ -527,4 +527,77 @@ describe('diffs', function()
|
||||||
end)
|
end)
|
||||||
end)
|
end)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
describe('compute_highlight_groups', function()
|
||||||
|
local saved_get_hl, saved_set_hl, saved_schedule
|
||||||
|
local set_calls, schedule_cbs
|
||||||
|
|
||||||
|
before_each(function()
|
||||||
|
saved_get_hl = vim.api.nvim_get_hl
|
||||||
|
saved_set_hl = vim.api.nvim_set_hl
|
||||||
|
saved_schedule = vim.schedule
|
||||||
|
set_calls = {}
|
||||||
|
schedule_cbs = {}
|
||||||
|
vim.api.nvim_set_hl = function(_, group, opts)
|
||||||
|
set_calls[group] = opts
|
||||||
|
end
|
||||||
|
vim.schedule = function(cb)
|
||||||
|
table.insert(schedule_cbs, cb)
|
||||||
|
end
|
||||||
|
diffs._test.set_hl_retry_pending(false)
|
||||||
|
end)
|
||||||
|
|
||||||
|
after_each(function()
|
||||||
|
vim.api.nvim_get_hl = saved_get_hl
|
||||||
|
vim.api.nvim_set_hl = saved_set_hl
|
||||||
|
vim.schedule = saved_schedule
|
||||||
|
diffs._test.set_hl_retry_pending(false)
|
||||||
|
end)
|
||||||
|
|
||||||
|
it('sets DiffsClear.bg to a number when Normal.bg is nil', function()
|
||||||
|
vim.api.nvim_get_hl = function(ns, opts)
|
||||||
|
if opts.name == 'Normal' then
|
||||||
|
return { fg = 0xc0c0c0 }
|
||||||
|
end
|
||||||
|
return saved_get_hl(ns, opts)
|
||||||
|
end
|
||||||
|
diffs._test.compute_highlight_groups()
|
||||||
|
assert.is_number(set_calls.DiffsClear.bg)
|
||||||
|
assert.is_table(set_calls.DiffsAdd)
|
||||||
|
assert.is_table(set_calls.DiffsDelete)
|
||||||
|
end)
|
||||||
|
|
||||||
|
it('retries once then stops when Normal.bg stays nil', function()
|
||||||
|
vim.api.nvim_get_hl = function(ns, opts)
|
||||||
|
if opts.name == 'Normal' then
|
||||||
|
return { fg = 0xc0c0c0 }
|
||||||
|
end
|
||||||
|
return saved_get_hl(ns, opts)
|
||||||
|
end
|
||||||
|
diffs._test.compute_highlight_groups()
|
||||||
|
assert.are.equal(1, #schedule_cbs)
|
||||||
|
schedule_cbs[1]()
|
||||||
|
assert.are.equal(1, #schedule_cbs)
|
||||||
|
assert.is_true(diffs._test.get_hl_retry_pending())
|
||||||
|
end)
|
||||||
|
|
||||||
|
it('picks up bg on retry when colorscheme loads late', function()
|
||||||
|
local call_count = 0
|
||||||
|
vim.api.nvim_get_hl = function(ns, opts)
|
||||||
|
if opts.name == 'Normal' then
|
||||||
|
call_count = call_count + 1
|
||||||
|
if call_count <= 1 then
|
||||||
|
return { fg = 0xc0c0c0 }
|
||||||
|
end
|
||||||
|
return { fg = 0xc0c0c0, bg = 0x1e1e2e }
|
||||||
|
end
|
||||||
|
return saved_get_hl(ns, opts)
|
||||||
|
end
|
||||||
|
diffs._test.compute_highlight_groups()
|
||||||
|
assert.are.equal(1, #schedule_cbs)
|
||||||
|
schedule_cbs[1]()
|
||||||
|
assert.is_number(set_calls.DiffsClear.bg)
|
||||||
|
assert.are.equal(1, #schedule_cbs)
|
||||||
|
end)
|
||||||
|
end)
|
||||||
end)
|
end)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue