Skip to content

Commit a96edfe

Browse files
committed
need js/ qualify global libs, add parsing test
1 parent 58ac381 commit a96edfe

File tree

2 files changed

+16
-7
lines changed

2 files changed

+16
-7
lines changed

src/main/clojure/cljs/analyzer.cljc

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3082,6 +3082,8 @@
30823082
(map (fn [[orig new-name]]
30833083
[new-name (symbol "js" (str orig))]))
30843084
rename)}))))
3085+
(defn js-lib [lib]
3086+
(symbol "js" (str lib)))
30853087

30863088
(defn parse-global-require-spec
30873089
[env aliases spec]
@@ -3119,15 +3121,15 @@
31193121
":refer must be followed by a sequence of symbols in :require / :require-macros"))))
31203122
(merge
31213123
(when (some? alias)
3122-
{rk (merge {alias lib} {lib lib})})
3124+
{rk (merge {alias (js-lib lib)} {lib (js-lib lib)})})
31233125
(when (some? referred-without-renamed)
3124-
{uk (apply hash-map (interleave referred-without-renamed (repeat lib)))})
3126+
{uk (apply hash-map (interleave referred-without-renamed (repeat (js-lib lib))))})
31253127
(when (some? renamed)
31263128
{renk (reduce (fn [m [original renamed]]
31273129
(when-not (some #{original} referred)
31283130
(throw (error env
31293131
(str "Renamed symbol " original " not referred"))))
3130-
(assoc m renamed (symbol (str lib) (str original))))
3132+
(assoc m renamed (symbol "js " (str (str lib) "." (str original)))))
31313133
{} renamed)}))))))
31323134

31333135
(defn parse-require-spec [env macros? deps aliases spec]
@@ -3432,8 +3434,7 @@
34323434
:use-macros (comp (partial parse-require-spec env true deps aliases)
34333435
(partial use->require env))
34343436
:import (partial parse-import-spec env deps)
3435-
;:require-global #(parse-global-require-spec env deps aliases %)
3436-
}
3437+
:require-global #(parse-global-require-spec env aliases %)}
34373438
valid-forms (atom #{:use :use-macros :require :require-macros :import})
34383439
reload (atom {:use nil :require nil :use-macros nil :require-macros nil})
34393440
reloads (atom {})
@@ -3442,8 +3443,8 @@
34423443
rename-macros :rename-macros imports :import :as params}
34433444
(reduce
34443445
(fn [m [k & libs :as libspec]]
3445-
(when-not (#{:use :use-macros :require :require-macros :import} k)
3446-
(throw (error env (str "Only :refer-clojure, :require, :require-macros, :use, :use-macros, and :import libspecs supported. Got " libspec " instead."))))
3446+
(when-not (#{:use :use-macros :require :require-macros :require-global :import} k)
3447+
(throw (error env (str "Only :refer-clojure, :require, :require-macros, :use, :use-macros, :require-global and :import libspecs supported. Got " libspec " instead."))))
34473448
(when-not (@valid-forms k)
34483449
(throw (error env (str "Only one " k " form is allowed per namespace definition"))))
34493450
(swap! valid-forms disj k)

src/test/clojure/cljs/analyzer_tests.clj

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -394,6 +394,14 @@
394394
'{:use {Date js Symbol js}
395395
:rename {JSSymbol js/Symbol}}))))
396396

397+
(deftest test-parse-require-global
398+
(let [parsed (ana/parse-global-require-spec {} (atom {:fns {}})
399+
'[React :refer [createElement] :as react])]
400+
(is (= parsed
401+
'{:require {react js/React
402+
React js/React}
403+
:use {createElement js/React}}))))
404+
397405
(deftest test-cljs-1785-js-shadowed-by-local
398406
(let [ws (atom [])]
399407
(ana/with-warning-handlers [(collecting-warning-handler ws)]

0 commit comments

Comments
 (0)