Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 4 additions & 6 deletions lua/diffview/hl.lua
Original file line number Diff line number Diff line change
Expand Up @@ -558,12 +558,10 @@ function M.update_diff_hl()
end

function M.setup()
-- Ensure diff highlights are defined by loading the diff syntax if needed.
-- Some colorschemes don't set diffAdded/diffRemoved/diffChanged until the
-- diff filetype is encountered.
if vim.fn.hlexists("diffAdded") == 0 then
vim.cmd("runtime! syntax/diff.vim")
end
-- Provide standard diff fallbacks without loading buffer-local syntax.
M.hi_link("diffAdded", "Added", { default = true })
M.hi_link("diffRemoved", "Removed", { default = true })
M.hi_link("diffChanged", "Changed", { default = true })

for name, v in pairs(M.get_hl_groups()) do
v = vim.tbl_extend("force", v, { default = true })
Expand Down
32 changes: 32 additions & 0 deletions lua/diffview/tests/functional/highlight_spec.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
local api = vim.api

describe("highlight setup", function()
it("defines diff fallbacks without loading diff syntax", function()
assert.equals(0, vim.fn.hlexists("diffAdded"))
api.nvim_buf_set_lines(0, 0, -1, false, {
"- unchanged markdown",
"+ unchanged markdown",
})

require("diffview.hl").setup()

assert.is_nil(vim.b.current_syntax)
assert.equals("", vim.fn.synIDattr(vim.fn.synID(1, 1, true), "name"))
assert.equals("", vim.fn.synIDattr(vim.fn.synID(2, 1, true), "name"))
assert.equals("Added", api.nvim_get_hl(0, { name = "diffAdded" }).link)
assert.equals("Removed", api.nvim_get_hl(0, { name = "diffRemoved" }).link)
assert.equals("Changed", api.nvim_get_hl(0, { name = "diffChanged" }).link)
end)
Comment thread
dlyongemallo marked this conversation as resolved.

it("preserves existing diff highlight groups", function()
api.nvim_set_hl(0, "diffAdded", { fg = 0x112233 })
api.nvim_set_hl(0, "diffRemoved", { fg = 0x223344 })
api.nvim_set_hl(0, "diffChanged", { fg = 0x334455 })

require("diffview.hl").setup()

assert.equals(0x112233, api.nvim_get_hl(0, { name = "diffAdded" }).fg)
assert.equals(0x223344, api.nvim_get_hl(0, { name = "diffRemoved" }).fg)
assert.equals(0x334455, api.nvim_get_hl(0, { name = "diffChanged" }).fg)
end)
Comment thread
dlyongemallo marked this conversation as resolved.
end)
Loading