Skip to content

Commit 7824d61

Browse files
authored
Fix *print-length* behaviour in formatters (#196)
1 parent db6f295 commit 7824d61

6 files changed

Lines changed: 51 additions & 7 deletions

File tree

src/formatting_stack/formatters/clean_ns.clj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
[formatting-stack.formatters.how-to-ns]
55
[formatting-stack.protocols.formatter :as formatter]
66
[formatting-stack.protocols.linter :as linter]
7-
[formatting-stack.util :refer [ensure-sequential process-in-parallel! try-require]]
7+
[formatting-stack.util :refer [ensure-sequential process-in-parallel! try-require unlimited-pr-str]]
88
[formatting-stack.util.diff :as diff :refer [diff->line-numbers]]
99
[formatting-stack.util.ns :as util.ns :refer [write-ns-replacement!]]
1010
[medley.core :refer [deep-merge]]
@@ -19,7 +19,7 @@
1919
:original-ns-form original-ns-form
2020
:namespaces-that-should-never-cleaned namespaces-that-should-never-cleaned
2121
:libspec-whitelist libspec-whitelist})
22-
pr-str)))
22+
unlimited-pr-str)))
2323

2424
(def default-libspecs
2525
["specs" "imports" "exports" "extensions" "side-effects" "init" "initialization" "load" "migration" "migrations"])

src/formatting_stack/formatters/cljfmt/impl.clj

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
[clojure.tools.namespace.parse :as parse]
88
[formatting-stack.indent-specs]
99
[formatting-stack.project-parsing :refer [project-namespaces]]
10-
[formatting-stack.util :refer [dissoc-by rcomp require-lock]]
10+
[formatting-stack.util :refer [dissoc-by rcomp require-lock unlimited-pr-str]]
1111
[nedap.speced.def :as speced]))
1212

1313
(def ^:dynamic *cache* nil)
@@ -99,8 +99,8 @@
9999
(swap! result
100100
#(-> %
101101
(dissoc-by (fn [x] ;; regexes can't be compared, hence this contraption
102-
(not= (pr-str x)
103-
(pr-str #"^def"))))
102+
(not= (unlimited-pr-str x)
103+
(unlimited-pr-str #"^def"))))
104104
(assoc #"^def(?!ault)(?!late)(?!er)" [[:inner 0]])))
105105
;; :refer awareness:
106106
(doseq [[sym var-ref] ns-mappings

src/formatting_stack/formatters/trivial_ns_duplicates.clj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
[formatting-stack.formatters.how-to-ns]
1010
[formatting-stack.protocols.formatter :as formatter]
1111
[formatting-stack.protocols.linter :as linter]
12-
[formatting-stack.util :refer [ensure-coll ensure-sequential process-in-parallel! rcomp read-ns-decl]]
12+
[formatting-stack.util :refer [ensure-coll ensure-sequential process-in-parallel! rcomp read-ns-decl unlimited-pr-str]]
1313
[formatting-stack.util.diff :as diff :refer [diff->line-numbers]]
1414
[formatting-stack.util.ns :as util.ns :refer [replace-ns-form! write-ns-replacement!]]
1515
[medley.core :refer [deep-merge]]
@@ -136,7 +136,7 @@
136136
replacement)))
137137

138138
(speced/defn ^{::speced/spec (complement #{"nil"})} duplicate-cleaner [ns-form]
139-
(some-> ns-form remove-exact-duplicates pr-str))
139+
(some-> ns-form remove-exact-duplicates unlimited-pr-str))
140140

141141
(defn replaceable-ns-form
142142
[how-to-ns-opts filename]

src/formatting_stack/util.clj

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,3 +167,10 @@
167167
[pred coll]
168168
(let [switch (reductions not= true (map pred coll (rest coll)))]
169169
(map (partial map first) (partition-by second (map list coll switch)))))
170+
171+
(defn unlimited-pr-str
172+
"#'clojure.core/pr-str with no print limits"
173+
[s]
174+
(binding [*print-length* nil
175+
*print-level* nil]
176+
(pr-str s)))

test/unit/formatting_stack/formatters/trivial_ns_duplicates.clj

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,3 +113,24 @@
113113

114114
"(ns foo (:require #?(:clj foo :cljs bar) [#?(:clj foo :cljs bar)]))"
115115
nil))
116+
117+
(deftest duplicate-cleaner
118+
(let [input '(ns foo
119+
(:require
120+
[a :refer [a]]
121+
[a :refer [a]]
122+
[b :refer [b]]))
123+
expected "(ns foo (:require [a :refer [a]] [b :refer [b]]))"]
124+
125+
;; override user settings
126+
(binding [*print-length* nil
127+
*print-level* nil]
128+
(is (= expected (sut/duplicate-cleaner input)))
129+
130+
(testing "not affected by *print-length*"
131+
(binding [*print-length* 1]
132+
(is (= expected (sut/duplicate-cleaner input)))))
133+
134+
(testing "not affected by *print-level*"
135+
(binding [*print-level* 1]
136+
(is (= expected (sut/duplicate-cleaner input))))))))

test/unit/formatting_stack/util.clj

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,3 +62,19 @@
6262
#(< 2 (- %2 %1))
6363
'(1 2 3 8 9 10)
6464
'((1 2 3) (8 9 10))))
65+
66+
(deftest unlimited-pr-str
67+
(let [input [1 2 [3 4 [5 6]]]
68+
expected "[1 2 [3 4 [5 6]]]"]
69+
;; override user settings
70+
(binding [*print-length* nil
71+
*print-level* nil]
72+
(is (= expected (sut/unlimited-pr-str input)))
73+
74+
(testing "not affected by *print-length*"
75+
(binding [*print-length* 1]
76+
(is (= expected (sut/unlimited-pr-str input)))))
77+
78+
(testing "not affected by *print-level*"
79+
(binding [*print-level* 1]
80+
(is (= expected (sut/unlimited-pr-str input))))))))

0 commit comments

Comments
 (0)