[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[nongnu] elpa/treesit-fold 9695389e7e 020/417: Merge header
From: |
ELPA Syncer |
Subject: |
[nongnu] elpa/treesit-fold 9695389e7e 020/417: Merge header |
Date: |
Mon, 1 Jul 2024 10:02:06 -0400 (EDT) |
branch: elpa/treesit-fold
commit 9695389e7e35774206129e5f043524e2363c5e0c
Author: JenChieh <jcs090218@gmail.com>
Commit: JenChieh <jcs090218@gmail.com>
Merge header
---
tree-sitter-fold.el | 105 +++++++++++++++++++++++++++++++---------------------
1 file changed, 63 insertions(+), 42 deletions(-)
diff --git a/tree-sitter-fold.el b/tree-sitter-fold.el
index e5d6c1eceb..f095f215b8 100644
--- a/tree-sitter-fold.el
+++ b/tree-sitter-fold.el
@@ -1,14 +1,35 @@
-;;; tree-sitter-fold.el --- code folding using tree-sitter -*-
lexical-binding: t; -*-
+;;; tree-sitter-fold.el --- Code folding using tree-sitter -*-
lexical-binding: t; -*-
;; Copyright (C) 2021 Junyi Hou
-;;
+;; Copyright (C) 2021 Shen, Jen-Chieh
+
+;; Created date 2021-08-11 14:12:37
+
;; Author: Junyi Hou <junyi.yi.hou@gmail.com>
+;; Shen, Jen-Chieh <jcs090218@gmail.com>
+;; Description:
+;; Keyword:
;; Version: 0.0.1
;; Package-Requires: ((emacs "25.1") (tree-sitter "0.15.1"))
-;; SPDX-License-Identifier: MIT
+;; URL: https://github.com/jcs090218/tree-sitter-fold
-;;; Commentary:
+;; This file is NOT part of GNU Emacs.
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+;; You should have received a copy of the GNU General Public License
+;; along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+;;; Commentary:
+;;
;; This package provides a code-folding mechanism based on tree-sitter
;; package. Turn on the minor-mode `tree-sitter-fold-mode' to enable
;; this mechanism. Note that all functionalities provided here based on the
@@ -139,12 +160,12 @@ This function is borrowed from
`tree-sitter-node-at-point'."
(when-let* ((foldable-types (alist-get major-mode
tree-sitter-fold-foldable-node-alist))
(_ (memq (tsc-node-type node) foldable-types))
(range (tree-sitter-fold--get-fold-range node)))
- (thread-last (overlays-in (car range) (cdr range))
- (seq-filter (lambda (ov)
- (and (eq (overlay-get ov 'invisible) 'tree-sitter-fold)
- (= (overlay-start ov) (car range))
- (= (overlay-end ov) (cdr range)))))
- car)))
+ (thread-last (overlays-in (car range) (cdr range))
+ (seq-filter (lambda (ov)
+ (and (eq (overlay-get ov 'invisible) 'tree-sitter-fold)
+ (= (overlay-start ov) (car range))
+ (= (overlay-end ov) (cdr range)))))
+ car)))
;; ========
;; commands
@@ -163,63 +184,63 @@ Foldable nodes are defined in
`tree-sitter-fold-foldable-node-alist' for the cur
`major-mode'. If no foldable node is found in point, do nothing."
(interactive)
(tree-sitter-fold--ensure-ts
- (let ((node (or node (tree-sitter-fold--foldable-node-at-pos))))
- ;; make sure I do not create multiple overlays for the same fold
- (when-let* ((ov (tree-sitter-fold-overlay-at node)))
- (delete-overlay ov))
- (tree-sitter-fold--create-overlay (tree-sitter-fold--get-fold-range
node)))))
+ (let ((node (or node (tree-sitter-fold--foldable-node-at-pos))))
+ ;; make sure I do not create multiple overlays for the same fold
+ (when-let* ((ov (tree-sitter-fold-overlay-at node)))
+ (delete-overlay ov))
+ (tree-sitter-fold--create-overlay (tree-sitter-fold--get-fold-range
node)))))
(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."
(interactive)
(tree-sitter-fold--ensure-ts
- (when-let* ((node (tree-sitter-fold--foldable-node-at-pos))
- (ov (tree-sitter-fold-overlay-at node)))
- (delete-overlay ov))))
+ (when-let* ((node (tree-sitter-fold--foldable-node-at-pos))
+ (ov (tree-sitter-fold-overlay-at node)))
+ (delete-overlay ov))))
(defun tree-sitter-fold-open-recursively ()
"Open recursively folded syntax NODE that are contained in the node at
`point'."
(interactive)
(tree-sitter-fold--ensure-ts
- (when-let* ((node (tree-sitter-fold--foldable-node-at-pos))
- (beg (tsc-node-start-position node))
- (end (tsc-node-end-position node)))
- (thread-last (overlays-in beg end)
- (seq-filter (lambda (ov) (eq (overlay-get ov 'invisible)
'tree-sitter-fold)))
- (mapc #'delete-overlay)))))
+ (when-let* ((node (tree-sitter-fold--foldable-node-at-pos))
+ (beg (tsc-node-start-position node))
+ (end (tsc-node-end-position node)))
+ (thread-last (overlays-in beg end)
+ (seq-filter (lambda (ov) (eq (overlay-get ov 'invisible)
'tree-sitter-fold)))
+ (mapc #'delete-overlay)))))
(defun tree-sitter-fold-close-all ()
"Fold all foldable syntax nodes in the buffer."
(interactive)
(tree-sitter-fold--ensure-ts
- (let* ((node (tsc-root-node tree-sitter-tree))
- (patterns (seq-mapcat (lambda (type) `(,(list type) @name))
- (alist-get major-mode
tree-sitter-fold-foldable-node-alist)
- 'vector))
- (query (tsc-make-query tree-sitter-language patterns))
- (nodes-to-fold (tsc-query-captures query node #'ignore)))
- (thread-last nodes-to-fold
- (mapcar #'cdr)
- (mapc #'tree-sitter-fold-close)))))
+ (let* ((node (tsc-root-node tree-sitter-tree))
+ (patterns (seq-mapcat (lambda (type) `(,(list type) @name))
+ (alist-get major-mode
tree-sitter-fold-foldable-node-alist)
+ 'vector))
+ (query (tsc-make-query tree-sitter-language patterns))
+ (nodes-to-fold (tsc-query-captures query node #'ignore)))
+ (thread-last nodes-to-fold
+ (mapcar #'cdr)
+ (mapc #'tree-sitter-fold-close)))))
(defun tree-sitter-fold-open-all ()
"Unfold all syntax nodes in the buffer."
(interactive)
(tree-sitter-fold--ensure-ts
- (thread-last (overlays-in (point-min) (point-max))
- (seq-filter (lambda (ov) (eq (overlay-get ov 'invisible)
'tree-sitter-fold)))
- (mapc #'delete-overlay))))
+ (thread-last (overlays-in (point-min) (point-max))
+ (seq-filter (lambda (ov) (eq (overlay-get ov 'invisible)
'tree-sitter-fold)))
+ (mapc #'delete-overlay))))
(defun tree-sitter-fold-toggle ()
"Toggle the syntax node at `point'.
If the current syntax node is not foldable, do nothing."
(interactive)
(tree-sitter-fold--ensure-ts
- (let ((node (tree-sitter-fold--foldable-node-at-pos (point))))
- (if-let* ((ov (tree-sitter-fold-overlay-at node)))
- (delete-overlay ov)
- (tree-sitter-fold-close node)))))
+ (let ((node (tree-sitter-fold--foldable-node-at-pos (point))))
+ (if-let* ((ov (tree-sitter-fold-overlay-at node)))
+ (delete-overlay ov)
+ (tree-sitter-fold-close node)))))
;; =================
;; language supports
@@ -279,9 +300,9 @@ Only `struct_type' and `interface_type' nodes can be
folded."
(defun tree-sitter-fold-range-go-method (node)
"Return the fold range for `method_declaration' NODE in Go language."
(let* ((named-node (or (tsc-get-child-by-field node :result)
- (tsc-get-child-by-field node :parameters)))
+ (tsc-get-child-by-field node :parameters)))
(beg (1+ (tsc-node-end-position named-node)))
- (end (tsc-node-end-position node)))
+ (end (tsc-node-end-position node)))
(cons beg end)))
(provide 'tree-sitter-fold)
- [nongnu] elpa/treesit-fold d563c38a61 119/417: Fix return toggle, (continued)
- [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
- [nongnu] elpa/treesit-fold bb757d3afb 021/417: Add keywords, ELPA Syncer, 2024/07/01
- [nongnu] elpa/treesit-fold 9695389e7e 020/417: Merge header,
ELPA Syncer <=
- [nongnu] elpa/treesit-fold 98d7f91173 028/417: Use markdown readme instead, ELPA Syncer, 2024/07/01
- [nongnu] elpa/treesit-fold a826237d17 024/417: Add ignore, ELPA Syncer, 2024/07/01
- [nongnu] elpa/treesit-fold 23558465b6 033/417: Fix docstring, ELPA Syncer, 2024/07/01
- [nongnu] elpa/treesit-fold 4fbe88f721 032/417: Remove compiled, ELPA Syncer, 2024/07/01
- [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