Skip to content

Commit 3375b29

Browse files
authored
feat: Add Janet support (#22)
* feat: Add Janet support * fix pr id
1 parent 2b8ac9e commit 3375b29

File tree

5 files changed

+87
-76
lines changed

5 files changed

+87
-76
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how
99
1010
* feat: Add `HEEx` support (#19)
1111
* feat: Add `EditorConfig` support (#20)
12+
* feat: Add `Janet` support (#22)
1213

1314
## 0.1.0
1415
> Released Jun 22, 2024

README.md

Lines changed: 27 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -20,33 +20,33 @@ the tree-sitter syntax tree.
2020
<!-- markdown-toc start - Don't edit this section. Run M-x markdown-toc-refresh-toc -->
2121
**Table of Contents**
2222

23-
- [💾 Installation](#💾-installation)
24-
- [🔍 Method 1. with `straight.el` and `use-package`:](#🔍-method-1-with-straightel-and-use-package)
25-
- [🔍 Method 2. Manual](#🔍-method-2-manual)
26-
- [🖥 Usage](#🖥-usage)
27-
- [📇 Commands](#📇-commands)
28-
- [🔨 Supported languages](#🔨-supported-languages)
29-
- [🚀 Add support for non-ts modes](#🚀-Add-support-for-non-ts-modes)
30-
- [📝 Customization](#📝-customization)
31-
- [⚪ Folding on new nodes](#-folding-on-new-nodes)
32-
- [❔ Example](#-example)
23+
- [💾 Installation](#-installation)
24+
- [🔍 Method 1. with `straight.el` and `use-package`:](#-method-1-with-straightel-and-use-package)
25+
- [🔍 Method 2. Manual](#-method-2-manual)
26+
- [🖥 Usage](#-usage)
27+
- [📇 Commands](#-commands)
28+
- [🔨 Supported languages](#-supported-languages)
29+
- [🚀 Add support for non-ts modes](#-add-support-for-non-ts-modes)
30+
- [📝 Customization](#-customization)
31+
- [⚪ Folding on new nodes](#-folding-on-new-nodes)
32+
- [❔ Example](#-example)
3333
- [↔ Offset](#-offset)
34-
- [🔍 Writing new fold functions](#🔍-writing-new-fold-functions)
35-
- [🔌 Plugins](#🔌-plugins)
36-
- [⚖ Indicators Mode](#-indicators-mode)
37-
- [💾 Installation](#💾-installation-1)
38-
- [🖥 Usage](#🖥-usage-1)
39-
- [📝 Summary](#📝-summary)
40-
- [🖥 Usage](#🖥-usage-2)
41-
- [📝 Customization](#📝-customization-1)
42-
- [🌫 Line-Comment folding](#🌫-line-comment-folding)
43-
- [🖥 Usage](#🖥-usage-3)
44-
- [🔰 Contribute](#🔰-contribute)
45-
- [🔬 Development](#🔬-development)
46-
- [❓ How to add a folding parser?](#-how-to-add-a-folding-parser)
47-
- [🔍 Where can I look for tree-sitter node?](#🔍-where-can-i-look-for-tree-sitter-node)
48-
- [❓ How to create a summary parser?](#-how-to-create-a-summary-parser)
49-
- [⚜️ License](#⚜️-license)
34+
- [🔍 Writing new fold functions](#-writing-new-fold-functions)
35+
- [🔌 Plugins](#-plugins)
36+
- [⚖ Indicators Mode](#-indicators-mode)
37+
- [💾 Installation](#-installation-1)
38+
- [🖥 Usage](#-usage-1)
39+
- [📝 Summary](#-summary)
40+
- [🖥 Usage](#-usage-2)
41+
- [📝 Customization](#-customization-1)
42+
- [🌫 Line-Comment folding](#-line-comment-folding)
43+
- [🖥 Usage](#-usage-3)
44+
- [🔰 Contribute](#-contribute)
45+
- [🔬 Development](#-development)
46+
- [❓ How to add a folding parser?](#-how-to-add-a-folding-parser)
47+
- [🔍 Where can I look for tree-sitter node?](#-where-can-i-look-for-tree-sitter-node)
48+
- [❓ How to create a summary parser?](#-how-to-create-a-summary-parser)
49+
- [⚜️ License](#-license)
5050

5151
<!-- markdown-toc end -->
5252

@@ -122,7 +122,7 @@ These languages are fairly complete:
122122
- Fish
123123
- GDScript / Gleam / GLSL / Go / Groovy (Jenkinsfile)
124124
- Haskell / Haxe / HEEx / HLSL / HTML
125-
- Jai / Java / JavaScript / JSX / JSON / Jsonnet / Julia
125+
- Jai / Janet / Java / JavaScript / JSX / JSON / Jsonnet / Julia
126126
- Kotlin
127127
- LaTex / Lisp / Lua
128128
- Make / MATLAB / Markdown / Mermaid

treesit-fold-parsers.el

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -348,6 +348,14 @@
348348
(block_comment . treesit-fold-range-block-comment)
349349
(inline_comment . treesit-fold-range-c-like-comment)))
350350

351+
(defun treesit-fold-parsers-janet ()
352+
"Rule set for Janet."
353+
'((par_tup_lit . treesit-fold-range-seq)
354+
(sqr_tup_lit . treesit-fold-range-seq)
355+
(comment
356+
. (lambda (node offset)
357+
(treesit-fold-range-line-comment node offset "#")))))
358+
351359
(defun treesit-fold-parsers-java ()
352360
"Rule set for Java."
353361
'((switch_block . treesit-fold-range-seq)

treesit-fold-summary.el

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -223,6 +223,7 @@ type of content by checking the word boundary's existence."
223223
(hlsl-mode . treesit-fold-summary-c)
224224
(html-mode . treesit-fold-summary-xml)
225225
(jai-mode . treesit-fold-summary-c)
226+
(janet-mode . treesit-fold-summary-ruby-doc)
226227
(java-mode . treesit-fold-summary-javadoc)
227228
(javascript-mode . treesit-fold-summary-javadoc)
228229
(js-mode . treesit-fold-summary-javadoc)

treesit-fold.el

Lines changed: 50 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,7 @@
114114
(html-mode . ,(treesit-fold-parsers-html))
115115
(html-ts-mode . ,(treesit-fold-parsers-html))
116116
(jai-mode . ,(treesit-fold-parsers-jai))
117+
(janet-mode . ,(treesit-fold-parsers-janet))
117118
(java-mode . ,(treesit-fold-parsers-java))
118119
(java-ts-mode . ,(treesit-fold-parsers-java))
119120
(javascript-mode . ,(treesit-fold-parsers-javascript))
@@ -478,87 +479,87 @@ current `major-mode'.
478479
If no NODE is found in point, do nothing."
479480
(interactive)
480481
(treesit-fold--ensure-ts
481-
(when-let* ((node (or node (treesit-fold--foldable-node-at-pos))))
482-
;; make sure I do not create multiple overlays for the same fold
483-
(when-let* ((ov (treesit-fold-overlay-at node)))
484-
(delete-overlay ov))
485-
(when-let* ((range (treesit-fold--get-fold-range node))
486-
(ov (treesit-fold--create-overlay range)))
487-
(run-hooks 'treesit-fold-on-fold-hook)
488-
ov))))
482+
(when-let* ((node (or node (treesit-fold--foldable-node-at-pos))))
483+
;; make sure I do not create multiple overlays for the same fold
484+
(when-let* ((ov (treesit-fold-overlay-at node)))
485+
(delete-overlay ov))
486+
(when-let* ((range (treesit-fold--get-fold-range node))
487+
(ov (treesit-fold--create-overlay range)))
488+
(run-hooks 'treesit-fold-on-fold-hook)
489+
ov))))
489490

490491
;;;###autoload
491492
(defun treesit-fold-open ()
492493
"Open the fold of the syntax node in which `point' resides.
493494
If the current node is not folded or not foldable, do nothing."
494495
(interactive)
495496
(treesit-fold--ensure-ts
496-
(when-let* ((node (treesit-fold--foldable-node-at-pos))
497-
(ov (treesit-fold-overlay-at node)))
498-
(delete-overlay ov)
499-
(run-hooks 'treesit-fold-on-fold-hook)
500-
t)))
497+
(when-let* ((node (treesit-fold--foldable-node-at-pos))
498+
(ov (treesit-fold-overlay-at node)))
499+
(delete-overlay ov)
500+
(run-hooks 'treesit-fold-on-fold-hook)
501+
t)))
501502

502503
;;;###autoload
503504
(defun treesit-fold-open-recursively ()
504505
"Open recursively folded syntax NODE that are contained in the node at point."
505506
(interactive)
506507
(treesit-fold--ensure-ts
507-
(when-let* ((node (treesit-fold--foldable-node-at-pos))
508-
(beg (treesit-node-start node))
509-
(end (treesit-node-end node))
510-
(nodes (treesit-fold--overlays-in 'invisible 'treesit-fold beg end)))
511-
(mapc #'delete-overlay nodes)
512-
(run-hooks 'treesit-fold-on-fold-hook)
513-
t)))
508+
(when-let* ((node (treesit-fold--foldable-node-at-pos))
509+
(beg (treesit-node-start node))
510+
(end (treesit-node-end node))
511+
(nodes (treesit-fold--overlays-in 'invisible 'treesit-fold beg end)))
512+
(mapc #'delete-overlay nodes)
513+
(run-hooks 'treesit-fold-on-fold-hook)
514+
t)))
514515

515516
;;;###autoload
516517
(defun treesit-fold-close-all ()
517518
"Fold all foldable syntax nodes in the buffer."
518519
(interactive)
519520
(treesit-fold--ensure-ts
520-
(let (nodes)
521-
(let* ((treesit-fold-indicators-mode)
522-
(treesit-fold-on-fold-hook)
523-
(node (treesit-buffer-root-node))
524-
(patterns (seq-mapcat (lambda (fold-range) `((,(car fold-range)) @name))
525-
(alist-get major-mode treesit-fold-range-alist)))
526-
(query (treesit-query-compile (treesit-node-language node) patterns)))
527-
(setq nodes (treesit-query-capture node query)
528-
nodes (cl-remove-if (lambda (node)
529-
;; Removed if on same line
530-
(treesit-fold--node-range-on-same-line (cdr node)))
531-
nodes))
532-
(thread-last nodes
533-
(mapcar #'cdr)
534-
(mapc #'treesit-fold-close)))
535-
(when nodes
536-
(run-hooks 'treesit-fold-on-fold-hook)
537-
t))))
521+
(let (nodes)
522+
(let* ((treesit-fold-indicators-mode)
523+
(treesit-fold-on-fold-hook)
524+
(node (treesit-buffer-root-node))
525+
(patterns (seq-mapcat (lambda (fold-range) `((,(car fold-range)) @name))
526+
(alist-get major-mode treesit-fold-range-alist)))
527+
(query (treesit-query-compile (treesit-node-language node) patterns)))
528+
(setq nodes (treesit-query-capture node query)
529+
nodes (cl-remove-if (lambda (node)
530+
;; Removed if on same line
531+
(treesit-fold--node-range-on-same-line (cdr node)))
532+
nodes))
533+
(thread-last nodes
534+
(mapcar #'cdr)
535+
(mapc #'treesit-fold-close)))
536+
(when nodes
537+
(run-hooks 'treesit-fold-on-fold-hook)
538+
t))))
538539

539540
;;;###autoload
540541
(defun treesit-fold-open-all ()
541542
"Unfold all syntax nodes in the buffer."
542543
(interactive)
543544
(treesit-fold--ensure-ts
544-
(when-let* ((nodes (treesit-fold--overlays-in 'invisible 'treesit-fold)))
545-
(mapc #'delete-overlay nodes)
546-
(run-hooks 'treesit-fold-on-fold-hook)
547-
t)))
545+
(when-let* ((nodes (treesit-fold--overlays-in 'invisible 'treesit-fold)))
546+
(mapc #'delete-overlay nodes)
547+
(run-hooks 'treesit-fold-on-fold-hook)
548+
t)))
548549

549550
;;;###autoload
550551
(defun treesit-fold-toggle ()
551552
"Toggle the syntax node at `point'.
552553
If the current syntax node is not foldable, do nothing."
553554
(interactive)
554555
(treesit-fold--ensure-ts
555-
(if-let* ((node (treesit-fold--foldable-node-at-pos (point)))
556-
(ov (treesit-fold-overlay-at node)))
557-
(progn
558-
(delete-overlay ov)
559-
(run-hooks 'treesit-fold-on-fold-hook)
560-
t)
561-
(treesit-fold-close))))
556+
(if-let* ((node (treesit-fold--foldable-node-at-pos (point)))
557+
(ov (treesit-fold-overlay-at node)))
558+
(progn
559+
(delete-overlay ov)
560+
(run-hooks 'treesit-fold-on-fold-hook)
561+
t)
562+
(treesit-fold-close))))
562563

563564
(defun treesit-fold--after-command (&rest _)
564565
"Function call after interactive commands."

0 commit comments

Comments
 (0)