Details

Description

This can be seen by opening a REPL and:

(load-file "cljs/ns_test/foo.cljs")

The ::foo keyword in that file is resolved improperly:

ClojureScript:cljs.user> cljs.ns-test.foo/kw
:user/foo

cljs.repl/load-stream needs to force *ns* to track *cljs-ns* so that the Clojure reader will properly resolve auto-namespacing keywords. A patch is attached that does this, ensuring that any Clojure namespaces created solely for this purpose are removed.

Attachments

Activity

Note that there are two other places where the Clojure reader is used in ClojureScript — one in the analyzer, one in the compiler — where a similar fix may be required. Perhaps cljs.compiler/forms-seq should be the sole place where the Clojure reader is used with *ns* properly tracked therein...

Chas Emerick
added a comment - 28/Feb/13 4:53 AM Note that there are two other places where the Clojure reader is used in ClojureScript — one in the analyzer, one in the compiler — where a similar fix may be required. Perhaps cljs.compiler/forms-seq should be the sole place where the Clojure reader is used with *ns* properly tracked therein...

In this case, the created namespaces are guaranteed to be empty (only reading in that try, no evaluation), so removing them makes sense. As it is, ClojureScript leaves behind an empty namespace for each ns form it encounters and each js library it requires/aliases, which can be confusing / irritating (or at least inefficient) when using Clojure code completion or namespace browsing facilities in the same VM. I was hoping to avoid adding to that.

Chas Emerick
added a comment - 30/Jul/13 5:20 AM In this case, the created namespaces are guaranteed to be empty (only reading in that try, no evaluation), so removing them makes sense. As it is, ClojureScript leaves behind an empty namespace for each ns form it encounters and each js library it requires/aliases, which can be confusing / irritating (or at least inefficient) when using Clojure code completion or namespace browsing facilities in the same VM. I was hoping to avoid adding to that.