|
3083 | 3083 | [new-name (symbol "js" (str orig))]))
|
3084 | 3084 | rename)}))))
|
3085 | 3085 |
|
3086 |
| -#_(defn parse-global-require-spec |
| 3086 | +(defn parse-global-require-spec |
3087 | 3087 | [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)})))))) |
3089 | 3133 |
|
3090 | 3134 | (defn parse-require-spec [env macros? deps aliases spec]
|
3091 | 3135 | (if (or (symbol? spec) (string? spec))
|
|
0 commit comments