treesitter: add node:field() to get field children

This commit is contained in:
Thomas Vigouroux
2020-08-14 16:01:10 +02:00
parent e123fd0a5d
commit 18217b987f
3 changed files with 60 additions and 0 deletions

View File

@@ -151,6 +151,34 @@ void ui_refresh(void)
}, res)
end)
it('allows to get a child by field', function()
if not check_parser() then return end
insert(test_text);
local res = exec_lua([[
parser = vim.treesitter.get_parser(0, "c")
func_node = parser:parse():root():child(0)
local res = {}
for _, node in ipairs(func_node:field("type")) do
table.insert(res, {node:type(), node:range()})
end
return res
]])
eq({{ "primitive_type", 0, 0, 0, 4 }}, res)
local res_fail = exec_lua([[
parser = vim.treesitter.get_parser(0, "c")
return #func_node:field("foo") == 0
]])
assert(res_fail)
end)
local query = [[
((call_expression function: (identifier) @minfunc (argument_list (identifier) @min_id)) (eq? @minfunc "MIN"))
"for" @keyword