From d0989b8206a1e7bbbbf4960dfc33ca96276d0844 Mon Sep 17 00:00:00 2001 From: Jason Jackson <550839+jasonjckn@users.noreply.github.com> Date: Mon, 26 Oct 2026 01:57:52 -0700 Subject: [PATCH] Highlight extra def forms as keywords at font-lock level 4 The rules built from `clojure-ts-extra-def-forms` are appended after the built-in font-lock queries, and without :override a later rule can't replace a face an earlier one already set. At level 4 the `function` feature matches the head of every list, so the head of an extra def form (`defelem`, `>defn`, ...) ends up in font-lock-function-call-face instead of font-lock-keyword-face. `defn` itself is unaffected because the `builtin` rule, which comes before `function`, already colors it. Give the extra `definition` rule :override t, like the `doc` rule that is computed next to it. --- CHANGELOG.md | 1 + clojure-ts-mode.el | 1 + test/clojure-ts-mode-font-lock-test.el | 13 ++++++++++++- 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b11d09a..76c4ff0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -30,6 +30,7 @@ - [#156](https://github.com/clojure-emacs/clojure-ts-mode/pull/156): Align `clojure.test/are` like `are`: `clojure-ts-align-cond-forms` listed the nonexistent `clojure.core/are` instead. - [#157](https://github.com/clojure-emacs/clojure-ts-mode/pull/157): Respect changes to `clojure-ts-align-binding-forms` and `clojure-ts-align-cond-forms` made after the package loads, including buffer-local ones from `.dir-locals.el`. - [#159](https://github.com/clojure-emacs/clojure-ts-mode/pull/159): Fix `indent-region` leaving the forms at the end of the region unaligned when indenting makes the text longer. +- [#160](https://github.com/clojure-emacs/clojure-ts-mode/pull/160): Highlight forms in `clojure-ts-extra-def-forms` as keywords at `treesit-font-lock-level` 4, where they were colored as function calls. ## 0.6.0 (2025-12-02) diff --git a/clojure-ts-mode.el b/clojure-ts-mode.el index 94700be..b8a1855 100644 --- a/clojure-ts-mode.el +++ b/clojure-ts-mode.el @@ -827,6 +827,7 @@ updated indentation rules are always precalculated." (treesit-font-lock-rules :feature 'definition :language 'clojure + :override t `(((list_lit :anchor [(comment) (meta_lit) (old_meta_lit)] :* :anchor (sym_lit (sym_name) @font-lock-keyword-face) :anchor [(comment) (meta_lit) (old_meta_lit)] :* diff --git a/test/clojure-ts-mode-font-lock-test.el b/test/clojure-ts-mode-font-lock-test.el index 7401e6c..6dd70b1 100644 --- a/test/clojure-ts-mode-font-lock-test.el +++ b/test/clojure-ts-mode-font-lock-test.el @@ -510,7 +510,18 @@ https://github.com/tree-sitter/tree-sitter/issues/5759." (expect (get-text-property 10 'face) :to-equal 'font-lock-function-name-face) (expect (get-text-property 25 'face) - :to-equal 'font-lock-doc-face)))) + :to-equal 'font-lock-doc-face))) + + (it "should highlight extra def forms as keywords at font-lock level 4" + (with-clojure-ts-buffer "(defelem file-upload [name] name)" + (setopt clojure-ts-extra-def-forms '("defelem")) + (let ((treesit-font-lock-level 4)) + (clojure-ts-mode)) + (font-lock-ensure) + (expect (get-text-property 2 'face) + :to-equal 'font-lock-keyword-face) + (expect (get-text-property 10 'face) + :to-equal 'font-lock-function-name-face)))) ;;;; Docstrings in various def forms