[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[nongnu] elpa/treesit-fold 36768e42d9 116/417: Add basic c preprocessor
From: |
ELPA Syncer |
Subject: |
[nongnu] elpa/treesit-fold 36768e42d9 116/417: Add basic c preprocessor |
Date: |
Mon, 1 Jul 2024 10:02:17 -0400 (EDT) |
branch: elpa/treesit-fold
commit 36768e42d9743dcd48ab65352bbee9305cf28966
Author: Jen-Chieh <jcs090218@gmail.com>
Commit: Jen-Chieh <jcs090218@gmail.com>
Add basic c preprocessor
---
tree-sitter-fold-parsers.el | 1 +
tree-sitter-fold.el | 39 +++++++++++++++++++++++++++++++--------
2 files changed, 32 insertions(+), 8 deletions(-)
diff --git a/tree-sitter-fold-parsers.el b/tree-sitter-fold-parsers.el
index bcb4b33acf..4de487fdf4 100644
--- a/tree-sitter-fold-parsers.el
+++ b/tree-sitter-fold-parsers.el
@@ -62,6 +62,7 @@
(declaration_list . tree-sitter-fold-range-seq)
(enumerator_list . tree-sitter-fold-range-seq)
(field_declaration_list . tree-sitter-fold-range-seq)
+ (preproc_def . tree-sitter-fold-range-c-preproc)
(comment . (tree-sitter-fold-range-seq 1 -1))))
(defun tree-sitter-fold-parsers-c++ ()
diff --git a/tree-sitter-fold.el b/tree-sitter-fold.el
index 0854903706..7cced425fc 100644
--- a/tree-sitter-fold.el
+++ b/tree-sitter-fold.el
@@ -331,9 +331,20 @@ If the current syntax node is not foldable, do nothing."
(advice-add command :after #'tree-sitter-fold--after-command)))
;;
-;; (@* "Languages" )
+;; (@* "Rule Helpers" )
;;
+(defun tree-sitter-fold--get-node-by-text (node text)
+ "Return node with matching TEXT.
+Argument NODE is the starting node."
+ (let ((current (tsc-get-next-sibling node)) result)
+ (while current
+ (if (string= text (string-trim (tsc-node-text current)))
+ (setq result current
+ current nil)
+ (setq current (tsc-get-next-sibling current))))
+ result))
+
(defun tree-sitter-fold--multi-line (node)
"Return t, if content NODE is single line."
(string-match-p "\n" (tsc-node-text node)))
@@ -395,18 +406,30 @@ more information."
(tree-sitter-fold-range-block-comment node offset)
(tree-sitter-fold-range-line-comment node offset "///")))
+;;
+;; (@* "Languages" )
+;;
+
+(defun tree-sitter-fold-range-c-preproc (node offset)
+ ""
+ (when-let* ((named-node (tsc-get-child-by-field node :name))
+ (beg (tsc-node-end-position named-node))
+ (end-node (tree-sitter-fold--get-node-by-text node "#endif"))
+ (end (1- (tsc-node-start-position end-node))))
+ (tree-sitter-fold-util--cons-add (cons beg end) offset)))
+
(defun tree-sitter-fold-range-python (node offset)
"Return the fold range for `function_definition' and `class_definition'.
For arguments NODE and OFFSET, see function `tree-sitter-fold-range-seq' for
more information."
- (let* ((named-node (or (tsc-get-child-by-field node :superclasses)
- (tsc-get-child-by-field node :return_type)
- (tsc-get-child-by-field node :parameters)
- (tsc-get-child-by-field node :name)))
- ;; the colon is an anonymous node after return_type or parameters node
- (beg (tsc-node-end-position (tsc-get-next-sibling named-node)))
- (end (tsc-node-end-position node)))
+ (when-let* ((named-node (or (tsc-get-child-by-field node :superclasses)
+ (tsc-get-child-by-field node :return_type)
+ (tsc-get-child-by-field node :parameters)
+ (tsc-get-child-by-field node :name)))
+ ;; the colon is an anonymous node after return_type or
parameters node
+ (beg (tsc-node-end-position (tsc-get-next-sibling named-node)))
+ (end (tsc-node-end-position node)))
(tree-sitter-fold-util--cons-add (cons beg end) offset)))
(defun tree-sitter-fold-range-ruby (_node _offset)
- [nongnu] elpa/treesit-fold edf623a794 067/417: Add scirpt, (continued)
- [nongnu] elpa/treesit-fold edf623a794 067/417: Add scirpt, ELPA Syncer, 2024/07/01
- [nongnu] elpa/treesit-fold de8e8fe97b 078/417: Add block, ELPA Syncer, 2024/07/01
- [nongnu] elpa/treesit-fold b18525f494 079/417: Fix folde mode, ELPA Syncer, 2024/07/01
- [nongnu] elpa/treesit-fold d08d138fa9 081/417: Add rust, ELPA Syncer, 2024/07/01
- [nongnu] elpa/treesit-fold 13a35c38d3 085/417: Fix void function, ELPA Syncer, 2024/07/01
- [nongnu] elpa/treesit-fold bbfd8658b0 091/417: Clean up, ELPA Syncer, 2024/07/01
- [nongnu] elpa/treesit-fold 0d3e776402 094/417: Replace nix with simpler rule sets, ELPA Syncer, 2024/07/01
- [nongnu] elpa/treesit-fold 1995c646fd 103/417: Fix csharp summary, ELPA Syncer, 2024/07/01
- [nongnu] elpa/treesit-fold 4c33ee9b8a 108/417: Add bash support, ELPA Syncer, 2024/07/01
- [nongnu] elpa/treesit-fold 2e2d2dfef3 104/417: Fix node issue, ELPA Syncer, 2024/07/01
- [nongnu] elpa/treesit-fold 36768e42d9 116/417: Add basic c preprocessor,
ELPA Syncer <=
- [nongnu] elpa/treesit-fold 280920bbba 106/417: Clean list, ELPA Syncer, 2024/07/01
- [nongnu] elpa/treesit-fold d563c38a61 119/417: Fix return toggle, ELPA Syncer, 2024/07/01
- [nongnu] elpa/treesit-fold 0dc7e5c563 120/417: Fix prefix, ELPA Syncer, 2024/07/01
- [nongnu] elpa/treesit-fold d3c984af86 121/417: Apply all macro, ELPA Syncer, 2024/07/01
- [nongnu] elpa/treesit-fold 55c603cbcc 130/417: Update doc, ELPA Syncer, 2024/07/01
- [nongnu] elpa/treesit-fold 496efdf1d3 133/417: Support comment for bash, ELPA Syncer, 2024/07/01
- [nongnu] elpa/treesit-fold 442118d40d 140/417: Update doc, ELPA Syncer, 2024/07/01
- [nongnu] elpa/treesit-fold ee4c694b01 143/417: Add toc, ELPA Syncer, 2024/07/01
- [nongnu] elpa/treesit-fold 60984e49c8 144/417: Fix headers toc, ELPA Syncer, 2024/07/01
- [nongnu] elpa/treesit-fold 1ea3f22f9a 145/417: Update mag, ELPA Syncer, 2024/07/01