|
6 | 6 | ;; Maintainer: Danny Freeman <[email protected]> |
7 | 7 | ;; URL: http://github.com/clojure-emacs/clojure-ts-mode |
8 | 8 | ;; Keywords: languages clojure clojurescript lisp |
9 | | -;; Version: 0.1.2 |
| 9 | +;; Version: 0.1.3 |
10 | 10 | ;; Package-Requires: ((emacs "29")) |
11 | 11 |
|
12 | 12 | ;; This file is not part of GNU Emacs. |
|
61 | 61 | (declare-function treesit-node-child "treesit.c") |
62 | 62 | (declare-function treesit-node-child-by-field-name "treesit.c") |
63 | 63 |
|
| 64 | +(defgroup clojure-ts nil |
| 65 | + "Major mode for editing Clojure code with tree-sitter." |
| 66 | + :prefix "clojure-ts-" |
| 67 | + :group 'languages |
| 68 | + :link '(url-link :tag "GitHub" "https://github.com/clojure-emacs/clojure-ts-mode") |
| 69 | + :link '(emacs-commentary-link :tag "Commentary" "clojure-mode")) |
| 70 | + |
64 | 71 | (defconst clojure-ts-mode-version |
65 | 72 | (eval-when-compile |
66 | 73 | (lm-version (or load-file-name buffer-file-name))) |
@@ -258,7 +265,8 @@ Only intended for use at development time.") |
258 | 265 | "defstruct") |
259 | 266 | line-end)) |
260 | 267 |
|
261 | | -(defvar clojure-ts--font-lock-settings |
| 268 | +(defun clojure-ts--font-lock-settings () |
| 269 | + "Return font lock settings suitable for use in `treesit-font-lock-settings'." |
262 | 270 | (treesit-font-lock-rules |
263 | 271 | :feature 'string |
264 | 272 | :language 'clojure |
@@ -375,12 +383,15 @@ Only intended for use at development time.") |
375 | 383 | :feature 'comment |
376 | 384 | :language 'clojure |
377 | 385 | :override t |
378 | | - '((comment) @font-lock-comment-face |
| 386 | + `((comment) @font-lock-comment-face |
379 | 387 | (dis_expr |
380 | 388 | marker: "#_" @font-lock-comment-delimiter-face |
381 | 389 | value: _ @font-lock-comment-face) |
382 | | - ((list_lit :anchor (sym_lit (sym_name) @font-lock-comment-delimiter-face)) |
383 | | - (:match "^comment$" @font-lock-comment-delimiter-face))) |
| 390 | + (,(append |
| 391 | + '(list_lit :anchor (sym_lit) @font-lock-comment-delimiter-face) |
| 392 | + (when clojure-ts-comment-macro-font-lock-body |
| 393 | + '(_ :* @font-lock-comment-face))) |
| 394 | + (:match "^\\(\\(clojure.core/\\)?comment\\)$" @font-lock-comment-delimiter-face))) |
384 | 395 |
|
385 | 396 | :feature 'deref ;; not part of clojure-mode, but a cool idea? |
386 | 397 | :language 'clojure |
@@ -522,6 +533,18 @@ Includes a dispatch value when applicable (defmethods)." |
522 | 533 | By default `treesit-defun-name-function' is used to extract definition names. |
523 | 534 | See `clojure-ts--standard-definition-node-name' for the implementation used.") |
524 | 535 |
|
| 536 | +(defcustom clojure-ts-comment-macro-font-lock-body nil |
| 537 | + "Highlight the entire body of a comment macro as a comment. |
| 538 | +
|
| 539 | +When set to a non-nil value, applies the comment font-locking face to the entire |
| 540 | +body of comment macros. |
| 541 | +When nil (the default), the body of comment macros uses default font-locking |
| 542 | +rules for whatever expressions are in the body, except for the comment symbol |
| 543 | +itself." |
| 544 | + :safe #'booleanp |
| 545 | + :type 'boolean |
| 546 | + :package-version '(clojure-ts-mode . "0.1.3")) |
| 547 | + |
525 | 548 | (defvar clojure-ts--fixed-indent-rules |
526 | 549 | ;; This is in contrast to semantic |
527 | 550 | ;; fixed-indent-rules come from https://tonsky.me/blog/clojurefmt/ |
@@ -585,7 +608,7 @@ See `clojure-ts--standard-definition-node-name' for the implementation used.") |
585 | 608 | (setq-local comment-start ";") |
586 | 609 | (when (treesit-ready-p 'clojure) |
587 | 610 | (treesit-parser-create 'clojure) |
588 | | - (setq-local treesit-font-lock-settings clojure-ts--font-lock-settings |
| 611 | + (setq-local treesit-font-lock-settings (clojure-ts--font-lock-settings) |
589 | 612 | treesit-defun-prefer-top-level t |
590 | 613 | treesit-defun-tactic 'top-level |
591 | 614 | treesit-defun-type-regexp (rx (or "list_lit" "vec_lit" "map_lit")) |
|
0 commit comments