branch: elpa/treesit-fold
commit 4ef65016fdfdc6d45567ac62bf25814b07a8cad7
Author: JenChieh <[email protected]>
Commit: JenChieh <[email protected]>
fix: Respect same line folding from close all
---
treesit-fold.el | 16 ++++++++++++----
1 file changed, 12 insertions(+), 4 deletions(-)
diff --git a/treesit-fold.el b/treesit-fold.el
index 9349f07d6c..29f89e5f59 100644
--- a/treesit-fold.el
+++ b/treesit-fold.el
@@ -303,12 +303,16 @@ Return nil if there is no fold to be made."
((listp fold-func) (funcall (nth 0 fold-func) node (cons (nth 1
fold-func) (nth 2 fold-func))))
(t (user-error "Bad folding function for node")))))
+(defun treesit-fold--node-range-on-same-line (node)
+ "Return non-nil when NODE range is on the same line."
+ (let ((range (treesit-fold--get-fold-range node)))
+ (or (not range) ; Range not defined,
continue.
+ (treesit-fold--range-on-same-line range)))) ; On same line, continue.
+
(defun treesit-fold--non-foldable-node-p (node mode-ranges)
"Return non-nil if NODE is a non-foldable in MODE-RANGES."
(or (not (alist-get (tsc-node-type node) mode-ranges)) ; Not registered,
continue.
- (let ((range (treesit-fold--get-fold-range node)))
- (or (not range) ; Range not defined,
continue.
- (treesit-fold--range-on-same-line range))))) ; On same line,
continue.
+ (treesit-fold--node-range-on-same-line node))) ; On same line,
continue.
(defun treesit-fold--foldable-node-at-pos (&optional pos)
"Return the smallest foldable node at POS. If POS is nil, use `point'.
@@ -456,7 +460,11 @@ If the current node is not folded or not foldable, do
nothing."
(alist-get major-mode
treesit-fold-range-alist)
'vector))
(query (tsc-make-query tree-sitter-language patterns)))
- (setq nodes (tsc-query-captures query node #'ignore))
+ (setq nodes (tsc-query-captures query node #'ignore)
+ nodes (cl-remove-if (lambda (node)
+ ;; Removed if on same line
+ (treesit-fold--node-range-on-same-line
(cdr node)))
+ nodes))
(thread-last nodes
(mapcar #'cdr)
(mapc #'treesit-fold-close)))