feat(treesitter): upstream get_root_for_node() as a node method

Util from the nvim-treesitter project.
This commit is contained in:
Quentin Rasmont
2022-05-01 11:35:12 +02:00
committed by bfredl
parent a577fb778a
commit baba43681e
2 changed files with 38 additions and 0 deletions

View File

@@ -89,6 +89,8 @@ static struct luaL_Reg node_meta[] = {
{ "next_named_sibling", node_next_named_sibling },
{ "prev_named_sibling", node_prev_named_sibling },
{ "named_children", node_named_children },
{ "root", node_root },
{ NULL, NULL }
};
@@ -1088,6 +1090,27 @@ static int node_named_children(lua_State *L)
return 1;
}
static int node_root(lua_State *L)
{
TSNode parent;
TSNode result;
TSNode node;
if (!node_check(L, 1, &node)) {
return 0;
}
parent = node;
result = node;
while (!ts_node_is_null(parent)){
result = parent;
parent = ts_node_parent(result);
}
push_node(L, result, 1);
return 1;
}
/// assumes the match table being on top of the stack
static void set_match(lua_State *L, TSQueryMatch *match, int nodeidx)
{