Skip to content

Commit 9a6a082

Browse files
committed
alias now accepts namespace objects in addition to symbols
1 parent c557465 commit 9a6a082

File tree

3 files changed

+14
-7
lines changed

3 files changed

+14
-7
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ SCI is used in [babashka](https://github.com/babashka/babashka),
1414

1515
- Add `ns` field to `sci.lang.Var` for compatibility with code that accesses `.ns` on vars
1616
- `ns-aliases` now returns identical namespace objects as `find-ns`
17+
- `alias` now accepts namespace objects in addition to symbols
1718
- `copy-var` and `copy-var*` now preserve `:private` metadata
1819
- Add `proxy-super`, `proxy-call-with-super`, `update-proxy` and `proxy-mappings`
1920
- Support functional interface (FI) adaptation for instance targets (e.g. `(let [^Predicate p even?] (.test p 42))`)

src/sci/impl/namespaces.cljc

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -415,13 +415,6 @@
415415

416416
;;;; Namespaces / vars
417417

418-
(defn sci-alias [alias-sym ns-sym]
419-
(swap! (:env (store/get-ctx))
420-
(fn [env]
421-
(let [current-ns (sci.impl.utils/current-ns-name)]
422-
(assoc-in env [:namespaces current-ns :aliases alias-sym] ns-sym))))
423-
nil)
424-
425418
(defn sci-create-ns [ns-sym]
426419
(sci.impl.utils/namespace-object (:env (store/get-ctx)) ns-sym true nil))
427420

@@ -457,6 +450,16 @@
457450
(let [ctx (store/get-ctx)]
458451
(sci-ns-name* ctx ns)))
459452

453+
(defn sci-alias [alias-sym ns-sym]
454+
(let [ctx (store/get-ctx)
455+
ns-sym (if (symbol? ns-sym) ns-sym
456+
(sci-ns-name* ctx ns-sym))]
457+
(swap! (:env ctx)
458+
(fn [env]
459+
(let [current-ns (sci.impl.utils/current-ns-name)]
460+
(assoc-in env [:namespaces current-ns :aliases alias-sym] ns-sym)))))
461+
nil)
462+
460463
(defn sci-ns-aliases* [ctx sci-ns]
461464
(let [name (sci-ns-name* ctx sci-ns)
462465
aliases (get-in @(:env ctx) [:namespaces name :aliases])]

test/sci/namespaces_test.cljc

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,9 @@
9494
(is (= 'clojure.set (eval* "(ns-name (the-ns (the-ns 'clojure.set)))")))
9595
(is (= 'clojure.core (eval* "(alias 'c 'clojure.core) (ns-name (get (ns-aliases *ns*) 'c))")))
9696
(is (true? (eval* "(alias 'c 'clojure.core) (identical? (find-ns 'clojure.core) (get (ns-aliases *ns*) 'c))")))
97+
(testing "alias accepts namespace objects"
98+
(is (= 'clojure.core (eval* "(alias 'c (find-ns 'clojure.core)) (ns-name (get (ns-aliases *ns*) 'c))")))
99+
(is (= 'my.new.ns (eval* "(alias 'mns (create-ns 'my.new.ns)) (ns-name (get (ns-aliases *ns*) 'mns))"))))
97100
(is (contains? (set (eval* "(clojure.repl/dir-fn 'clojure.string)"))
98101
'last-index-of))
99102
(is (true? (eval* "(def foo-ns (create-ns 'foo)) (def another-foo-ns (create-ns 'foo))

0 commit comments

Comments
 (0)