File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 798798 (not me) false
799799 :else
800800 (let [seen' (conj seen x)
801- [x' externs'] me]
802- ( if-some [tag ( -> x' meta :tag )]
803- ( let [pre' ( into [] ( map symbol )
804- ( string/split ( str ( alias->type tag tag)) #" \. " )) ]
801+ [x' externs'] me
802+ xmeta ( meta x' )]
803+ ( if ( and ( = 'Function ( :tag xmeta)) ( :ctor xmeta) )
804+ ( let [pre' [( :ctor xmeta)] ]
805805 (or (has-extern?* (into pre' (next pre)) top top seen')
806806 (has-extern?* (into (conj pre' 'prototype) (next pre)) top top seen')))
807807 (recur (next pre) externs' top seen'))))))))
Original file line number Diff line number Diff line change 3939 (if-let [^JSTypeExpression ty (.getType info)]
4040 {:tag (get-type* ty)}
4141 (if (or (.isConstructor info) (.isInterface info))
42- {:tag 'Function}
42+ (let [qname (symbol (.. node getFirstChild getQualifiedName))]
43+ (cond-> {:tag 'Function}
44+ (.isConstructor info) (merge {:ctor qname})
45+ (.isInterface info) (merge {:iface qname})))
4346 (if (.hasReturnType info)
4447 {:tag 'Function
4548 :ret-tag (get-type* (.getReturnType info))})))))))
Original file line number Diff line number Diff line change 619619 '(let [y 1 ] (def y 2 ))))]
620620 (is (some? (-> parsed :expr :ret :var-ast )))))
621621
622+ (deftest test-infer-externs-basic
623+ (let [externs (externs/externs-map
624+ (closure/load-externs
625+ {:externs [" src/test/externs/test.js" ]
626+ :use-only-custom-externs true }))]
627+ (is (true ? (a/has-extern? '[Foo] externs)))
628+ (is (false ? (a/has-extern? '[foo] externs)))
629+ (is (true ? (a/has-extern? '[baz] externs)))
630+ (is (false ? (a/has-extern? '[Baz] externs)))))
631+
632+ (deftest test-infer-externs-default
633+ (let [externs (externs/externs-map )]
634+ (is (true ? (a/has-extern? '[console] externs)))
635+ (is (true ? (a/has-extern? '[console log] externs)))
636+ (is (true ? (a/has-extern? '[Number isNaN] externs)))))
637+
622638(comment
623639 (require '[cljs.compiler :as cc])
624640 (require '[cljs.closure :as closure])
673689 (map (comp :externs second)
674690 (get @test-cenv ::a/namespaces ))))))
675691
692+ (a/has-extern?* '[baz]
693+ (externs/externs-map
694+ (closure/load-externs
695+ {:externs [" src/test/externs/test.js" ]
696+ :use-only-custom-externs true })))
697+
676698 ; ; works, does not generate extern
677699 (let [test-cenv (atom {::a/externs (externs/externs-map
678700 (closure/load-externs
You can’t perform that action at this time.
0 commit comments