aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/nvim/lua/treesitter.c43
-rw-r--r--test/functional/lua/treesitter_spec.lua8
2 files changed, 11 insertions, 40 deletions
diff --git a/src/nvim/lua/treesitter.c b/src/nvim/lua/treesitter.c
index 913be5afe8..ddf54720a7 100644
--- a/src/nvim/lua/treesitter.c
+++ b/src/nvim/lua/treesitter.c
@@ -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
diff --git a/test/functional/lua/treesitter_spec.lua b/test/functional/lua/treesitter_spec.lua
index 16a7f365a8..ab0224a911 100644
--- a/test/functional/lua/treesitter_spec.lua
+++ b/test/functional/lua/treesitter_spec.lua
@@ -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)