[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[nongnu] elpa/treesit-fold a6a1500445 040/417: Add c and c++ support
From: |
ELPA Syncer |
Subject: |
[nongnu] elpa/treesit-fold a6a1500445 040/417: Add c and c++ support |
Date: |
Mon, 1 Jul 2024 10:02:08 -0400 (EDT) |
branch: elpa/treesit-fold
commit a6a1500445aba8a70f229b03daa36d3f4c203e13
Author: Jen-Chieh <jcs090218@gmail.com>
Commit: Jen-Chieh <jcs090218@gmail.com>
Add c and c++ support
---
tree-sitter-fold.el | 88 ++++++++++++++++++++++++++++-------------------------
1 file changed, 46 insertions(+), 42 deletions(-)
diff --git a/tree-sitter-fold.el b/tree-sitter-fold.el
index 6a2a48baa7..2b546694ba 100644
--- a/tree-sitter-fold.el
+++ b/tree-sitter-fold.el
@@ -53,22 +53,26 @@
:prefix "tree-sitter-fold-")
(defcustom tree-sitter-fold-foldable-node-alist
- '((python-mode . (function_definition class_definition)) ;
- (go-mode . (type_declaration function_declaration method_declaration))
- (ess-r-mode . (brace_list))
- (nix-mode . (attrset function)))
+ '((c-mode . (compound_statement))
+ (c++-mode . (compound_statement))
+ (ess-r-mode . (brace_list))
+ (go-mode . (type_declaration function_declaration method_declaration))
+ (nix-mode . (attrset function))
+ (python-mode . (function_definition class_definition)))
"An alist of
(mode . (list of tree-sitter-nodes considered foldable in this mode))."
:type '(alist :key-type symbol :value-type (repeat symbol))
:group 'tree-sitter-fold)
(defcustom tree-sitter-fold-range-alist
- '((ess-r-mode . ((brace_list . tree-sitter-fold-range-r)))
- (go-mode . ((type_declaration . tree-sitter-fold-range-go-type-declaration)
- (function_declaration . tree-sitter-fold-range-go-method)
- (method_declaration . tree-sitter-fold-range-go-method)))
- (nix-mode . ((attrset . tree-sitter-fold-range-nix-attrset)
- (function . tree-sitter-fold-range-nix-function)))
+ '((c-mode . ((compound_statement . tree-sitter-fold-range-seq)))
+ (c++-mode . ((compound_statement . tree-sitter-fold-range-seq)))
+ (ess-r-mode . ((brace_list . tree-sitter-fold-range-seq)))
+ (go-mode . ((type_declaration .
tree-sitter-fold-range-go-type-declaration)
+ (function_declaration . tree-sitter-fold-range-go-method)
+ (method_declaration . tree-sitter-fold-range-go-method)))
+ (nix-mode . ((attrset . tree-sitter-fold-range-nix-attrset)
+ (function . tree-sitter-fold-range-nix-function)))
(python-mode . ((function_definition . tree-sitter-fold-range-python)
(class_definition . tree-sitter-fold-range-python))))
"An alist of (major-mode . (foldable-node-type . function)).
@@ -195,63 +199,63 @@ Foldable nodes are defined in
`tree-sitter-fold-foldable-node-alist' for the
current `major-mode'. If no foldable NODE is found in point, do nothing."
(interactive)
(tree-sitter-fold--ensure-ts
- (let ((node (or node (tree-sitter-fold--foldable-node-at-pos))))
- ;; make sure I do not create multiple overlays for the same fold
- (when-let* ((ov (tree-sitter-fold-overlay-at node)))
- (delete-overlay ov))
- (tree-sitter-fold--create-overlay (tree-sitter-fold--get-fold-range
node)))))
+ (let ((node (or node (tree-sitter-fold--foldable-node-at-pos))))
+ ;; make sure I do not create multiple overlays for the same fold
+ (when-let* ((ov (tree-sitter-fold-overlay-at node)))
+ (delete-overlay ov))
+ (tree-sitter-fold--create-overlay (tree-sitter-fold--get-fold-range
node)))))
(defun tree-sitter-fold-open ()
"Open the fold of the syntax node in which `point' resides.
If the current node is not folded or not foldable, do nothing."
(interactive)
(tree-sitter-fold--ensure-ts
- (when-let* ((node (tree-sitter-fold--foldable-node-at-pos))
- (ov (tree-sitter-fold-overlay-at node)))
- (delete-overlay ov))))
+ (when-let* ((node (tree-sitter-fold--foldable-node-at-pos))
+ (ov (tree-sitter-fold-overlay-at node)))
+ (delete-overlay ov))))
(defun tree-sitter-fold-open-recursively ()
"Open recursively folded syntax NODE that are contained in the node at
point."
(interactive)
(tree-sitter-fold--ensure-ts
- (when-let* ((node (tree-sitter-fold--foldable-node-at-pos))
- (beg (tsc-node-start-position node))
- (end (tsc-node-end-position node)))
- (thread-last (overlays-in beg end)
- (seq-filter (lambda (ov) (eq (overlay-get ov 'invisible)
'tree-sitter-fold)))
- (mapc #'delete-overlay)))))
+ (when-let* ((node (tree-sitter-fold--foldable-node-at-pos))
+ (beg (tsc-node-start-position node))
+ (end (tsc-node-end-position node)))
+ (thread-last (overlays-in beg end)
+ (seq-filter (lambda (ov) (eq (overlay-get ov 'invisible)
'tree-sitter-fold)))
+ (mapc #'delete-overlay)))))
(defun tree-sitter-fold-close-all ()
"Fold all foldable syntax nodes in the buffer."
(interactive)
(tree-sitter-fold--ensure-ts
- (let* ((node (tsc-root-node tree-sitter-tree))
- (patterns (seq-mapcat (lambda (type) `(,(list type) @name))
- (alist-get major-mode
tree-sitter-fold-foldable-node-alist)
- 'vector))
- (query (tsc-make-query tree-sitter-language patterns))
- (nodes-to-fold (tsc-query-captures query node #'ignore)))
- (thread-last nodes-to-fold
- (mapcar #'cdr)
- (mapc #'tree-sitter-fold-close)))))
+ (let* ((node (tsc-root-node tree-sitter-tree))
+ (patterns (seq-mapcat (lambda (type) `(,(list type) @name))
+ (alist-get major-mode
tree-sitter-fold-foldable-node-alist)
+ 'vector))
+ (query (tsc-make-query tree-sitter-language patterns))
+ (nodes-to-fold (tsc-query-captures query node #'ignore)))
+ (thread-last nodes-to-fold
+ (mapcar #'cdr)
+ (mapc #'tree-sitter-fold-close)))))
(defun tree-sitter-fold-open-all ()
"Unfold all syntax nodes in the buffer."
(interactive)
(tree-sitter-fold--ensure-ts
- (thread-last (overlays-in (point-min) (point-max))
- (seq-filter (lambda (ov) (eq (overlay-get ov 'invisible)
'tree-sitter-fold)))
- (mapc #'delete-overlay))))
+ (thread-last (overlays-in (point-min) (point-max))
+ (seq-filter (lambda (ov) (eq (overlay-get ov 'invisible)
'tree-sitter-fold)))
+ (mapc #'delete-overlay))))
(defun tree-sitter-fold-toggle ()
"Toggle the syntax node at `point'.
If the current syntax node is not foldable, do nothing."
(interactive)
(tree-sitter-fold--ensure-ts
- (let ((node (tree-sitter-fold--foldable-node-at-pos (point))))
- (if-let* ((ov (tree-sitter-fold-overlay-at node)))
- (delete-overlay ov)
- (tree-sitter-fold-close node)))))
+ (let ((node (tree-sitter-fold--foldable-node-at-pos (point))))
+ (if-let* ((ov (tree-sitter-fold-overlay-at node)))
+ (delete-overlay ov)
+ (tree-sitter-fold-close node)))))
;;
;; (@* "Languages" )
@@ -269,8 +273,8 @@ NODE in Python."
(end (tsc-node-end-position node)))
(cons beg end)))
-(defun tree-sitter-fold-range-r (node)
- "Return the fold range for `brace_list' NODE in R."
+(defun tree-sitter-fold-range-seq (node)
+ "Return the fold range in sequence."
(let ((beg (tsc-node-end-position (tsc-get-nth-child node 0)))
(end (1- (tsc-node-end-position node))))
(cons beg end)))
- [nongnu] elpa/treesit-fold bb757d3afb 021/417: Add keywords, (continued)
- [nongnu] elpa/treesit-fold bb757d3afb 021/417: Add keywords, ELPA Syncer, 2024/07/01
- [nongnu] elpa/treesit-fold 9695389e7e 020/417: Merge header, ELPA Syncer, 2024/07/01
- [nongnu] elpa/treesit-fold 98d7f91173 028/417: Use markdown readme instead, ELPA Syncer, 2024/07/01
- [nongnu] elpa/treesit-fold a826237d17 024/417: Add ignore, ELPA Syncer, 2024/07/01
- [nongnu] elpa/treesit-fold 23558465b6 033/417: Fix docstring, ELPA Syncer, 2024/07/01
- [nongnu] elpa/treesit-fold 4fbe88f721 032/417: Remove compiled, ELPA Syncer, 2024/07/01
- [nongnu] elpa/treesit-fold 9be3f5b086 034/417: Update readme, ELPA Syncer, 2024/07/01
- [nongnu] elpa/treesit-fold 5986e9e3c9 035/417: Remove code block, ELPA Syncer, 2024/07/01
- [nongnu] elpa/treesit-fold 10cd5dfc38 025/417: Add license, ELPA Syncer, 2024/07/01
- [nongnu] elpa/treesit-fold ec4c14c7e2 029/417: Add makefile for CI, ELPA Syncer, 2024/07/01
- [nongnu] elpa/treesit-fold a6a1500445 040/417: Add c and c++ support,
ELPA Syncer <=
- [nongnu] elpa/treesit-fold bf295cd834 041/417: Add more details, ELPA Syncer, 2024/07/01
- [nongnu] elpa/treesit-fold 6bdfc84909 043/417: Add js, ELPA Syncer, 2024/07/01
- [nongnu] elpa/treesit-fold 1abf9923ee 042/417: Add js, ELPA Syncer, 2024/07/01
- [nongnu] elpa/treesit-fold 41b39499aa 047/417: Allow warnings, ELPA Syncer, 2024/07/01
- [nongnu] elpa/treesit-fold 6ea9943f9d 048/417: Place CI badge under, ELPA Syncer, 2024/07/01
- [nongnu] elpa/treesit-fold 05d2b87611 056/417: Add offset, ELPA Syncer, 2024/07/01
- [nongnu] elpa/treesit-fold fcd5828d3f 058/417: Update Cask, ELPA Syncer, 2024/07/01
- [nongnu] elpa/treesit-fold 045841504e 059/417: Simplify node alist, ELPA Syncer, 2024/07/01
- [nongnu] elpa/treesit-fold 17d029c8bd 064/417: Update Cask, ELPA Syncer, 2024/07/01
- [nongnu] elpa/treesit-fold 7a2cbb3c80 066/417: Add changelog, ELPA Syncer, 2024/07/01