treesitter: use single nodes in set_ranges

fixup! treesitter: fix lint
This commit is contained in:
Thomas Vigouroux 2020-06-29 23:02:30 +02:00
parent 66af35fc85
commit 69816f5e13
2 changed files with 11 additions and 40 deletions

View File

@ -411,50 +411,21 @@ static int parser_set_ranges(lua_State *L)
for (size_t index = 0; index < tbl_len; index++) {
lua_rawgeti(L, 2, index + 1); // [ parser, ranges, range ]
if (!lua_istable(L, -1)) {
TSNode node;
if (!node_check(L, -1, &node)) {
xfree(ranges);
return luaL_error(
L,
"argument for parser:set_included_ranges() should be a table of tables.");
}
if (lua_objlen(L, -1) != 2) {
xfree(ranges);
return luaL_error(
L,
"argument for parser:set_included_ranges() should be a table of ranges of 2 elements.");
}
lua_rawgeti(L, -1, 1); // [ parser, ranges, range, start_node ]
TSNode start_node;
if (!node_check(L, -1, &start_node)) {
xfree(ranges);
lua_pushstring(
L,
"ranges should be tables of nodes.");
return lua_error(L);
}
lua_pop(L, 1); // [ parser, ranges, range ]
lua_rawgeti(L, -1, 1); // [ parser, ranges, range, stop_node ]
TSNode stop_node;
if (!node_check(L, -1, &stop_node)) {
xfree(ranges);
lua_pushstring(
L,
"ranges should be tables of nodes.");
return lua_error(L);
}
lua_pop(L, 1); // [ parser, ranges, range ]
lua_pop(L, 1); // [ parser, ranges ]
ranges[index] = (TSRange) {
.start_point = ts_node_start_point(start_node),
.end_point = ts_node_end_point(stop_node),
.start_byte = ts_node_start_byte(start_node),
.end_byte = ts_node_end_byte(stop_node)
.start_point = ts_node_start_point(node),
.end_point = ts_node_end_point(node),
.start_byte = ts_node_start_byte(node),
.end_byte = ts_node_end_byte(node)
};
lua_pop(L, 1); // [ parser, ranges ]
}
// This memcpies ranges, thus we can free it afterwards

View File

@ -418,14 +418,14 @@ static int nlua_schedule(lua_State *const lstate)
-- The following sets the included ranges for the current parser
-- As stated here, this only includes the function (thus the whole buffer, without the last line)
local res = exec_lua([[
local res2 = exec_lua([[
local root = parser:parse():root()
parser:set_included_ranges({{root:child(0), root:child(0)}})
parser:set_included_ranges({root:child(0)})
parser.valid = false
return { parser:parse():root():range() }
]])
eq({0, 0, 18, 1}, res)
eq({0, 0, 18, 1}, res2)
end)
it("allows to set complex ranges", function()
if not check_parser() then return end
@ -439,7 +439,7 @@ static int nlua_schedule(lua_State *const lstate)
local nodes = {}
for _, node in query:iter_captures(parser:parse():root(), 0, 0, 19) do
table.insert(nodes, { node, node })
table.insert(nodes, node)
end
parser:set_included_ranges(nodes)