aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPham Huy Hoang <hoangtun0810@gmail.com>2023-12-01 01:37:42 +0900
committerGitHub <noreply@github.com>2023-11-30 10:37:42 -0600
commitf5573fba3d460ddf479826b7404e568cc825ed57 (patch)
treec3404415458d5d9983bde4ff77e1fc3cd2e2ad83
parent758fdc287d7a3382c22f6e1270a87e7f7fd3fadf (diff)
downloadrneovim-f5573fba3d460ddf479826b7404e568cc825ed57.tar.gz
rneovim-f5573fba3d460ddf479826b7404e568cc825ed57.tar.bz2
rneovim-f5573fba3d460ddf479826b7404e568cc825ed57.zip
fix: Remove nested for_each_tree in TSTreeView (#26328)
Problem: `LanguageTree:for_each_tree` calls itself for child nodes, so when we calls `for_each_tree` inside `for_each_tree`, this quickly leads to exponential tree calls. Solution: Use `pairs(child:trees())` directly in this case, as we don't need the extra callback for each children, this is already handled from the outer `for_each_tree` call
-rw-r--r--runtime/lua/vim/treesitter/dev.lua6
1 files changed, 3 insertions, 3 deletions
diff --git a/runtime/lua/vim/treesitter/dev.lua b/runtime/lua/vim/treesitter/dev.lua
index aad639d85a..870761b7c7 100644
--- a/runtime/lua/vim/treesitter/dev.lua
+++ b/runtime/lua/vim/treesitter/dev.lua
@@ -87,17 +87,17 @@ function TSTreeView:new(bufnr, lang)
parser:for_each_tree(function(parent_tree, parent_ltree)
local parent = parent_tree:root()
for _, child in pairs(parent_ltree:children()) do
- child:for_each_tree(function(tree, ltree)
+ for _, tree in pairs(child:trees()) do
local r = tree:root()
local node = assert(parent:named_descendant_for_range(r:range()))
local id = node:id()
if not injections[id] or r:byte_length() > injections[id].root:byte_length() then
injections[id] = {
- lang = ltree:lang(),
+ lang = child:lang(),
root = r,
}
end
- end)
+ end
end
end)