File tree Expand file tree Collapse file tree 2 files changed +45
-4
lines changed Expand file tree Collapse file tree 2 files changed +45
-4
lines changed Original file line number Diff line number Diff line change 980
980
(defn normalize-js-tag [x]
981
981
; ; if not 'js, assume constructor
982
982
(if-not (= 'js x)
983
- (with-meta 'js
984
- {:prefix (conj (->> (string/split (name x) #"\. " )
985
- (map symbol) vec))})
983
+ (let [props (->> (string/split (name x) #"\. " ) (map symbol))
984
+ [xs y] ((juxt butlast last) props)]
985
+ (with-meta 'js
986
+ {:prefix (vec (concat xs [(with-meta y {:ctor true })]))}))
986
987
x))
987
988
988
989
(defn ->type-set
1082
1083
(recur (next pre) externs' top
1083
1084
(update ret :resolved conj x))))))))))
1084
1085
1086
+ (defn normalize-unresolved-prefix
1087
+ [pre]
1088
+ (cond-> pre
1089
+ (< 1 (count pre))
1090
+ (cond->
1091
+ (-> pre pop peek meta :ctor )
1092
+ (-> pop
1093
+ (conj 'prototype)
1094
+ (conj (peek pre))))))
1095
+
1085
1096
(defn has-extern?*
1086
1097
[pre externs]
1087
1098
(boolean (resolve-extern pre externs)))
3600
3611
(let [pre (-> tag meta :prefix )]
3601
3612
(when-not (has-extern? pre)
3602
3613
(swap! env/*compiler* update-in
3603
- (into [::namespaces (-> env :ns :name ) :externs ] pre) merge {}))))
3614
+ (into [::namespaces (-> env :ns :name ) :externs ]
3615
+ (normalize-unresolved-prefix pre)) merge {}))))
3604
3616
(case dot-action
3605
3617
::access (let [children [:target ]]
3606
3618
{:op :host-field
Original file line number Diff line number Diff line change 23
23
" goog.isArrayLike;" " Java.type;" " Object.out;" " Object.out.println;"
24
24
" Object.error;" " Object.error.println;" ])
25
25
26
+ (deftest test-normalize-js-tag
27
+ (is (= 'js (ana/normalize-js-tag 'js)))
28
+ (is (= '[Foo] (-> 'js/Foo ana/normalize-js-tag meta :prefix )))
29
+ (is (true ? (-> 'js/Foo ana/normalize-js-tag meta :prefix last meta :ctor )))
30
+ (is (= '[Foo Bar] (-> 'js/Foo.Bar ana/normalize-js-tag meta :prefix )))
31
+ (is (true ? (-> 'js/Foo.Bar ana/normalize-js-tag meta :prefix last meta :ctor ))))
32
+
33
+ (deftest test-normalize-unresolved-prefix
34
+ (let [pre (-> (ana/normalize-js-tag 'js/Foo) meta :prefix (conj 'bar))]
35
+ (is (= '[Foo prototype bar] (ana/normalize-unresolved-prefix pre))))
36
+ (let [pre '[Foo bar]]
37
+ (is (= '[Foo bar] (ana/normalize-unresolved-prefix pre)))))
38
+
39
+ (comment
40
+
41
+ (test/test-vars [#'test-normalize-js-tag])
42
+ (test/test-vars [#'test-normalize-unresolved-prefix])
43
+
44
+ )
45
+
26
46
(deftest test-resolve-extern
27
47
(let [externs
28
48
(externs/externs-map
233
253
234
254
(comment
235
255
256
+ (require '[clojure.java.io :as io]
257
+ '[cljs.closure :as cc])
258
+
259
+ (def externs
260
+ (-> (cc/js-source-file nil (io/file " src/test/externs/test.js" ))
261
+ externs/parse-externs externs/index-externs))
262
+
263
+ (ana/resolve-extern '[Foo gozMethod] externs)
264
+
236
265
(clojure.test/test-vars [#'test-type-hint-infer-unknown-method])
237
266
238
267
)
You can’t perform that action at this time.
0 commit comments