aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLewis Russell <lewis6991@gmail.com>2023-09-12 11:38:31 +0100
committerLewis Russell <me@lewisr.dev>2023-09-12 12:21:42 +0100
commit7a76fb8547548304450b59624f9c75a554396504 (patch)
tree572d0101d49919ecaa53c5bd20a63b5741daee64
parent1c4a93b591828bc6970edad6282c004eb46f0b2d (diff)
downloadrneovim-7a76fb8547548304450b59624f9c75a554396504.tar.gz
rneovim-7a76fb8547548304450b59624f9c75a554396504.tar.bz2
rneovim-7a76fb8547548304450b59624f9c75a554396504.zip
fix(treesitter): remove more double recursion
Do not call `for_each_child` in functions that are already recursive.
-rw-r--r--runtime/lua/vim/treesitter/dev.lua20
-rw-r--r--runtime/lua/vim/treesitter/languagetree.lua43
2 files changed, 36 insertions, 27 deletions
diff --git a/runtime/lua/vim/treesitter/dev.lua b/runtime/lua/vim/treesitter/dev.lua
index 72b6e3db4a..67aa8670ba 100644
--- a/runtime/lua/vim/treesitter/dev.lua
+++ b/runtime/lua/vim/treesitter/dev.lua
@@ -101,17 +101,15 @@ function TSTreeView:new(bufnr, lang)
-- the root in the child tree to the {injections} table.
local root = parser:parse(true)[1]:root()
local injections = {} ---@type table<integer,table>
- parser:for_each_child(function(child, lang_)
- child:for_each_tree(function(tree)
- local r = tree:root()
- local node = root:named_descendant_for_range(r:range())
- if node then
- injections[node:id()] = {
- lang = lang_,
- root = r,
- }
- end
- end)
+ parser:for_each_tree(function(tree, ltree)
+ local r = tree:root()
+ local node = root:named_descendant_for_range(r:range())
+ if node then
+ injections[node:id()] = {
+ lang = ltree:lang(),
+ root = r,
+ }
+ end
end)
local nodes = traverse(root, 0, parser:lang(), injections, {})
diff --git a/runtime/lua/vim/treesitter/languagetree.lua b/runtime/lua/vim/treesitter/languagetree.lua
index 3c60da7643..6037b17b20 100644
--- a/runtime/lua/vim/treesitter/languagetree.lua
+++ b/runtime/lua/vim/treesitter/languagetree.lua
@@ -897,6 +897,20 @@ function LanguageTree:_edit(
end
return true
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
---@package
@@ -943,20 +957,17 @@ function LanguageTree:_on_bytes(
)
-- Edit trees together BEFORE emitting a bytes callback.
- ---@private
- self:for_each_child(function(child)
- child:_edit(
- start_byte,
- start_byte + old_byte,
- start_byte + new_byte,
- start_row,
- start_col,
- start_row + old_row,
- old_end_col,
- start_row + new_row,
- new_end_col
- )
- end, true)
+ self:_edit(
+ start_byte,
+ start_byte + old_byte,
+ start_byte + new_byte,
+ start_row,
+ start_col,
+ start_row + old_row,
+ old_end_col,
+ start_row + new_row,
+ new_end_col
+ )
self:_do_callback(
'bytes',
@@ -1017,9 +1028,9 @@ function LanguageTree:register_cbs(cbs, recursive)
end
if recursive then
- self:for_each_child(function(child)
+ for _, child in pairs(self._children) do
child:register_cbs(cbs, true)
- end)
+ end
end
end