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 980980(defn normalize-js-tag [x]
981981 ; ; if not 'js, assume constructor
982982 (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 })]))}))
986987 x))
987988
988989(defn ->type-set
10821083 (recur (next pre) externs' top
10831084 (update ret :resolved conj x))))))))))
10841085
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+
10851096(defn has-extern?*
10861097 [pre externs]
10871098 (boolean (resolve-extern pre externs)))
36003611 (let [pre (-> tag meta :prefix )]
36013612 (when-not (has-extern? pre)
36023613 (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 {}))))
36043616 (case dot-action
36053617 ::access (let [children [:target ]]
36063618 {:op :host-field
Original file line number Diff line number Diff line change 2323 " goog.isArrayLike;" " Java.type;" " Object.out;" " Object.out.println;"
2424 " Object.error;" " Object.error.println;" ])
2525
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+
2646(deftest test-resolve-extern
2747 (let [externs
2848 (externs/externs-map
233253
234254(comment
235255
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+
236265 (clojure.test/test-vars [#'test-type-hint-infer-unknown-method])
237266
238267 )
You can’t perform that action at this time.
0 commit comments