Skip to content

Commit 321d18f

Browse files
committed
Support Clojure 1.11's new :as-alias namespace directive
1 parent 863e038 commit 321d18f

File tree

7 files changed

+65
-24
lines changed

7 files changed

+65
-24
lines changed

CHANGELOG.md

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

33
## Unreleased
44

5+
## 3.5.0
6+
7+
* [#374](https://github.com/clojure-emacs/refactor-nrepl/issues/374): support Clojure 1.11's new `:as-alias` namespace directive.
8+
59
## 3.4.2
610

711
* [#373](https://github.com/clojure-emacs/refactor-nrepl/issues/373): revert accidentally-changed `namespace-aliases` error handling default.

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.2"]
29+
:plugins [[refactor-nrepl "3.5.0"]
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.2 make install
363+
PROJECT_VERSION=3.5.0 make install
364364

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

367367
```bash
368-
git tag -a v3.4.2 -m "3.4.2"
368+
git tag -a v3.5.0 -m "3.5.0"
369369
git push --tags
370370
```
371371

src/refactor_nrepl/ns/rebuild.clj

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,10 @@
1616
" and " libspec-alias)))))
1717
alias)
1818

19-
(defn- get-libspec-alias [libspecs]
19+
(defn- get-libspec-alias [k libspecs]
2020
(->> libspecs
21-
(map :as)
22-
(filter (complement nil?))
23-
first
21+
(keep k)
22+
(first)
2423
(assert-single-alias libspecs)))
2524

2625
(defn- merge-referred-symbols [libspecs key]
@@ -32,17 +31,18 @@
3231
(when (seq referred)
3332
(-> referred concat flatten distinct)))))
3433

35-
(defn- remove-redundant-flags
36-
[{:keys [reload reload-all] :as libspec}]
37-
(if (and reload reload-all)
38-
(dissoc libspec :reload)
39-
libspec))
34+
(defn- remove-redundant-flags [{:keys [reload reload-all]
35+
:as libspec}]
36+
(cond-> libspec
37+
(and reload reload-all)
38+
(dissoc :reload)))
4039

