Skip to content

Commit be19d3f

Browse files
borkdudebbss
authored andcommitted
[babashka#303] support :rename in :require
1 parent a2e6fb9 commit be19d3f

2 files changed

Lines changed: 12 additions & 5 deletions

File tree

src/sci/impl/interpreter.cljc

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -145,30 +145,35 @@
145145
(assoc ret :reload true)
146146
(cons fst-opt rst-opts))
147147
:refer (recur (assoc ret :refer fst-opt)
148-
rst-opts)))))
148+
rst-opts)
149+
:rename (recur (assoc ret :rename fst-opt)
150+
rst-opts)))))
149151
(symbol? libspec) {:lib-name libspec}
150152
:else (throw (new #?(:clj Exception :cljs js/Error)
151153
(str "Invalid libspec: " libspec)))))
152154

153155
(declare eval-string*)
154156

155157
(defn handle-require-libspec-env
156-
[env current-ns the-loaded-ns lib-name {:keys [:as :refer] :as _parsed-libspec}]
158+
[env current-ns the-loaded-ns lib-name
159+
{:keys [:as :refer :rename] :as _parsed-libspec}]
157160
(let [the-current-ns (get-in env [:namespaces current-ns]) ;; = ns-data?
158161
the-current-ns (if as (assoc-in the-current-ns [:aliases as] lib-name)
159162
the-current-ns)
163+
rename-sym (if rename (fn [sym] (or (rename sym) sym))
164+
identity)
160165
the-current-ns
161166
(if refer
162167
(cond (kw-identical? :all refer)
163168
(reduce (fn [ns [k v]]
164169
(if (symbol? k)
165-
(assoc ns k v)
170+
(assoc ns (rename-sym k) v)
166171
ns))
167172
the-current-ns
168173
the-loaded-ns)
169174
(sequential? refer)
170175
(reduce (fn [ns sym]
171-
(assoc ns sym
176+
(assoc ns (rename-sym sym)
172177
(if-let [[_k v] (find the-loaded-ns sym)]
173178
v
174179
(throw (new #?(:clj Exception :cljs js/Error)

test/sci/core_test.cljc

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -494,7 +494,9 @@
494494
(require (symbol \"foo\") (symbol \"bar\"))
495495
[foo/x bar/x x]"))))
496496
(testing "require as function"
497-
(is (= 1 (eval* "(ns foo) (defn foo [] 1) (ns bar) (apply require ['[foo :as f]]) (f/foo)")))))
497+
(is (= 1 (eval* "(ns foo) (defn foo [] 1) (ns bar) (apply require ['[foo :as f]]) (f/foo)"))))
498+
(testing "rename"
499+
(is (= #{1 2} (eval* "(require '[clojure.set :refer [union] :rename {union union2}]) (union2 #{1} #{2})")))))
498500

499501
(deftest misc-namespace-test
500502
(is (= 1 (eval* "(alias (symbol \"c\") (symbol \"clojure.core\")) (c/and true 1)")))

0 commit comments

Comments
 (0)