File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 815815 (get-in externs (conj '[Number] x)))))
816816 (-> (last pre) str (string/starts-with? " cljs$" )))))
817817
818+ (defn js-tag
819+ ([pre]
820+ (js-tag pre :tag ))
821+ ([pre tag-type]
822+ (js-tag pre :tag (get @env/*compiler* ::externs )))
823+ ([pre tag-type externs]
824+ (js-tag pre tag-type externs externs))
825+ ([pre tag-type externs top]
826+ (when-let [[p externs' :as me] (find externs (first pre))]
827+ (let [tag (-> p meta tag-type)]
828+ (if (= (count pre) 1 )
829+ (when tag (symbol " js" (str (alias->type tag tag))))
830+ (or (js-tag (next pre) tag-type externs' top)
831+ (js-tag (into '[prototype] (next pre)) tag-type (get top tag) top)))))))
832+
818833(defn resolve-var
819834 " Resolve a var. Accepts a side-effecting confirm fn for producing
820835 warnings about unresolved vars."
830845 (when-not (has-extern? pre)
831846 (swap! env/*compiler* update-in
832847 (into [::namespaces (-> env :ns :name ) :externs ] pre) merge {}))
833- {:name sym
834- :ns 'js
835- :tag (with-meta 'js {:prefix pre})}))
848+ (merge
849+ {:name sym
850+ :ns 'js
851+ :tag (with-meta (or (js-tag pre) 'js) {:prefix pre})}
852+ (when-let [ret-tag (js-tag pre :ret-tag )]
853+ {:ret-tag ret-tag}))))
836854 (let [s (str sym)
837855 lb (get locals sym)]
838856 (cond
Original file line number Diff line number Diff line change 646646 {:externs [" src/test/externs/test.js" ]
647647 :use-only-custom-externs true }))}))
648648
649+ (deftest test-js-tag
650+ (let [externs (externs/externs-map )]
651+ (is (= 'js/Console (a/js-tag '[console] :tag externs)))
652+ (is (= 'js/Function (a/js-tag '[console log] :tag externs)))
653+ (is (= 'js/Boolean (a/js-tag '[Number isNaN] :ret-tag externs)))))
654+
649655(deftest test-externs-infer
650656 (binding [a/*cljs-ns* a/*cljs-ns*]
651657 (e/with-compiler-env externs-cenv
You can’t perform that action at this time.
0 commit comments