[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[nongnu] elpa/treesit-fold a39f3bbe48 117/417: WIP for C preprocessor
From: |
ELPA Syncer |
Subject: |
[nongnu] elpa/treesit-fold a39f3bbe48 117/417: WIP for C preprocessor |
Date: |
Mon, 1 Jul 2024 10:02:17 -0400 (EDT) |
branch: elpa/treesit-fold
commit a39f3bbe48fc36dd6433a7cb3d20e827295a7afb
Author: Jen-Chieh <jcs090218@gmail.com>
Commit: Jen-Chieh <jcs090218@gmail.com>
WIP for C preprocessor
---
tree-sitter-fold-parsers.el | 9 ++++++-
tree-sitter-fold.el | 59 +++++++++++++++++++++++++++++++++------------
2 files changed, 52 insertions(+), 16 deletions(-)
diff --git a/tree-sitter-fold-parsers.el b/tree-sitter-fold-parsers.el
index 4de487fdf4..a9b9439904 100644
--- a/tree-sitter-fold-parsers.el
+++ b/tree-sitter-fold-parsers.el
@@ -40,6 +40,10 @@
(declare-function tree-sitter-fold-range-block-comment "tree-sitter-fold.el")
(declare-function tree-sitter-fold-c-like-comment "tree-sitter-fold.el")
+(declare-function tree-sitter-fold-range-c-preproc-def "tree-sitter-fold.el")
+(declare-function tree-sitter-fold-range-c-preproc-ifdef "tree-sitter-fold.el")
+(declare-function tree-sitter-fold-range-c-preproc-if "tree-sitter-fold.el")
+(declare-function tree-sitter-fold-range-c-preproc-else "tree-sitter-fold.el")
(declare-function tree-sitter-fold-range-python "tree-sitter-fold.el")
(declare-function tree-sitter-fold-range-rust-macro "tree-sitter-fold.el")
@@ -62,7 +66,10 @@
(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)
+ (preproc_def . tree-sitter-fold-range-c-preproc-def)
+ (preproc_if . tree-sitter-fold-range-c-preproc-if)
+ (preproc_ifdef . tree-sitter-fold-range-c-preproc-ifdef)
+ (preproc_else . tree-sitter-fold-range-c-preproc-else)
(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 7cced425fc..cd0b35412e 100644
--- a/tree-sitter-fold.el
+++ b/tree-sitter-fold.el
@@ -334,17 +334,6 @@ If the current syntax node is not foldable, do nothing."
;; (@* "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)))
@@ -355,6 +344,17 @@ Argument NODE is the starting node."
If NEXT is non-nil, return next sibling. Otherwirse, return previouse
sibling."
(if next (tsc-get-next-sibling node) (tsc-get-prev-sibling node)))
+(defun tree-sitter-fold--get-node-by-text (node text next)
+ "Return node with matching TEXT.
+Argument NODE is the starting node."
+ (let ((current (tree-sitter-fold--next-prev-node node next)) result)
+ (while current
+ (if (string= text (string-trim (tsc-node-text current)))
+ (setq result current
+ current nil)
+ (setq current (tree-sitter-fold--next-prev-node current next))))
+ result))
+
(defun tree-sitter-fold--continuous-node-prefix (node prefix next)
"Iterate through node starting from NODE and compare node-text to PREFIX;
then return the last iterated node.
@@ -410,16 +410,45 @@ more information."
;; (@* "Languages" )
;;
-(defun tree-sitter-fold-range-c-preproc (node offset)
+(defun tree-sitter-fold-range-c-preproc-def (node offset)
+ ""
+ (when-let* ((named-node (tsc-get-child-by-field node :name))
+ (beg (tsc-node-end-position named-node))
+ (next (or (tree-sitter-fold--get-node-by-text node "#elif" t)
+ (tree-sitter-fold--get-node-by-text node "#else" t)
+ (tree-sitter-fold--get-node-by-text node "#endif" t)))
+ (end (1- (tsc-node-start-position next))))
+ (tree-sitter-fold-util--cons-add (cons beg end) offset)))
+
+(defun tree-sitter-fold-range-c-preproc-if (node offset)
+ ""
+ (when-let* ((named-node (tsc-get-child-by-field node :condition))
+ (beg (tsc-node-end-position named-node))
+ (next (or (tree-sitter-fold--get-node-by-text node "#elif" t)
+ (tree-sitter-fold--get-node-by-text node "#else" t)
+ (tree-sitter-fold--get-node-by-text node "#endif" t)))
+ (end (1- (tsc-node-start-position next))))
+ (tree-sitter-fold-util--cons-add (cons beg end) offset)))
+
+(defun tree-sitter-fold-range-c-preproc-ifdef (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))))
+ (next (or (tree-sitter-fold--get-node-by-text node "#elif" t)
+ (tree-sitter-fold--get-node-by-text node "#else" t)
+ (tree-sitter-fold--get-node-by-text node "#endif" t)))
+ (end (1- (tsc-node-start-position next))))
+ (tree-sitter-fold-util--cons-add (cons beg end) offset)))
+
+(defun tree-sitter-fold-range-c-preproc-else (node offset)
+ ""
+ (when-let* ((beg (tsc-node-end-position node))
+ (next (tree-sitter-fold--get-node-by-text node "#endif" t))
+ (end (1- (tsc-node-start-position next))))
(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'.
+ "Define fold range for `function_definition' and `class_definition'.
For arguments NODE and OFFSET, see function `tree-sitter-fold-range-seq' for
more information."
- [nongnu] elpa/treesit-fold af3a57b656 413/417: docs: Changelog bump, (continued)
- [nongnu] elpa/treesit-fold af3a57b656 413/417: docs: Changelog bump, ELPA Syncer, 2024/07/01
- [nongnu] elpa/treesit-fold 75d6f9ed31 253/417: Add extra folding definitions for golang (#42), ELPA Syncer, 2024/07/01
- [nongnu] elpa/treesit-fold d2f88cbf1b 123/417: Add parser, ELPA Syncer, 2024/07/01
- [nongnu] elpa/treesit-fold 1b54cdc9fc 139/417: Update doc, ELPA Syncer, 2024/07/01
- [nongnu] elpa/treesit-fold 3d1be710a6 200/417: Update README.md, ELPA Syncer, 2024/07/01
- [nongnu] elpa/treesit-fold 1bc43aa561 254/417: updated line-reminder compatibility in README (#50), ELPA Syncer, 2024/07/01
- [nongnu] elpa/treesit-fold 27c6bc4819 265/417: feature(parser): Add support for python docstring (#58), ELPA Syncer, 2024/07/01
- [nongnu] elpa/treesit-fold 663dcac0a9 301/417: chore(deps): bump actions/checkout from 3 to 4 (#84), ELPA Syncer, 2024/07/01
- [nongnu] elpa/treesit-fold 704a0463ed 357/417: fixed merge conflict, ELPA Syncer, 2024/07/01
- [nongnu] elpa/treesit-fold 46fdb65c77 395/417: feat: Add hook after indicator refresh, ELPA Syncer, 2024/07/01
- [nongnu] elpa/treesit-fold a39f3bbe48 117/417: WIP for C preprocessor,
ELPA Syncer <=
- [nongnu] elpa/treesit-fold af2679860f 129/417: Def prog, ELPA Syncer, 2024/07/01
- [nongnu] elpa/treesit-fold e334470a17 203/417: update, ELPA Syncer, 2024/07/01
- [nongnu] elpa/treesit-fold 7667a37644 268/417: fix(indicators): Warning 'when' with empty body, ELPA Syncer, 2024/07/01
- [nongnu] elpa/treesit-fold b19f6f54bf 371/417: feat: Add Haxe support, ELPA Syncer, 2024/07/01
- [nongnu] elpa/treesit-fold de6d9ae174 255/417: docs(README.md): Improve instruction for line-reminder, ELPA Syncer, 2024/07/01
- [nongnu] elpa/treesit-fold a70c9ab017 327/417: feat: Add Groovy support (#98), ELPA Syncer, 2024/07/01