@@ -1412,36 +1412,37 @@ if NODE has metadata and its parent has type NODE-TYPE."
14121412(defun clojure-ts--semantic-indent-rules ()
14131413 " Return a list of indentation rules for `treesit-simple-indent-rules' ."
14141414 `((clojure
1415- ((parent-is " source" ) parent-bol 0 )
1415+ ((parent-is " ^ source$ " ) parent-bol 0 )
14161416 (clojure-ts--match-docstring parent 0 )
14171417 ; ; Collections items with metadata.
14181418 ; ;
14191419 ; ; This should be before `clojure-ts--match-with-metadata' , otherwise they
14201420 ; ; will never be matched.
1421- (,(clojure-ts--match-collection-item-with-metadata " vec_lit" ) grand-parent 1 )
1422- (,(clojure-ts--match-collection-item-with-metadata " map_lit" ) grand-parent 1 )
1423- (,(clojure-ts--match-collection-item-with-metadata " set_lit" ) grand-parent 2 )
1421+ (,(clojure-ts--match-collection-item-with-metadata " ^ vec_lit$ " ) grand-parent 1 )
1422+ (,(clojure-ts--match-collection-item-with-metadata " ^ map_lit$ " ) grand-parent 1 )
1423+ (,(clojure-ts--match-collection-item-with-metadata " ^ set_lit$ " ) grand-parent 2 )
14241424 ; ;
14251425 ; ; If we enable this rule for lists, it will break many things.
14261426 ; ; (,(clojure-ts--match-collection-item-with-metadata "list_lit") grand-parent 1)
14271427 ; ;
14281428 ; ; All other forms with metadata.
14291429 (clojure-ts--match-with-metadata parent 0 )
14301430 ; ; Literal Sequences
1431- ((parent-is " vec_lit" ) parent 1 ) ; ; https://guide.clojure.style/#bindings-alignment
1432- ((parent-is " map_lit" ) parent 1 ) ; ; https://guide.clojure.style/#map-keys-alignment
1433- ((parent-is " set_lit" ) parent 2 )
1434- ((parent-is " splicing_read_cond_lit" ) parent 4 )
1435- ((parent-is " read_cond_lit" ) parent 3 )
1436- ((parent-is " tagged_or_ctor_lit" ) parent 0 )
1431+ ((parent-is " ^vec_lit$" ) parent 1 ) ; ; https://guide.clojure.style/#bindings-alignment
1432+ ((parent-is " ^map_lit$" ) parent 1 ) ; ; https://guide.clojure.style/#map-keys-alignment
1433+ ((parent-is " ^set_lit$" ) parent 2 )
1434+ ((parent-is " ^splicing_read_cond_lit$" ) parent 4 )
1435+ ((parent-is " ^read_cond_lit$" ) parent 3 )
1436+ ((parent-is " ^tagged_or_ctor_lit$" ) parent 0 )
1437+ ((parent-is " ^ns_map_lit$" ) (nth-sibling 2 ) 1 )
14371438 ; ; https://guide.clojure.style/#body-indentation
14381439 (clojure-ts--match-form-body clojure-ts--anchor-parent-opening-paren 2 )
14391440 ; ; https://guide.clojure.style/#threading-macros-alignment
14401441 (clojure-ts--match-threading-macro-arg prev-sibling 0 )
14411442 ; ; https://guide.clojure.style/#vertically-align-fn-args
14421443 (clojure-ts--match-function-call-arg ,(clojure-ts--anchor-nth-sibling 1 ) 0 )
14431444 ; ; https://guide.clojure.style/#one-space-indent
1444- ((parent-is " list_lit" ) parent 1 ))))
1445+ ((parent-is " ^ list_lit$ " ) parent 1 ))))
14451446
14461447(defun clojure-ts--configured-indent-rules ()
14471448 " Gets the configured choice of indent rules."
@@ -1640,6 +1641,7 @@ have changed."
16401641 (query (treesit-query-compile 'clojure
16411642 (append
16421643 `(((map_lit) @map)
1644+ ((ns_map_lit) @ns-map)
16431645 ((list_lit
16441646 ((sym_lit) @sym
16451647 (:match ,(clojure-ts-symbol-regexp clojure-ts-align-binding-forms) @sym))
@@ -1686,6 +1688,10 @@ subsequent special arguments based on block indentation rules."
16861688 (goto-char (treesit-node-start node))
16871689 (when-let* ((cur-sexp (treesit-node-first-child-for-pos node (point ) t )))
16881690 (goto-char (treesit-node-start cur-sexp))
1691+ ; ; For namespaced maps we need to skip the namespace, which is the first
1692+ ; ; nested sexp.
1693+ (when (equal sexp-type 'ns-map )
1694+ (treesit-beginning-of-thing 'sexp -1 'nested ))
16891695 ; ; For cond forms we need to skip first n + 1 nodes according to block
16901696 ; ; indentation rules. First node to skip is the symbol itself.
16911697 (when (equal sexp-type 'cond )
0 commit comments