feat(treesitter): allow to set highlight priority for queries

This commit is contained in:
Stephan Seitz 2021-07-17 14:41:17 +02:00
parent a8c3d50fad
commit 242608e669
2 changed files with 45 additions and 2 deletions

View File

@ -248,7 +248,7 @@ local function on_line_impl(self, buf, line)
end end
while line >= state.next_row do while line >= state.next_row do
local capture, node = state.iter() local capture, node, metadata = state.iter()
if capture == nil then break end if capture == nil then break end
@ -260,7 +260,7 @@ local function on_line_impl(self, buf, line)
{ end_line = end_row, end_col = end_col, { end_line = end_row, end_col = end_col,
hl_group = hl, hl_group = hl,
ephemeral = true, ephemeral = true,
priority = 100 -- Low but leaves room below priority = tonumber(metadata.priority) or 100 -- Low but leaves room below
}) })
end end
if start_row > line then if start_row > line then

View File

@ -570,4 +570,47 @@ describe('treesitter highlighting', function()
]]} ]]}
screen:expect{ unchanged=true } screen:expect{ unchanged=true }
end) end)
it("supports highlighting with priority", function()
if pending_c_parser(pending) then return end
insert([[
int x = INT_MAX;
#define READ_STRING(x, y) (char_u *)read_string((x), (size_t)(y))
#define foo void main() { \
return 42; \
}
]])
exec_lua [[
local parser = vim.treesitter.get_parser(0, "c")
test_hl = vim.treesitter.highlighter.new(parser, {queries = {c = hl_query..'\n((translation_unit) @Error (set! "priority" 101))\n'}})
]]
-- expect everything to have Error highlight
screen:expect{grid=[[
{12:int}{8: x = INT_MAX;} |
{8:#define READ_STRING(x, y) (char_u *)read_string((x), (size_t)(y))}|
{8:#define foo void main() { \} |
{8: return 42; \} |
{8: }} |
^ |
{1:~ }|
{1:~ }|
{1:~ }|
{1:~ }|
{1:~ }|
{1:~ }|
{1:~ }|
{1:~ }|
{1:~ }|
{1:~ }|
{1:~ }|
|
]], attr_ids={
[1] = {bold = true, foreground = Screen.colors.Blue1};
[8] = {foreground = Screen.colors.Grey100, background = Screen.colors.Red};
-- bold will not be overwritten at the moment
[12] = {background = Screen.colors.Red, bold = true, foreground = Screen.colors.Grey100};
}}
end)
end) end)