branch: elpa/treesit-fold
commit d57ff357194483f4d3277613345634136a41b509
Author: JenChieh <[email protected]>
Commit: JenChieh <[email protected]>
feat: Add Vim support
---
treesit-fold-parsers.el | 17 +++++++++++++----
treesit-fold-summary.el | 5 +++++
treesit-fold.el | 17 ++++++++---------
3 files changed, 26 insertions(+), 13 deletions(-)
diff --git a/treesit-fold-parsers.el b/treesit-fold-parsers.el
index 2b0864b3217..a12734c5541 100644
--- a/treesit-fold-parsers.el
+++ b/treesit-fold-parsers.el
@@ -104,6 +104,7 @@
(declare-function treesit-fold-range-verilog-initial-construct
"treesit-fold.el")
(declare-function treesit-fold-range-verilog-module "treesit-fold.el")
(declare-function treesit-fold-range-vhdl-package "treesit-fold.el")
+(declare-function treesit-fold-range-vim-for-loop "treesit-fold.el")
(declare-function treesit-fold-range-vhdl-type "treesit-fold.el")
;;
@@ -760,10 +761,18 @@
(enumeration_type_definition . treesit-fold-range-seq)
(comment . treesit-fold-range-lua-comment)))
-(defun treesit-fold-parsers-vimscript ()
- "Rule set for Vimscript."
- '((function_definition . treesit-fold-range-vimscript-function)
- (if_statement . (treesit-fold-range-seq 1 -4))))
+(defun treesit-fold-parsers-vim ()
+ "Rule set for Vim."
+ '((function_definition . treesit-fold-range-vim-for-loop)
+ (for_loop . treesit-fold-range-vim-for-loop)
+ (while_loop . treesit-fold-range-vim-for-loop)
+ (if_statement . treesit-fold-range-vim-for-loop)
+ (elseif_statement . treesit-fold-range-vim-for-loop)
+ (else_statement . treesit-fold-range-vim-for-loop)
+ (list . treesit-fold-range-seq)
+ (comment
+ . (lambda (node offset)
+ (treesit-fold-range-line-comment node offset "\"")))))
(defun treesit-fold-parsers-xml ()
"Rule set for XML."
diff --git a/treesit-fold-summary.el b/treesit-fold-summary.el
index 9318b240f4a..383ac12052a 100644
--- a/treesit-fold-summary.el
+++ b/treesit-fold-summary.el
@@ -178,6 +178,10 @@ type of content by checking the word boundary's existence."
"Extract summary from DOC-STR in Org block."
(treesit-fold-summary--doc-extract doc-str '()))
+(defun treesit-fold-summary-vim (doc-str)
+ "Extract summary from DOC-STR in Vim."
+ (treesit-fold-summary--generic doc-str '("\"")))
+
(defun treesit-fold-summary-xml (doc-str)
"Extract summary from DOC-STR in XML."
(treesit-fold-summary--generic doc-str "-"))
@@ -279,6 +283,7 @@ type of content by checking the word boundary's existence."
(typescript-mode . treesit-fold-summary-javadoc)
(verilog-mode . treesit-fold-summary-javadoc)
(vhdl-mode . treesit-fold-summary-lua-doc)
+ (vimscript-ts-mode . treesit-fold-summary-vim)
(nxml-mode . treesit-fold-summary-xml)
(yaml-mode . treesit-fold-summary-ruby-doc)
(k8s-mode . treesit-fold-summary-ruby-doc)
diff --git a/treesit-fold.el b/treesit-fold.el
index 57838fe4818..5a806475e24 100644
--- a/treesit-fold.el
+++ b/treesit-fold.el
@@ -197,7 +197,7 @@
(verilog-ts-mode . ,(treesit-fold-parsers-verilog))
(vhdl-mode . ,(treesit-fold-parsers-vhdl))
(vhdl-ts-mode . ,(treesit-fold-parsers-vhdl))
- (vimscript-ts-mode . ,(treesit-fold-parsers-vimscript))
+ (vimscript-ts-mode . ,(treesit-fold-parsers-vim))
(nxml-mode . ,(treesit-fold-parsers-xml))
(xml-ts-mode . ,(treesit-fold-parsers-xml))
(yaml-mode . ,(treesit-fold-parsers-yaml))
@@ -1607,17 +1607,16 @@ more information."
(setq end (treesit-fold--last-eol end)))
(treesit-fold--cons-add (cons beg end) offset)))
-(defun treesit-fold-range-vimscript-function (node offset)
- "Return the fold range for `function!' and `func' NODE
-in Vimscript.
-
+(defun treesit-fold-range-vim-for-loop (node offset)
+ "Return the fold range for `for_loop' in Vim.
For arguments NODE and OFFSET, see function `treesit-fold-range-seq' for
more information."
- (when-let* ((param-node (treesit-node-child node 1))
- (beg (treesit-node-start param-node))
+ (when-let* ((body (car (treesit-fold-find-children node "body")))
+ (prev (treesit-node-prev-sibling body))
+ (beg (treesit-node-end prev))
(end (treesit-node-end node)))
- (unless treesit-fold-on-next-line ; display nicely
- (setq beg (treesit-fold--last-eol beg)))
+ (when treesit-fold-on-next-line
+ (setq end (treesit-fold--last-eol end)))
(treesit-fold--cons-add (cons beg end) offset)))
(provide 'treesit-fold)