fix(treesitter): remove more double recursion

Do not call `for_each_child` in functions that are already recursive.
This commit is contained in:
Lewis Russell 2023-09-12 11:38:31 +01:00 committed by Lewis Russell
parent 1c4a93b591
commit 7a76fb8547
2 changed files with 36 additions and 27 deletions

View File

@ -101,17 +101,15 @@ function TSTreeView:new(bufnr, lang)
-- the root in the child tree to the {injections} table. -- the root in the child tree to the {injections} table.
local root = parser:parse(true)[1]:root() local root = parser:parse(true)[1]:root()
local injections = {} ---@type table<integer,table> local injections = {} ---@type table<integer,table>
parser:for_each_child(function(child, lang_) parser:for_each_tree(function(tree, ltree)
child:for_each_tree(function(tree) local r = tree:root()
local r = tree:root() local node = root:named_descendant_for_range(r:range())
local node = root:named_descendant_for_range(r:range()) if node then
if node then injections[node:id()] = {
injections[node:id()] = { lang = ltree:lang(),
lang = lang_, root = r,
root = r, }
} end
end
end)
end) end)
local nodes = traverse(root, 0, parser:lang(), injections, {}) local nodes = traverse(root, 0, parser:lang(), injections, {})

View File

@ -897,6 +897,20 @@ function LanguageTree:_edit(
end end
return true return true
end) end)
for _, child in pairs(self._children) do
child:_edit(
start_byte,
end_byte_old,
end_byte_new,
start_row,
start_col,
end_row_old,
end_col_old,
end_row_new,
end_col_new
)
end
end end
---@package ---@package
@ -943,20 +957,17 @@ function LanguageTree:_on_bytes(
) )
-- Edit trees together BEFORE emitting a bytes callback. -- Edit trees together BEFORE emitting a bytes callback.
---@private self:_edit(
self:for_each_child(function(child) start_byte,
child:_edit( start_byte + old_byte,
start_byte, start_byte + new_byte,
start_byte + old_byte, start_row,
start_byte + new_byte, start_col,
start_row, start_row + old_row,
start_col, old_end_col,
start_row + old_row, start_row + new_row,
old_end_col, new_end_col
start_row + new_row, )
new_end_col
)
end, true)
self:_do_callback( self:_do_callback(
'bytes', 'bytes',
@ -1017,9 +1028,9 @@ function LanguageTree:register_cbs(cbs, recursive)
end end
if recursive then if recursive then
self:for_each_child(function(child) for _, child in pairs(self._children) do
child:register_cbs(cbs, true) child:register_cbs(cbs, true)
end) end
end end
end end