Skip to content

Commit 2677370

Browse files
committed
Fix semantic indentation of quoted functions
Fixes an error where quoted functions would not align correctly with semantic indentation. Adds an example test and updates the changelog
1 parent 0e6816e commit 2677370

File tree

3 files changed

+13
-5
lines changed

3 files changed

+13
-5
lines changed

CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
- [#38]: Add support for `in-ns` forms in `clojure-ts-find-ns`.
66
- [#46]: Fix missing `comment-add` variable in `clojure-ts-mode-variables` mentioned in [#26]
77
- Add imenu support for `deftest` definitions.
8+
- Fix semantic indentation of quoted functions
89

910
## 0.2.2 (2024-02-16)
1011

clojure-ts-mode.el

+10-5
Original file line numberDiff line numberDiff line change
@@ -520,6 +520,10 @@ with the markdown_inline grammar."
520520
"Return non-nil if NODE is a Clojure keyword."
521521
(string-equal "kwd_lit" (treesit-node-type node)))
522522

523+
(defun clojure-ts--var-node-p (node)
524+
"Return non-nil if NODE is a var (eg. #\\'foo)."
525+
(string-equal "var_quoting_lit" (treesit-node-type node)))
526+
523527
(defun clojure-ts--named-node-text (node)
524528
"Gets the name of a symbol or keyword NODE.
525529
This does not include the NODE's namespace."
@@ -603,13 +607,13 @@ Includes a dispatch value when applicable (defmethods)."
603607
"Return non-nil if NODE is a ns form."
604608
(clojure-ts--definition-node-p "ns" node))
605609

606-
(defvar clojure-ts--variable-type-regexp
610+
(defvar clojure-ts--variable-definition-type-regexp
607611
(rx string-start (or "def" "defonce") string-end)
608612
"Regular expression for matching definition nodes that resemble variables.")
609613

610-
(defun clojure-ts--variable-node-p (node)
614+
(defun clojure-ts--variable-definition-node-p (node)
611615
"Return non-nil if NODE is a def or defonce form."
612-
(clojure-ts--definition-node-match-p clojure-ts--variable-type-regexp node))
616+
(clojure-ts--definition-node-match-p clojure-ts--variable-definition-type-regexp node))
613617

614618
(defvar clojure-ts--class-type-regexp
615619
(rx string-start (or "deftype" "defrecord" "defstruct") string-end)
@@ -634,7 +638,7 @@ Includes a dispatch value when applicable (defmethods)."
634638
;; Used instead of treesit-defun-name-function.
635639
clojure-ts--function-node-name)
636640
("Macro" "list_lit" clojure-ts--defmacro-node-p)
637-
("Variable" "list_lit" clojure-ts--variable-node-p)
641+
("Variable" "list_lit" clojure-ts--variable-definition-node-p)
638642
("Interface" "list_lit" clojure-ts--interface-node-p)
639643
("Class" "list_lit" clojure-ts--class-node-p))
640644
"The value for `treesit-simple-imenu-settings'.
@@ -722,7 +726,8 @@ https://github.com/weavejester/cljfmt/blob/fb26b22f569724b05c93eb2502592dfc2de89
722726
(not (treesit-node-eq (treesit-node-child parent 1 t) node))
723727
(let ((first-child (treesit-node-child parent 0 t)))
724728
(or (clojure-ts--symbol-node-p first-child)
725-
(clojure-ts--keyword-node-p first-child)))))
729+
(clojure-ts--keyword-node-p first-child)
730+
(clojure-ts--var-node-p first-child)))))
726731

727732
(defun clojure-ts--match-expression-in-body (_node parent _bol)
728733
"Match NODE if it is an expression used in a body argument.

test/samples/indentation.clj

+2
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,8 @@
6060
(clojure.core/filter even?
6161
(range 1 10))
6262

63+
(#'filter even?
64+
(range 10))
6365

6466
(filter
6567
even?

0 commit comments

Comments
 (0)