From 69816f5e134f0e965352367b5928835794da1698 Mon Sep 17 00:00:00 2001 From: Thomas Vigouroux Date: Mon, 29 Jun 2020 23:02:30 +0200 Subject: [PATCH] treesitter: use single nodes in set_ranges fixup! treesitter: fix lint --- src/nvim/lua/treesitter.c | 43 ++++--------------------- test/functional/lua/treesitter_spec.lua | 8 ++--- 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)