emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[nongnu] elpa/treesit-fold cad8607df0 107/417: Organize parsers


From: ELPA Syncer
Subject: [nongnu] elpa/treesit-fold cad8607df0 107/417: Organize parsers
Date: Mon, 1 Jul 2024 10:02:16 -0400 (EDT)

branch: elpa/treesit-fold
commit cad8607df0c9ee2b1729cfebb5bcbd5b5e1fc382
Author: Jen-Chieh Shen <jcs090218@gmail.com>
Commit: Jen-Chieh Shen <jcs090218@gmail.com>

    Organize parsers
---
 tree-sitter-fold-parsers.el | 15 ++++++++++---
 tree-sitter-fold.el         | 55 +++++++++++++++++++++++++++------------------
 2 files changed, 45 insertions(+), 25 deletions(-)

diff --git a/tree-sitter-fold-parsers.el b/tree-sitter-fold-parsers.el
index 2e56c800b4..24fa3f9258 100644
--- a/tree-sitter-fold-parsers.el
+++ b/tree-sitter-fold-parsers.el
@@ -33,9 +33,12 @@
 ;; (@* "Externals" )
 ;;
 
+(declare-function tree-sitter-fold--multi-line "tree-sitter-fold.el")
+
 (declare-function tree-sitter-fold-range-seq "tree-sitter-fold.el")
+(declare-function tree-sitter-fold-range-line-comment "tree-sitter-fold.el")
+(declare-function tree-sitter-fold-range-block-comment "tree-sitter-fold.el")
 
-(declare-function tree-sitter-fold-range-csharp-comment "tree-sitter-fold.el")
 (declare-function tree-sitter-fold-range-python "tree-sitter-fold.el")
 
 ;;
@@ -63,7 +66,11 @@
     (switch_body                          . tree-sitter-fold-range-seq)
     (anonymous_object_creation_expression . tree-sitter-fold-range-seq)
     (initializer_expression               . tree-sitter-fold-range-seq)
-    (comment                              . 
tree-sitter-fold-range-csharp-comment)))
+    (comment
+     . (lambda (node offset)
+         (if (tree-sitter-fold--multi-line node)
+             (tree-sitter-fold-range-block-comment node offset)
+           (tree-sitter-fold-range-line-comment node offset "///"))))))
 
 (defun tree-sitter-fold-parsers-css ()
   "Rule sets for CSS."
@@ -133,7 +140,9 @@
     (field_initializer_list . tree-sitter-fold-range-seq)
     (match_block            . tree-sitter-fold-range-seq)
     (block                  . tree-sitter-fold-range-seq)
-    (block_comment          . (tree-sitter-fold-range-seq 1 -1))))
+    (line_comment           . (lambda (node offset)
+                                (tree-sitter-fold-range-line-comment node 
offset "///")))
+    (block_comment          . tree-sitter-fold-range-block-comment)))
 
 (defun tree-sitter-fold-parsers-typescript ()
   "Rule sets for TypeScript."
diff --git a/tree-sitter-fold.el b/tree-sitter-fold.el
index ae24aad6ec..989db4b260 100644
--- a/tree-sitter-fold.el
+++ b/tree-sitter-fold.el
@@ -87,15 +87,18 @@ FOLDABLE-NODE-TYPE) and return the buffer positions of the 
beginning and end of
 the fold in a cons cell.  See `tree-sitter-fold-range-python' for an example."
   :type '(alist :key-type symbol
                 :value-type (alist :key-type symbol :value-type function))
+  :set (lambda (symbol value)
+         (set-default symbol value)
+         (setq tree-sitter-fold-foldable-node-alist
+               (let (alist)
+                 (dolist (item tree-sitter-fold-range-alist)
+                   (let ((mode (car item)) nodes)
+                     (dolist (rule (cdr item)) (push (car rule) nodes))
+                     (push (cons mode nodes) alist)))
+                 alist)))
   :group 'tree-sitter-fold)
 
-(defvar tree-sitter-fold-foldable-node-alist
-  (let (alist)
-    (dolist (item tree-sitter-fold-range-alist)
-      (let ((mode (car item)) nodes)
-        (dolist (rule (cdr item)) (push (car rule) nodes))
-        (push (cons mode nodes) alist)))
-    alist)
+(defvar tree-sitter-fold-foldable-node-alist nil
   "Collect a list of foldable node from variable 
`tree-sitter-fold-range-alist'.
 
 The alist is in form of (major-mode . (foldable-node-type)).")
@@ -354,24 +357,32 @@ Argument OFFSET can be used to tweak the final beginning 
and end position."
         (end (1- (tsc-node-end-position node))))
     (tree-sitter-fold-util--cons-add (cons beg end) offset)))
 
-(defun tree-sitter-fold-range-csharp-comment (node offset)
-  "Define fold range for C# comment.
+(defun tree-sitter-fold-range-line-comment (node offset prefix)
+  "Define fold range for line comment.
 
-For arguments NODE and OFFSET, see function `tree-sitter-fold-range-seq'
-for more information."
-  (if (tree-sitter-fold--multi-line node)
-      (tree-sitter-fold-range-seq node (tree-sitter-fold-util--cons-add '(1 . 
-1) offset))
-    (when-let* ((first-node (tree-sitter-fold--continuous-node-prefix node 
"///" nil))
-                (last-node (tree-sitter-fold--continuous-node-prefix node 
"///" t))
-                (beg (+ (tsc-node-start-position first-node) 3))
-                (end (tsc-node-end-position last-node)))
-      (tree-sitter-fold-util--cons-add (cons beg end) offset))))
+For arguments NODE and OFFSET, see function `tree-sitter-fold-range-seq' for
+more information.
+
+Argument PREFIX is the comment prefix in string."
+  (when-let* ((first-node (tree-sitter-fold--continuous-node-prefix node 
prefix nil))
+              (last-node (tree-sitter-fold--continuous-node-prefix node prefix 
t))
+              (prefix-len (length prefix))
+              (beg (+ (tsc-node-start-position first-node) prefix-len))
+              (end (tsc-node-end-position last-node)))
+    (tree-sitter-fold-util--cons-add (cons beg end) offset)))
+
+(defun tree-sitter-fold-range-block-comment (node offset)
+  "Define fold range for block comment.
+
+For arguments NODE and OFFSET, see function `tree-sitter-fold-range-seq' for
+more information."
+  (tree-sitter-fold-range-seq node (tree-sitter-fold-util--cons-add '(1 . -1) 
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."
+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)
@@ -384,8 +395,8 @@ for more information."
 (defun tree-sitter-fold-range-ruby (node offset)
   "Define fold range for Ruby.
 
-For arguments NODE and OFFSET, see function `tree-sitter-fold-range-seq'
-for more information."
+For arguments NODE and OFFSET, see function `tree-sitter-fold-range-seq' for
+more information."
   ;; TODO: ..
   (progn ))
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]