|
39 | 39 |
|
40 | 40 | (def default-nrepl-config-opts |
41 | 41 | (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))) |
47 | 44 |
|
48 | 45 | (def default-nrepl-opts |
49 | 46 | (delay |
|
64 | 61 | (make-cleaner how-to-ns-opts refactor-nrepl-opts namespaces-that-should-never-cleaned libspec-whitelist filename) |
65 | 62 | how-to-ns-opts))) |
66 | 63 |
|
| 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 | + |
67 | 73 | (defn format! |
68 | 74 | [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)))))) |
74 | 81 | nil) |
75 | 82 |
|
76 | 83 | (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)))) |
93 | 101 |
|
94 | 102 | (defn new [{:keys [refactor-nrepl-opts libspec-whitelist how-to-ns-opts namespaces-that-should-never-cleaned] |
95 | 103 | :or {namespaces-that-should-never-cleaned default-namespaces-that-should-never-cleaned |
|
0 commit comments