feat(highlight): vim highlight fallback

This commit is contained in:
Barrett Ruth 2026-02-02 15:28:58 -05:00
parent 69943a09c4
commit 2c330732bb
4 changed files with 213 additions and 82 deletions

View file

@ -31,20 +31,25 @@ describe('highlight', function()
local function default_opts(overrides)
local opts = {
max_lines = 500,
hide_prefix = false,
treesitter = {
enabled = true,
max_lines = 500,
},
vim = {
enabled = false,
max_lines = 200,
},
highlights = {
treesitter = true,
background = false,
gutter = false,
vim = false,
},
}
if overrides then
for k, v in pairs(overrides) do
if k == 'highlights' then
for hk, hv in pairs(v) do
opts.highlights[hk] = hv
if type(v) == 'table' and type(opts[k]) == 'table' then
for sk, sv in pairs(v) do
opts[k][sk] = sv
end
else
opts[k] = v
@ -478,7 +483,7 @@ describe('highlight', function()
bufnr,
ns,
hunk,
default_opts({ highlights = { treesitter = false, background = true } })
default_opts({ treesitter = { enabled = false }, highlights = { background = true } })
)
local extmarks = get_extmarks(bufnr)
@ -511,7 +516,7 @@ describe('highlight', function()
bufnr,
ns,
hunk,
default_opts({ highlights = { treesitter = false, background = true } })
default_opts({ treesitter = { enabled = false }, highlights = { background = true } })
)
local extmarks = get_extmarks(bufnr)

View file

@ -48,6 +48,7 @@ describe('parser', function()
assert.are.equal(1, #hunks)
assert.are.equal('lua/test.lua', hunks[1].filename)
assert.are.equal('lua', hunks[1].ft)
assert.are.equal('lua', hunks[1].lang)
assert.are.equal(3, hunks[1].start_line)
assert.are.equal(3, #hunks[1].lines)
@ -156,6 +157,25 @@ describe('parser', function()
delete_buffer(bufnr)
end)
it('emits hunk with ft when no ts parser available', function()
local bufnr = create_buffer({
'M test.xyz_no_parser',
'@@ -1,1 +1,2 @@',
' some content',
'+more content',
})
vim.filetype.add({ extension = { xyz_no_parser = 'xyz_no_parser_ft' } })
local hunks = parser.parse_buffer(bufnr)
assert.are.equal(1, #hunks)
assert.are.equal('xyz_no_parser_ft', hunks[1].ft)
assert.is_nil(hunks[1].lang)
assert.are.equal(2, #hunks[1].lines)
delete_buffer(bufnr)
end)
it('stops hunk at next file header', function()
local bufnr = create_buffer({
'M test.lua',