33; ; Copyright (C) 2020 Tuấn-Anh Nguyễn
44; ;
55; ; Author: Jorge Javier Araya Navarro <[email protected] >6- ; ; Homepage: https://github.com/ubolonton/emacs-tree-sitter
7- ; ; Version: 0.4.0
8- ; ; Package-Requires: ((emacs "25.1"))
9- ; ; License: MIT
106
117; ;; Commentary:
128
13- ; ; This file contains other debug utilities for building queries and see
14- ; ; results in a target buffer
9+ ; ; This file contains other debug utilities for building queries and see results
10+ ; ; in a target buffer.
1511
16- ; ; Code:
12+ ; ;; Code:
1713
1814(require 'scheme )
19- (require 'cl-lib )
2015(require 'tree-sitter )
2116
17+ (eval-when-compile
18+ (require 'cl-lib ))
19+
2220(defgroup tree-sitter-query nil
23- " tree-sitter playground for GNU Emacs ."
21+ " Tree-Sitter playground."
2422 :group 'tree-sitter )
2523
2624(define-derived-mode tree-sitter-query-mode prog-mode " ts-query-builder"
27- " Major mode for building tree-sitter queries and testing them live"
25+ " Major mode for building tree-sitter queries and testing them live. "
2826 :syntax-table scheme-mode-syntax-table
2927 :abbrev-table scheme-mode-abbrev-table)
3028
3836 '((t :foreground " #000"
3937 :background " #00bfff"
4038 :weight bold ))
41- " face for match highlight"
39+ " Face for highlight captures in matches. "
4240 :group 'tree-sitter-query )
4341
4442(defun tree-sitter-query--highlight-capture (capture )
45- " Highlight a CAPTURE match in the current buffer."
43+ " Highlight CAPTURE in the current buffer."
4644 (pcase-let* ((`(, capture-name . , captured-node ) capture)
4745 (`(, node-start . , node-end ) (ts-node-position-range captured-node))
48- (overlay-added (make-overlay node-start node-end)))
49- ; ; ensure it is deleted automatically when the overlay becomes empty
50- (overlay-put overlay-added 'evaporate t )
51- ; ; set the match-face as the face of the overlay
52- (overlay-put overlay-added 'face 'tree-sitter-query-match )
53- ; ; put the name of the capture in the help-echo, if any
46+ (overlay (make-overlay node-start node-end)))
47+ ; ; Ensure the overlay is deleted when it becomes empty.
48+ (overlay-put overlay 'evaporate t )
49+ (overlay-put overlay 'face 'tree-sitter-query-match )
50+ ; ; Use the capture's name as the mouseover tooltip.
5451 (unless (string= capture-name " " )
55- (overlay-put overlay-added 'help-echo capture-name))))
52+ (overlay-put overlay 'help-echo capture-name))))
5653
5754(defun tree-sitter-query--eval-query (patterns )
58- " Evaluate a query PATTERNS against the target buffer."
55+ " Evaluate query PATTERNS against the target buffer."
5956 (with-current-buffer tree-sitter-query--target-buffer
60- ; ; clean the target buffer of overlays
6157 (remove-overlays )
6258 (let* ((query (ts-make-query tree-sitter-language patterns))
6359 (root-node (ts-root-node tree-sitter-tree))
6460 (captures-list (ts-query-captures query root-node)))
6561 (if (= (length captures-list) 0 )
66- (message " no matches found" )
67- ; ; iterate all matches and highlight them with an underline
62+ (message " No matches found" )
63+ ; ; Highlight captures.
6864 (cl-loop
6965 for captures across captures-list
7066 do
7167 (cl-loop
7268 for capture on captures
7369 do (tree-sitter-query--highlight-capture capture)))))))
7470
75- (defun tree-sitter-query--after-change (&rest args )
76- " Run evaluation of pattern in current buffer for every change made by the user, ignoring ARGS ."
71+ (defun tree-sitter-query--after-change (&rest _args )
72+ " Run query patterns against the target buffer and update highlighted texts ."
7773 (with-current-buffer (get-buffer tree-sitter-query-builder-buffer-name)
78- (let ((pattern (buffer-string )))
74+ (let ((patterns (buffer-string )))
7975 (with-demoted-errors " Error: %S"
80- (tree-sitter-query--eval-query pattern )))))
76+ (tree-sitter-query--eval-query patterns )))))
8177
8278(defun tree-sitter-query--clean-target-buffer ()
83- " Remove all overlays if the builder buffer happens to be killed ."
79+ " Remove all overlays from the target buffer."
8480 (with-current-buffer tree-sitter-query--target-buffer
8581 (remove-overlays ))
8682 (setq tree-sitter-query--target-buffer nil ))
8985(defun tree-sitter-query-builder ()
9086 " Provide means for developers to write and test tree-sitter queries.
9187
92- The buffer on focus when the command is called is set as the target buffer"
88+ The buffer on focus when the command is called is set as the target buffer. "
9389 (interactive )
9490 (let* ((target-buffer (current-buffer ))
9591 (builder-buffer (get-buffer-create tree-sitter-query-builder-buffer-name))
@@ -113,7 +109,7 @@ The buffer on focus when the command is called is set as the target buffer"
113109 (add-hook 'after-change-functions 'tree-sitter-query--after-change nil :local )
114110 (add-hook 'kill-buffer-hook 'tree-sitter-query--clean-target-buffer nil :local ))
115111 (setf tree-sitter-query--target-buffer target-buffer)
116- ; ; switch focus to the query builder window
112+ ; ; Switch focus to the query builder window.
117113 (select-window (get-buffer-window builder-buffer))))
118114
119115(provide 'tree-sitter-query )
0 commit comments