Skip to content

Commit 1ce164f

Browse files
committed
copy over basic shape of parse-global-require-spec
1 parent 3e50ebe commit 1ce164f

File tree

1 file changed

+46
-2
lines changed

1 file changed

+46
-2
lines changed

src/main/clojure/cljs/analyzer.cljc

Lines changed: 46 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3083,9 +3083,53 @@
30833083
[new-name (symbol "js" (str orig))]))
30843084
rename)}))))
30853085

3086-
#_(defn parse-global-require-spec
3086+
(defn parse-global-require-spec
30873087
[env deps aliases spec]
3088-
)
3088+
(if (or (symbol? spec) (string? spec))
3089+
(recur env deps aliases [spec])
3090+
(do
3091+
(basic-validate-ns-spec env false spec)
3092+
(let [[lib & opts] spec
3093+
{alias :as referred :refer renamed :rename
3094+
:or {alias (if (string? lib)
3095+
(symbol (munge lib))
3096+
lib)}}
3097+
(apply hash-map opts)
3098+
referred-without-renamed (seq (remove (set (keys renamed)) referred))
3099+
[rk uk renk] [:require :use :rename]]
3100+
(when-not (or (symbol? alias) (nil? alias))
3101+
(throw
3102+
(error env
3103+
(parse-ns-error-msg spec
3104+
":as must be followed by a symbol in :require / :require-macros"))))
3105+
(when (some? alias)
3106+
(let [lib' ((:fns @aliases) alias)]
3107+
(when (and (some? lib') (not= lib lib'))
3108+
(throw (error env (parse-ns-error-msg spec ":as alias must be unique"))))
3109+
(when (= alias 'js)
3110+
(when-not (= lib (get-in @aliases [:fns 'js])) ; warn only once
3111+
(warning :js-used-as-alias env {:spec spec})))
3112+
(swap! aliases update-in [:fns] conj [alias lib])))
3113+
(when-not (or (and (sequential? referred)
3114+
(every? symbol? referred))
3115+
(nil? referred))
3116+
(throw
3117+
(error env
3118+
(parse-ns-error-msg spec
3119+
":refer must be followed by a sequence of symbols in :require / :require-macros"))))
3120+
(swap! deps conj lib)
3121+
(merge
3122+
(when (some? alias)
3123+
{rk (merge {alias lib} {lib lib})})
3124+
(when (some? referred-without-renamed)
3125+
{uk (apply hash-map (interleave referred-without-renamed (repeat lib)))})
3126+
(when (some? renamed)
3127+
{renk (reduce (fn [m [original renamed]]
3128+
(when-not (some #{original} referred)
3129+
(throw (error env
3130+
(str "Renamed symbol " original " not referred"))))
3131+
(assoc m renamed (symbol (str lib) (str original))))
3132+
{} renamed)}))))))
30893133

30903134
(defn parse-require-spec [env macros? deps aliases spec]
30913135
(if (or (symbol? spec) (string? spec))

0 commit comments

Comments
 (0)