@@ -1570,7 +1570,10 @@ BOUND bounds the whitespace search."
15701570 (when-let* ((cur-sexp (treesit-node-first-child-for-pos root-node (point ) t )))
15711571 (goto-char (treesit-node-start cur-sexp))
15721572 (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 ))
15741577 (treesit-end-of-thing 'sexp 1 'restricted ))
15751578 (when (looking-at-p " ," )
15761579 (forward-char ))
@@ -1603,6 +1606,33 @@ BOUND bounds the whitespace search."
16031606 sexp-end
16041607 t )))
16051608
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+
16061636(defun clojure-ts--get-nodes-to-align (beg end )
16071637 " Return a plist of nodes data for alignment.
16081638
@@ -1617,31 +1647,15 @@ have changed."
16171647 ; ; By default `treesit-query-capture' captures all nodes that cross the range.
16181648 ; ; We need to restrict it to only nodes inside of the range.
16191649 (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
16441654 (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 )
16451659 ; ; When first node is reindented, all other nodes become
16461660 ; ; outdated. Executing the entire query everytime is very
16471661 ; ; expensive, instead we use markers for every captured node to
0 commit comments