Skip to content

Commit 591d716

Browse files
authored
Merge pull request #372 from clojure-emacs/ns-aliases-files
Extract `namespace-aliases-for`
2 parents e5ba9a9 + ba164c0 commit 591d716

File tree

3 files changed

+36
-26
lines changed

3 files changed

+36
-26
lines changed

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,11 @@
22

33
## Unreleased
44

5+
## 3.4.1
6+
7+
* Offer `refactor-nrepl.ns.libspecs/namespace-aliases-for` function.
8+
* It's basically like `namespace-aliases`, but accepts files rather than dirs as an argument, which can be more flexible for programmatic use.
9+
510
## 3.4.0
611

712
* [#369](https://github.com/clojure-emacs/refactor-nrepl/issues/369): Implement "suggest" option for the `namespace-aliases` op.

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ Be aware that this isn't the case if you connect to an already running REPL proc
2626
Add the following, either in your project's `project.clj`, or in the `:user` profile found at `~/.lein/profiles.clj`:
2727

2828
```clojure
29-
:plugins [[refactor-nrepl "3.4.0"]
29+
:plugins [[refactor-nrepl "3.4.1"]
3030
[cider/cider-nrepl "0.28.3"]]
3131
```
3232

@@ -360,12 +360,12 @@ If you want to use `mranderson` while developing locally with the REPL, the sour
360360

361361
When you want to release locally to the following:
362362

363-
PROJECT_VERSION=3.4.0 make install
363+
PROJECT_VERSION=3.4.1 make install
364364

365365
And here's how to deploy to Clojars:
366366

367367
```bash
368-
git tag -a v3.4.0 -m "3.4.0"
368+
git tag -a v3.4.1 -m "3.4.1"
369369
git push --tags
370370
```
371371

src/refactor_nrepl/ns/libspecs.clj

Lines changed: 28 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,33 @@
9595
(apply dissoc possible-aliases)
9696
(merge-with into project-aliases))))
9797

98+
;; `namespace-aliases-for` was split out from `namespace-aliases`, for a 3rd-party need.
99+
;; `namespace-aliases-for` is a little more fine-grained, since it accepts files rather than dirs.
100+
(defn namespace-aliases-for [files ignore-errors?]
101+
;; pmap parallelizes a couple things:
102+
;; - `pred`, which is IO-intensive
103+
;; - `aliases-by-frequencies`, which is moderately CPU-intensive
104+
(let [[clj-aliases cljs-aliases] (pmap (fn [[dialect pred] corpus]
105+
(->> corpus
106+
(filter pred)
107+
(keep (comp (fn [v]
108+
(or v
109+
;; nullify `false` values for `keep`:
110+
nil))
111+
(util/with-suppressed-errors
112+
(partial get-libspec-from-file-with-caching dialect)
113+
ignore-errors?)))
114+
aliases-by-frequencies))
115+
[[:clj (util/with-suppressed-errors
116+
(some-fn core/clj-file? core/cljc-file?)
117+
ignore-errors?)]
118+
[:cljs (util/with-suppressed-errors
119+
(some-fn core/cljs-file? core/cljc-file?)
120+
ignore-errors?)]]
121+
(repeat files))]
122+
{:clj clj-aliases
123+
:cljs cljs-aliases}))
124+
98125
(defn namespace-aliases
99126
"Returns a map of file type to a map of aliases to namespaces
100127
@@ -110,29 +137,7 @@
110137
([ignore-errors? dirs include-tentative-aliases?]
111138
(let [;; fetch the file list just once (as opposed to traversing the project once for each dialect)
112139
files (core/source-files-with-clj-like-extension ignore-errors? dirs)
113-
;; pmap parallelizes a couple things:
114-
;; - `pred`, which is IO-intensive
115-
;; - `aliases-by-frequencies`, which is moderately CPU-intensive
116-
[clj-aliases cljs-aliases] (pmap (fn [[dialect pred] corpus]
117-
(->> corpus
118-
(filter pred)
119-
(keep (comp (fn [v]
120-
(or v
121-
;; nullify `false` values for `keep`:
122-
nil))
123-
(util/with-suppressed-errors
124-
(partial get-libspec-from-file-with-caching dialect)
125-
ignore-errors?)))
126-
aliases-by-frequencies))
127-
[[:clj (util/with-suppressed-errors
128-
(some-fn core/clj-file? core/cljc-file?)
129-
ignore-errors?)]
130-
[:cljs (util/with-suppressed-errors
131-
(some-fn core/cljs-file? core/cljc-file?)
132-
ignore-errors?)]]
133-
(repeat files))
134-
project-aliases {:clj clj-aliases
135-
:cljs cljs-aliases}]
140+
project-aliases (namespace-aliases-for files ignore-errors?)]
136141
(cond-> project-aliases
137142
include-tentative-aliases? (update :clj add-tentative-aliases :clj files ignore-errors?)
138143
include-tentative-aliases? (update :cljs add-tentative-aliases :cljs files ignore-errors?)))))

0 commit comments

Comments
 (0)