[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[nongnu] elpa/treesit-fold 05d2b87611 056/417: Add offset
From: |
ELPA Syncer |
Subject: |
[nongnu] elpa/treesit-fold 05d2b87611 056/417: Add offset |
Date: |
Mon, 1 Jul 2024 10:02:10 -0400 (EDT) |
branch: elpa/treesit-fold
commit 05d2b876113c1631fa9110eff0e968f4de759ad8
Author: Jen-Chieh Shen <jcs090218@gmail.com>
Commit: Jen-Chieh Shen <jcs090218@gmail.com>
Add offset
---
tree-sitter-fold.el | 89 ++++++++++++++++++++++++++++++++---------------------
1 file changed, 54 insertions(+), 35 deletions(-)
diff --git a/tree-sitter-fold.el b/tree-sitter-fold.el
index cc4947e843..344815e272 100644
--- a/tree-sitter-fold.el
+++ b/tree-sitter-fold.el
@@ -10,7 +10,7 @@
;; Description: Code folding using tree-sitter
;; Keyword: folding tree-sitter
;; Version: 0.0.1
-;; Package-Requires: ((emacs "26.1") (tree-sitter "0.15.1"))
+;; Package-Requires: ((emacs "26.1") (tree-sitter "0.15.1") (s "1.9.0"))
;; URL: https://github.com/jcs090218/tree-sitter-fold
;; This file is NOT part of GNU Emacs.
@@ -71,31 +71,43 @@
:group 'tree-sitter-fold)
(defcustom tree-sitter-fold-range-alist
- '((c-mode . ((compound_statement . tree-sitter-fold-range-seq)
- (declaration_list . tree-sitter-fold-range-seq)
- (enumerator_list . tree-sitter-fold-range-seq)
- (field_declaration_list . tree-sitter-fold-range-seq)
- (comment . tree-sitter-fold-range-seq)))
- (c++-mode . ((compound_statement . tree-sitter-fold-range-seq)
- (declaration_list . tree-sitter-fold-range-seq)
- (enumerator_list . tree-sitter-fold-range-seq)
- (field_declaration_list . tree-sitter-fold-range-seq)
- (comment . 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)))
- (javascript-mode . ((export_clause . tree-sitter-fold-range-seq)))
- (js-mode . ((export_clause . tree-sitter-fold-range-seq)))
- (js2-mode . ((export_clause . tree-sitter-fold-range-seq)
- (statement_block . tree-sitter-fold-range-seq)))
- (js3-mode . ((export_clause . tree-sitter-fold-range-seq)))
- (rjsx-mode . ((export_clause . tree-sitter-fold-range-seq)))
- (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)))
- (typescript-mode . ((export_clause . tree-sitter-fold-range-seq))))
+ '((c-mode
+ . ((compound_statement . tree-sitter-fold-range-seq)
+ (declaration_list . tree-sitter-fold-range-seq)
+ (enumerator_list . tree-sitter-fold-range-seq)
+ (field_declaration_list . tree-sitter-fold-range-seq)
+ (comment . tree-sitter-fold-range-seq)))
+ (c++-mode
+ . ((compound_statement . tree-sitter-fold-range-seq)
+ (declaration_list . tree-sitter-fold-range-seq)
+ (enumerator_list . tree-sitter-fold-range-seq)
+ (field_declaration_list . tree-sitter-fold-range-seq)
+ (comment . (tree-sitter-fold-range-seq 1 -1))))
+ (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)))
+ (javascript-mode
+ . ((export_clause . tree-sitter-fold-range-seq)))
+ (js-mode
+ . ((export_clause . tree-sitter-fold-range-seq)))
+ (js2-mode
+ . ((export_clause . tree-sitter-fold-range-seq)
+ (statement_block . tree-sitter-fold-range-seq)))
+ (js3-mode
+ . ((export_clause . tree-sitter-fold-range-seq)))
+ (rjsx-mode
+ . ((export_clause . tree-sitter-fold-range-seq)))
+ (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)))
+ (typescript-mode
+ . ((export_clause . tree-sitter-fold-range-seq))))
"An alist of (major-mode . (foldable-node-type . function)).
FUNCTION is used to determine where the beginning and end for
FOLDABLE-NODE-TYPE
@@ -179,10 +191,10 @@ This function is borrowed from
`tree-sitter-node-at-point'."
(defun tree-sitter-fold--get-fold-range (node)
"Return the beginning (as buffer position) of fold for NODE."
(if-let* ((fold-alist (alist-get major-mode tree-sitter-fold-range-alist))
- (fn (alist-get (tsc-node-type node) fold-alist)))
- (if (functionp fn)
- (funcall fn node)
- (user-error "Current node is not found in
`tree-sitter-fold-range-alist' in %s" major-mode))))
+ (item (alist-get (tsc-node-type node) fold-alist)))
+ (cond ((functionp item) (funcall item node (cons 0 0)))
+ ((listp item) (funcall (nth 0 item) node (cons (nth 1 item) (nth 2
item))))
+ (t (user-error "Current node is not found in
`tree-sitter-fold-range-alist' in %s" major-mode)))))
;;
;; (@* "Overlays" )
@@ -193,8 +205,8 @@ This function is borrowed from `tree-sitter-node-at-point'."
(when (not (null range))
(let* ((beg (car range)) (end (cdr range)) (ov (make-overlay beg end)))
(overlay-put ov 'invisible 'tree-sitter-fold)
- (overlay-put ov 'display (or (and tree-sitter-fold-show-summary
- (tree-sitter-fold--get-summary
(buffer-substring beg end)))
+ (overlay-put ov 'display (or (and tree-sitter-fold-summary-show
+ (tree-sitter-fold-summary--get
(buffer-substring beg end)))
tree-sitter-fold-replacement))
(overlay-put ov 'face 'tree-sitter-fold-replacement-face)
(overlay-put ov 'isearch-open-invisible
#'tree-sitter-fold--isearch-open))))
@@ -227,6 +239,7 @@ Return nil otherwise."
(progn ,@body)
(user-error "Ignored, tree-sitter-mode is not enable in the current
buffer")))
+;;;###autoload
(defun tree-sitter-fold-close (&optional node)
"Fold the syntax node at `point` if it is foldable.
@@ -240,6 +253,7 @@ current `major-mode'. If no foldable NODE is found in
point, do nothing."
(delete-overlay ov))
(tree-sitter-fold--create-overlay (tree-sitter-fold--get-fold-range
node)))))
+;;;###autoload
(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."
@@ -249,6 +263,7 @@ If the current node is not folded or not foldable, do
nothing."
(ov (tree-sitter-fold-overlay-at node)))
(delete-overlay ov))))
+;;;###autoload
(defun tree-sitter-fold-open-recursively ()
"Open recursively folded syntax NODE that are contained in the node at
point."
(interactive)
@@ -260,6 +275,7 @@ If the current node is not folded or not foldable, do
nothing."
(seq-filter (lambda (ov) (eq (overlay-get ov 'invisible)
'tree-sitter-fold)))
(mapc #'delete-overlay)))))
+;;;###autoload
(defun tree-sitter-fold-close-all ()
"Fold all foldable syntax nodes in the buffer."
(interactive)
@@ -274,6 +290,7 @@ If the current node is not folded or not foldable, do
nothing."
(mapcar #'cdr)
(mapc #'tree-sitter-fold-close)))))
+;;;###autoload
(defun tree-sitter-fold-open-all ()
"Unfold all syntax nodes in the buffer."
(interactive)
@@ -282,6 +299,7 @@ If the current node is not folded or not foldable, do
nothing."
(seq-filter (lambda (ov) (eq (overlay-get ov 'invisible)
'tree-sitter-fold)))
(mapc #'delete-overlay))))
+;;;###autoload
(defun tree-sitter-fold-toggle ()
"Toggle the syntax node at `point'.
If the current syntax node is not foldable, do nothing."
@@ -296,10 +314,11 @@ If the current syntax node is not foldable, do nothing."
;; (@* "Languages" )
;;
-(defun tree-sitter-fold-range-seq (node)
+(defun tree-sitter-fold-range-seq (node offset)
"Return the fold range in sequence."
- (let ((beg (1+ (tsc-node-start-position node)))
- (end (1- (tsc-node-end-position node))))
+ (jcs-print "offset" offset)
+ (let ((beg (+ (tsc-node-start-position node) 1 (car offset)))
+ (end (+ (tsc-node-end-position node) -1 (cdr offset))))
(cons beg end)))
(defun tree-sitter-fold-range-python (node)
- [nongnu] elpa/treesit-fold 9be3f5b086 034/417: Update readme, (continued)
- [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, 2024/07/01
- [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 <=
- [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
- [nongnu] elpa/treesit-fold e38981daf7 070/417: Enalbe compile, ELPA Syncer, 2024/07/01
- [nongnu] elpa/treesit-fold dc670a048b 072/417: Add readme, ELPA Syncer, 2024/07/01
- [nongnu] elpa/treesit-fold a5d413e45c 074/417: Complete Java, ELPA Syncer, 2024/07/01
- [nongnu] elpa/treesit-fold de128eaf10 076/417: Add CSS, ELPA Syncer, 2024/07/01
- [nongnu] elpa/treesit-fold 23bd9c2c05 077/417: Add CSS, ELPA Syncer, 2024/07/01
- [nongnu] elpa/treesit-fold fef90261f5 082/417: Apply offset, ELPA Syncer, 2024/07/01