Skip to content

Commit

Permalink
Merge pull request #350 from camsaul/fix-349
Browse files Browse the repository at this point in the history
Fix nested :inner specs
  • Loading branch information
weavejester authored Sep 23, 2024
2 parents d750bc1 + 4346d0f commit 9c0a19a
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 6 deletions.
13 changes: 8 additions & 5 deletions cljfmt/src/cljfmt/core.cljc
Original file line number Diff line number Diff line change
Expand Up @@ -367,11 +367,14 @@
(defn- make-indenter [[key opts] context]
(apply some-fn (map (partial indenter-fn key context) opts)))

(defn- indent-order [[key _]]
(cond
(and (symbol? key) (namespace key)) (str 0 key)
(symbol? key) (str 1 key)
(pattern? key) (str 2 key)))
(defn- indent-order [[key specs]]
(let [get-depth (fn [[type depth]] (if (= type :inner) depth 0))
max-depth (transduce (map get-depth) max 0 specs)
key-order (cond
(qualified-symbol? key) 0
(simple-symbol? key) 1
(pattern? key) 2)]
[(- max-depth) key-order (str key)]))

(defn- custom-indent [zloc indents context]
(if (empty? indents)
Expand Down
35 changes: 34 additions & 1 deletion cljfmt/test/cljfmt/core_test.cljc
Original file line number Diff line number Diff line change
Expand Up @@ -173,7 +173,40 @@
["(defrecord Foo [x]"
" Closeable"
" (close [_]"
" (prn x)))"])))
" (prn x)))"]))
(testing "nested rules like [:inner 1] (#349)"
(is (reformats-to?
["(ns my.namespace)"
""
"(defprotocol MyProtocol"
"MyClass"
"(with-x [this x]"
"\"with-x is a method\"))"
""
"(extend-protocol MyProtocol"
"MyClass"
"(with-x [this x]"
"(+ this x)))"
""
"(defn x [x]"
"(with-x x "
"1))"]
["(ns my.namespace)"
""
"(defprotocol MyProtocol"
" MyClass"
" (with-x [this x]"
" \"with-x is a method\"))"
""
"(extend-protocol MyProtocol"
" MyClass"
" (with-x [this x]"
" (+ this x)))"
""
"(defn x [x]"
" (with-x x"
" 1))"]
{:extra-indents '{my.namespace/with-x [[:block 0]]}}))))

(testing "data structure indentation"
(is (reformats-to?
Expand Down

0 comments on commit 9c0a19a

Please sign in to comment.