neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

commit 6b5f44817e93c2985f3ea32122f1dc0047054018
parent 3849cc9c18f877751c2a72fb82887ab7f88e0ffa
Author: L Lllvvuu <git@llllvvuu.dev>
Date:   Mon, 11 Sep 2023 23:15:24 -0700

fix(languagetree): remove double recursion in LanguageTree:parse

`LanguageTree:parse` is recursive, and calls
`LanguageTree:for_each_child`, which is also recursive.

That means that, starting from the third level (child of child of root),
nodes will be parsed twice.

Which then means that if the tree is N layers deep, there will be ~2^N
parses even if the branching factor is 1.

Now, why was the tree deepening with each character inserted? And why
did this only regress in #24647? These are mysteries for another time.

Fixes: #25104

Diffstat:
Mruntime/lua/vim/treesitter/languagetree.lua | 4++--
1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/runtime/lua/vim/treesitter/languagetree.lua b/runtime/lua/vim/treesitter/languagetree.lua @@ -444,9 +444,9 @@ function LanguageTree:parse(range) range = range, }) - self:for_each_child(function(child) + for _, child in pairs(self._children) do child:parse(range) - end) + end return self._trees end