diff --git a/src/main/clojure/cljs/analyzer.cljc b/src/main/clojure/cljs/analyzer.cljc index c6dee722c..2bbc2a7ea 100644 --- a/src/main/clojure/cljs/analyzer.cljc +++ b/src/main/clojure/cljs/analyzer.cljc @@ -1220,11 +1220,13 @@ :node {:name (symbol (str current-ns) (munge-node-lib (resolve-ns-alias env ns))) :op :js-var - :ns current-ns} + :ns current-ns + :tag 'js} :global {:name (symbol (str current-ns) (munge-global-export (resolve-ns-alias env ns))) :op :js-var - :ns current-ns}))) + :ns current-ns + :tag 'js}))) (defn resolve-import "goog.modules are deterministically assigned to a property of the namespace, diff --git a/src/test/clojure/cljs/externs_infer_tests.clj b/src/test/clojure/cljs/externs_infer_tests.clj index 6e52fd641..f832ed730 100644 --- a/src/test/clojure/cljs/externs_infer_tests.clj +++ b/src/test/clojure/cljs/externs_infer_tests.clj @@ -51,7 +51,7 @@ (is (= 'js/Foo (ana/js-tag '[baz] :ret-tag externs))))) (defn infer-test-helper - [{:keys [forms externs warnings warn js-dependency-index with-core? opts]}] + [{:keys [forms externs warnings warn js-dependency-index node-module-index with-core? opts]}] (let [test-cenv (atom (cond-> (if with-core? @@ -60,7 +60,8 @@ {::ana/externs (externs/externs-map (closure/load-externs {:externs (or externs [])}))}) - js-dependency-index (assoc :js-dependency-index js-dependency-index))) + js-dependency-index (assoc :js-dependency-index js-dependency-index) + node-module-index (assoc :node-module-index node-module-index))) wrap (if with-core? #(comp/with-core-cljs nil %) #(do (%)))] @@ -453,6 +454,27 @@ "Object.someProperty;"]) res))))) +(deftest test-cljs-3381 + (testing "invokeable js namespaces not hinted properly" + (let [ws (atom []) + res (infer-test-helper + {:node-module-index #{"markdown-it"} + :forms '[(ns foo.core + (:require [markdown-it])) + (defonce mdi + (doto (new markdown-it + (js-obj + "linkify" true + "typographer" true)) + (.renderInline mdi "hi")))] + :warnings ws + :warn true + :with-core? false + :target :nodejs})] + (is (= (unsplit-lines + ["Object.renderInline;"]) + res))))) + (comment (binding [ana/*cljs-ns* ana/*cljs-ns*] (ana/no-warn