4140
(defn- merge-libspecs
4241
[libspecs]
4342
(->
4443
(apply merge libspecs)
45-
(merge {:as (get-libspec-alias libspecs)
44+
(merge {:as (get-libspec-alias :as libspecs)
45+
:as-alias (get-libspec-alias :as-alias libspecs)
4646
:refer (merge-referred-symbols libspecs :refer)
4747
:refer-macros (merge-referred-symbols libspecs :refer-macros)
4848
:rename (apply merge (map :rename libspecs))})
@@ -123,17 +123,22 @@
123123
@libspecs-by-prefix))
124124

125125
(defn- create-libspec
126-
[{:keys [ns as refer rename refer-macros] :as libspec} vectorize?]
126+
[{:keys [ns as as-alias refer rename refer-macros] :as libspec} vectorize?]
127127
(let [all-flags #{:reload :reload-all :verbose :include-macros}
128128
flags (util/filter-map #(all-flags (first %)) libspec)
129-
keep-as-is? (and (not as) (not refer)
130-
(empty? flags) (empty? rename) (empty? refer-macros))]
129+
keep-as-is? (and (not as)
130+
(not as-alias)
131+
(not refer)
132+
(empty? flags)
133+
(empty? rename)
134+
(empty? refer-macros))]
131135
(cond-> ns
132136
(or vectorize? (not keep-as-is?))
133137
vector
134138

135139
(not keep-as-is?)
136140
(into (concat (when as [:as as])
141+
(when as-alias [:as-alias as-alias])
137142
(when refer
138143
[:refer (if (sequential? refer)
139144
(vec (sort-referred-symbols refer))

test-resources/as_alias.clj

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
(ns as-alias
2+
(:require
3+
[foo :as-alias f]))

test/refactor_nrepl/core_test.clj

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,3 +72,8 @@
7272
"a/.gitlibs" true
7373
"a/.gitlibs/" true
7474
"a/.gitlibs/b" true))
75+
76+
(deftest read-ns-form-with-meta
77+
(testing "`:as-alias` directives are kept"
78+
(is (= '(ns as-alias (:require [foo :as-alias f]))
79+
(sut/read-ns-form-with-meta "test-resources/as_alias.clj")))))

test/refactor_nrepl/ns/ns_parser_test.clj

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,3 +41,8 @@
4141
(get-required-macros '(ns test
4242
(:use-macros [cljs.test :only [deftest is]])
4343
(:require-macros [cljs.test :refer [testing run-tests]]))))))
44+
45+
(deftest as-alias
46+
(is (= (list '{:ns compojure.core :as-alias c})
47+
(get-libspecs '(ns refactor-nrepl.test
48+
(:require [compojure.core :as-alias c]))))))

test/refactor_nrepl/ns/rebuild_test.clj

Lines changed: 27 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,20 @@
11
(ns refactor-nrepl.ns.rebuild-test
22
(:require
3-
[clojure.test :as t]
4-
[refactor-nrepl.ns.rebuild :as rebuild]))
3+
[clojure.test :as t :refer [deftest is testing]]
4+
[refactor-nrepl.ns.rebuild :as sut]))
55

66
(t/deftest build-cljc-dep-forms
77
(t/testing "shared :requires only, no conditionals"
88
(t/is (= '((:require [clojure.string :as str]))
9-
(rebuild/build-cljc-dep-forms
9+
(sut/build-cljc-dep-forms
1010
'{:clj {:require ({:ns clojure.string, :as str, :rename {}})
1111
:import ()}
1212
:cljs {:require ({:ns clojure.string, :as str, :rename {}})
1313
:import ()}
1414
:source-dialect :cljc}))))
1515
(t/testing "single segment namespaces"
1616
(t/is (= '((:require [single-segment-ns]))
17-
(rebuild/build-cljc-dep-forms
17+
(sut/build-cljc-dep-forms
1818
'{:clj {:require ({:ns single-segment-ns :rename {}})
1919
:import ()}
2020
:cljs {:require ({:ns single-segment-ns, :rename {}})
@@ -26,7 +26,7 @@
2626
:cljs
2727
[(:require [clojure.string :as str])
2828
(:require-macros [conditional-with-require-macros :refer [my-when]])]))
29-
(rebuild/build-cljc-dep-forms
29+
(sut/build-cljc-dep-forms
3030
'{:clj {:require ({:ns clojure.string, :as str, :rename {}})
3131
:import ()}
3232
:cljs {:require ({:ns clojure.string, :as str, :rename {}})
@@ -37,7 +37,7 @@
3737
(t/testing "should rebuild cljc ns declarations that consist of only conditionals for a single language correctly (#296)"
3838
(t/is (= (list (symbol "#?@")
3939
'(:cljs [(:require-macros [conditional-with-require-macros :refer [my-when]])]))
40-
(rebuild/build-cljc-dep-forms
40+
(sut/build-cljc-dep-forms
4141
'{:clj {:require ()
4242
:import ()}
4343
:cljs {:require ()
@@ -47,9 +47,28 @@
4747

4848
(t/testing "Empty declaration should be rebuilt as-is"
4949
(t/is (= nil
50-
(rebuild/build-cljc-dep-forms
50+
(sut/build-cljc-dep-forms
5151
'{:clj {:require ()
5252
:import ()}
5353
:cljs {:require ()
5454
:import ()}
55-
:source-dialect :cljc})))))
55+
:source-dialect :cljc}))))
56+
57+
(testing "`:as-alias`"
58+
(let [input '{:require ({:ns foo, :as-alias str})
59+
:import ()}]
60+
(t/testing "is kept"
61+
(t/is (= '((:require [foo :as-alias str]))
62+
(sut/build-cljc-dep-forms
63+
{:clj input
64+
:cljs input
65+
:source-dialect :cljc})))))))
66+
67+
(deftest rebuild-ns-form
68+
(let [input '(ns refactor-nrepl.ns.clean-ns (:require [foo :as-alias f]))]
69+
(is (= input (sut/rebuild-ns-form '{:clj {:require ({:ns foo, :as-alias f})
70+
:import nil}
71+
:ns refactor-nrepl.ns.clean-ns
72+
:source-dialect :clj}
73+
input))
74+
"`:as-alias` directives are kept")))

0 commit comments

Comments
 (0)