Skip to content

Commit b5b099a

Browse files
plexusswannodette
authored andcommitted
CLJS-3273 preserve ns-name when processing an :ns* op
This happens when a namespace contains both an `ns` form and a `require` statement. The `require` will expand to `(ns* (require ...))`, and when processed will generate a namespace name of the form `cljs.user.*` which ends up replacing the ns-name set in the `ns` declaration.
1 parent f884af0 commit b5b099a

File tree

2 files changed

+11
-1
lines changed

2 files changed

+11
-1
lines changed

src/main/clojure/cljs/compiler.cljc

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1564,7 +1564,9 @@
15641564

15651565
(= :ns* (:op ast))
15661566
(let [ns-emitted? (some? ns-name)
1567-
ns-name (ana/gen-user-ns src)]
1567+
ns-name (if-not ns-emitted?
1568+
(ana/gen-user-ns src)
1569+
ns-name)]
15681570
(if-not ns-emitted?
15691571
(emit (assoc ast :name ns-name :op :ns))
15701572
(emit ast))

src/test/clojure/cljs/compiler_tests.clj

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -358,6 +358,14 @@
358358
(def hist (Html5History.))]))
359359
"(new goog.history.Html5History());"))))
360360

361+
(deftest emit-source-ns*-retains-ns-name ;; CLJS-3273
362+
(let [input (java.io.File/createTempFile "foo" ".cljs")
363+
output (java.io.File/createTempFile "foo" ".js")
364+
_ (spit input "(ns foo.foo) (require 'clojure.string)")
365+
ns-info (env/ensure (comp/emit-source input output "cljs" {}))]
366+
(is (= 'foo.foo (:ns ns-info)))))
367+
368+
361369
;; CLJS-1225
362370

363371
(comment

0 commit comments

Comments
 (0)