@@ -1570,7 +1570,10 @@ BOUND bounds the whitespace search."
1570
1570
(when-let* ((cur-sexp (treesit-node-first-child-for-pos root-node (point ) t )))
1571
1571
(goto-char (treesit-node-start cur-sexp))
1572
1572
(if (clojure-ts--metadata-node-p cur-sexp)
1573
- (treesit-end-of-thing 'sexp 2 'restricted )
1573
+ (progn
1574
+ (treesit-end-of-thing 'sexp 1 'restricted )
1575
+ (just-one-space )
1576
+ (treesit-end-of-thing 'sexp 1 'restricted ))
1574
1577
(treesit-end-of-thing 'sexp 1 'restricted ))
1575
1578
(when (looking-at-p " ," )
1576
1579
(forward-char ))
@@ -1603,6 +1606,33 @@ BOUND bounds the whitespace search."
1603
1606
sexp-end
1604
1607
t )))
1605
1608
1609
+ (defvar clojure-ts--align-query
1610
+ (treesit-query-compile 'clojure
1611
+ (append
1612
+ `(((map_lit) @map)
1613
+ ((ns_map_lit) @ns-map)
1614
+ ((list_lit
1615
+ ((sym_lit) @sym
1616
+ (:match ,(clojure-ts-symbol-regexp clojure-ts-align-binding-forms) @sym))
1617
+ (vec_lit) @bindings-vec))
1618
+ ((list_lit
1619
+ ((sym_lit) @sym
1620
+ (:match ,(clojure-ts-symbol-regexp clojure-ts-align-cond-forms) @sym)))
1621
+ @cond)
1622
+ ((anon_fn_lit
1623
+ ((sym_lit) @sym
1624
+ (:match ,(clojure-ts-symbol-regexp clojure-ts-align-binding-forms) @sym))
1625
+ (vec_lit) @bindings-vec))
1626
+ ((anon_fn_lit
1627
+ ((sym_lit) @sym
1628
+ (:match ,(clojure-ts-symbol-regexp clojure-ts-align-cond-forms) @sym)))
1629
+ @cond)))))
1630
+
1631
+ (defvar clojure-ts--align-reader-conditionals-query
1632
+ (treesit-query-compile 'clojure
1633
+ '(((read_cond_lit) @read-cond)
1634
+ ((splicing_read_cond_lit) @read-cond))))
1635
+
1606
1636
(defun clojure-ts--get-nodes-to-align (beg end )
1607
1637
" Return a plist of nodes data for alignment.
1608
1638
@@ -1617,31 +1647,15 @@ have changed."
1617
1647
; ; By default `treesit-query-capture' captures all nodes that cross the range.
1618
1648
; ; We need to restrict it to only nodes inside of the range.
1619
1649
(let* ((region-node (clojure-ts--region-node beg end))
1620
- (query (treesit-query-compile 'clojure
1621
- (append
1622
- `(((map_lit) @map)
1623
- ((ns_map_lit) @ns-map)
1624
- ((list_lit
1625
- ((sym_lit) @sym
1626
- (:match ,(clojure-ts-symbol-regexp clojure-ts-align-binding-forms) @sym))
1627
- (vec_lit) @bindings-vec))
1628
- ((list_lit
1629
- ((sym_lit) @sym
1630
- (:match ,(clojure-ts-symbol-regexp clojure-ts-align-cond-forms) @sym)))
1631
- @cond)
1632
- ((anon_fn_lit
1633
- ((sym_lit) @sym
1634
- (:match ,(clojure-ts-symbol-regexp clojure-ts-align-binding-forms) @sym))
1635
- (vec_lit) @bindings-vec))
1636
- ((anon_fn_lit
1637
- ((sym_lit) @sym
1638
- (:match ,(clojure-ts-symbol-regexp clojure-ts-align-cond-forms) @sym)))
1639
- @cond))
1640
- (when clojure-ts-align-reader-conditionals
1641
- '(((read_cond_lit) @read-cond)
1642
- ((splicing_read_cond_lit) @read-cond)))))))
1643
- (thread-last (treesit-query-capture region-node query beg end)
1650
+ (nodes (append (treesit-query-capture region-node clojure-ts--align-query beg end)
1651
+ (when clojure-ts-align-reader-conditionals
1652
+ (treesit-query-capture region-node clojure-ts--align-reader-conditionals-query beg end)))))
1653
+ (thread-last nodes
1644
1654
(seq-remove (lambda (elt ) (eq (car elt) 'sym )))
1655
+ ; ; Reverse the result to align the most deeply nested nodes
1656
+ ; ; first. This way we can prevent breaking alignment of outer
1657
+ ; ; nodes.
1658
+ (seq-reverse )
1645
1659
; ; When first node is reindented, all other nodes become
1646
1660
; ; outdated. Executing the entire query everytime is very
1647
1661
; ; expensive, instead we use markers for every captured node to
0 commit comments