Skip to content

Commit 6699eb1

Browse files
authored
Use refactor-nrepl 3.3.2 (#202)
1 parent b128fa9 commit 6699eb1

3 files changed

Lines changed: 51 additions & 29 deletions

File tree

project.clj

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
(def eastwood-version "1.1.1")
1+
(def eastwood-version "1.2.2")
22

33
;; Please don't bump the library version by hand - use ci.release-workflow instead.
44
(defproject formatting-stack "4.5.0"
@@ -128,10 +128,10 @@
128128
:resource-paths ["test-resources-extra"
129129
"test-resources"]}
130130

131-
:refactor-nrepl {:dependencies [[refactor-nrepl "3.1.0"]
131+
:refactor-nrepl {:dependencies [[refactor-nrepl "3.3.2"]
132132
[nrepl "0.9.0"]]
133133
;; cider-nrepl is a :provided dependency from refactor-nrepl.
134-
:plugins [[cider/cider-nrepl "0.27.4" :exclusions [nrepl]]]}
134+
:plugins [[cider/cider-nrepl "0.28.2" :exclusions [nrepl]]]}
135135

136136
:ncrw {:global-vars {*assert* true} ;; `ci.release-workflow` relies on runtime assertions
137137
:source-paths ^:replace []

src/formatting_stack/formatters/clean_ns.clj

Lines changed: 34 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -39,11 +39,8 @@
3939

4040
(def default-nrepl-config-opts
4141
(delay
42-
43-
(require ;; lazy-loading in order to support unconfigured consumers
44-
'[refactor-nrepl.config])
45-
46-
(-> 'refactor-nrepl.config/*config* resolve deref)))
42+
;; lazy-loading in order to support unconfigured consumers
43+
(-> 'refactor-nrepl.config/*config* requiring-resolve deref)))
4744

4845
(def default-nrepl-opts
4946
(delay
@@ -64,32 +61,43 @@
6461
(make-cleaner how-to-ns-opts refactor-nrepl-opts namespaces-that-should-never-cleaned libspec-whitelist filename)
6562
how-to-ns-opts)))
6663

64+
(defmacro with-memoized-libspec-allowlist
65+
"Uses refactor-nrepl's 'memoized libspec' facility for best performance,
66+
while respecting formatting-stack's need of lazily requiring refactor-nrepl."
67+
{:style/indent 0}
68+
[& body]
69+
`((requiring-resolve 'refactor-nrepl.ns.libspec-allowlist/with-memoized-libspec-allowlist*)
70+
(fn []
71+
~@body)))
72+
6773
(defn format!
6874
[this files]
69-
(->> files
70-
(process-in-parallel! (fn [filename]
71-
(when-let [ns-replacement (replaceable-ns-form this filename)]
72-
(println "Cleaning unused imports:" filename)
73-
(write-ns-replacement! filename ns-replacement)))))
75+
(with-memoized-libspec-allowlist
76+
(->> files
77+
(process-in-parallel! (bound-fn [filename]
78+
(when-let [ns-replacement (replaceable-ns-form this filename)]
79+
(println "Cleaning unused imports:" filename)
80+
(write-ns-replacement! filename ns-replacement))))))
7481
nil)
7582

7683
(defn lint! [this files]
77-
(->> files
78-
(process-in-parallel! (fn [filename]
79-
(when-let [{:keys [final-ns-form-str
80-
original-ns-form-str]} (replaceable-ns-form this filename)]
81-
(let [diff (diff/unified-diff filename original-ns-form-str final-ns-form-str)]
82-
(->> (diff->line-numbers diff)
83-
(mapv (fn [{:keys [start]}]
84-
{:filename filename
85-
:diff diff
86-
:level :warning
87-
:column 0
88-
:line start
89-
:msg "ns can be cleaned"
90-
:source :formatting-stack/clean-ns})))))))
91-
(filter some?)
92-
(mapcat ensure-sequential)))
84+
(with-memoized-libspec-allowlist
85+
(->> files
86+
(process-in-parallel! (bound-fn [filename]
87+
(when-let [{:keys [final-ns-form-str
88+
original-ns-form-str]} (replaceable-ns-form this filename)]
89+
(let [diff (diff/unified-diff filename original-ns-form-str final-ns-form-str)]
90+
(->> (diff->line-numbers diff)
91+
(mapv (fn [{:keys [start]}]
92+
{:filename filename
93+
:diff diff
94+
:level :warning
95+
:column 0
96+
:line start
97+
:msg "ns can be cleaned"
98+
:source :formatting-stack/clean-ns})))))))
99+
(filter some?)
100+
(mapcat ensure-sequential))))
93101

94102
(defn new [{:keys [refactor-nrepl-opts libspec-whitelist how-to-ns-opts namespaces-that-should-never-cleaned]
95103
:or {namespaces-that-should-never-cleaned default-namespaces-that-should-never-cleaned
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
(ns unit.formatting-stack.formatters.clean-ns
2+
(:require
3+
[clojure.test :refer [deftest is testing]]
4+
[formatting-stack.formatters.clean-ns :as sut]
5+
[formatting-stack.strategies :as strategies]))
6+
7+
(when (strategies/refactor-nrepl-available?)
8+
(deftest with-memoized-libspec-allowlist
9+
(testing "Binds `*libspec-allowlist*`, which means that memoization will be effectively used"
10+
(let [bound? (fn []
11+
@(resolve 'refactor-nrepl.ns.libspec-allowlist/*libspec-allowlist*))]
12+
(assert (not (bound?)))
13+
(is (sut/with-memoized-libspec-allowlist
14+
(bound?)))))))

0 commit comments

Comments
 (0)