[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
emacs-29 670daa8b626: Add recursion limit to treesit--children-covering-
From: |
Yuan Fu |
Subject: |
emacs-29 670daa8b626: Add recursion limit to treesit--children-covering-range-recurse |
Date: |
Wed, 7 Dec 2022 19:37:48 -0500 (EST) |
branch: emacs-29
commit 670daa8b6264f9cd813efb0d40ceec253fdd603e
Author: Yuan Fu <casouri@gmail.com>
Commit: Yuan Fu <casouri@gmail.com>
Add recursion limit to treesit--children-covering-range-recurse
* lisp/treesit.el (treesit--children-covering-range-recurse): Add
limit.
---
lisp/treesit.el | 15 +++++++++++----
1 file changed, 11 insertions(+), 4 deletions(-)
diff --git a/lisp/treesit.el b/lisp/treesit.el
index 5e87737659e..85154d0d1c7 100644
--- a/lisp/treesit.el
+++ b/lisp/treesit.el
@@ -833,21 +833,28 @@ The range is between START and END."
(nreverse result))
(list node)))
-(defun treesit--children-covering-range-recurse (node start end threshold)
+(defun treesit--children-covering-range-recurse
+ (node start end threshold &optional limit)
"Return a list of children of NODE covering a range.
+
Recursively go down the parse tree and collect children, until
all nodes in the returned list are smaller than THRESHOLD. The
-range is between START and END."
+range is between START and END.
+
+LIMIT is the recursion limit, which defaults to 100."
(let* ((child (treesit-node-first-child-for-pos node start))
+ (limit (or limit 100))
result)
- (while (and child (<= (treesit-node-start child) end))
+ ;; If LIMIT is exceeded, we are probably seeing the erroneously
+ ;; tall tree, in that case, just give up.
+ (while (and (> limit 0) child (<= (treesit-node-start child) end))
;; If child still too large, recurse down. Otherwise collect
;; child.
(if (> (- (treesit-node-end child)
(treesit-node-start child))
threshold)
(dolist (r (treesit--children-covering-range-recurse
- child start end threshold))
+ child start end threshold (1- limit)))
(push r result))
(push child result))
(setq child (treesit-node-next-sibling child)))
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- emacs-29 670daa8b626: Add recursion limit to treesit--children-covering-range-recurse,
Yuan Fu <=