Skip to content

Commit a0c3c41

Browse files
committed
wip
1 parent 5027991 commit a0c3c41

File tree

2 files changed

+43
-1
lines changed

2 files changed

+43
-1
lines changed

src/main/clojure/cljs/analyzer.cljc

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3039,6 +3039,24 @@
30393039
ret
30403040
(recur fs ret true)))))
30413041

3042+
;; this case is like :refer-clojure it cannot be used as a spec parser
3043+
(defn parse-global-refer-spec
3044+
[env spec]
3045+
(let [{referred :refer-global
3046+
renamed :rename} (apply hash-map (concat [:refer-global] [spec]))
3047+
referred-without-renamed (remove (set (keys renamed)) referred)]
3048+
;; TODO: refer validation, this can be lifted easily into common helper from parse-require-spec
3049+
;; TODO: rename validation, harder to lift
3050+
{:use (zipmap referred-without-renamed (repeat 'js))
3051+
:rename (into {}
3052+
(map (fn [[orig new-name]]
3053+
[new-name (symbol "js" (str orig))]))
3054+
renamed)}))
3055+
3056+
#_(defn parse-global-require-spec
3057+
[env deps aliases spec]
3058+
)
3059+
30423060
(defn parse-require-spec [env macros? deps aliases spec]
30433061
(if (or (symbol? spec) (string? spec))
30443062
(recur env macros? deps aliases [spec])
@@ -3292,6 +3310,10 @@
32923310
(select-keys new deep-merge-keys))))
32933311
new))
32943312

3313+
(def ns-spec-cases
3314+
#{:use :use-macros :require :require-macros
3315+
:import :refer-global :require-global})
3316+
32953317
(defmethod parse 'ns
32963318
[_ env [_ name & args :as form] _ opts]
32973319
(when-not *allow-ns*
@@ -3335,7 +3357,10 @@
33353357
(partial use->require env))
33363358
:use-macros (comp (partial parse-require-spec env true deps aliases)
33373359
(partial use->require env))
3338-
:import (partial parse-import-spec env deps)}
3360+
:import (partial parse-import-spec env deps)
3361+
;:refer-global (partial parse-global-refer-spec env)
3362+
;:require-global #(parse-global-require-spec env deps aliases %)
3363+
}
33393364
valid-forms (atom #{:use :use-macros :require :require-macros :import})
33403365
reload (atom {:use nil :require nil :use-macros nil :require-macros nil})
33413366
reloads (atom {})

src/test/clojure/cljs/analyzer_tests.clj

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1533,3 +1533,20 @@
15331533
(ana/gen-constant-id '+)))
15341534
(is (not= (ana/gen-constant-id 'foo.bar)
15351535
(ana/gen-constant-id 'foo$bar))))
1536+
1537+
;; -----------------------------------------------------------------------------
1538+
;; :refer-global / :require-global ns parsing tests
1539+
1540+
#_(deftest test-refer-global
1541+
(binding [ana/*cljs-ns* ana/*cljs-ns*]
1542+
(let [parsed-ns (env/with-compiler-env test-cenv
1543+
(analyze test-env
1544+
'(ns foo.core
1545+
(:refer-global [Date] :rename {Date MyDate}))))]
1546+
)))
1547+
1548+
(comment
1549+
1550+
(clojure.test/test-vars [#'test-refer-global])
1551+
1552+
)

0 commit comments

Comments
 (0)