From 52a2c2d8888df3f4d9bc7d4c65bd00c025ecb147 Mon Sep 17 00:00:00 2001 From: David Nolen Date: Mon, 1 May 2023 13:41:44 -0400 Subject: [PATCH 1/3] tag invokeable :node / :global nses as 'js --- src/main/clojure/cljs/analyzer.cljc | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) 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, From e889fafd5cf8f4e11149e7b59cf2d336533b0d70 Mon Sep 17 00:00:00 2001 From: David Nolen Date: Mon, 1 May 2023 14:12:10 -0400 Subject: [PATCH 2/3] add node-module-index to infer-test-helper --- src/test/clojure/cljs/externs_infer_tests.clj | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/test/clojure/cljs/externs_infer_tests.clj b/src/test/clojure/cljs/externs_infer_tests.clj index 6e52fd641..9cf0cb9c0 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 (%)))] From 4b89edff187d696a89924800141af7f349f539f7 Mon Sep 17 00:00:00 2001 From: David Nolen Date: Mon, 1 May 2023 14:42:34 -0400 Subject: [PATCH 3/3] add test case --- src/test/clojure/cljs/externs_infer_tests.clj | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/test/clojure/cljs/externs_infer_tests.clj b/src/test/clojure/cljs/externs_infer_tests.clj index 9cf0cb9c0..f832ed730 100644 --- a/src/test/clojure/cljs/externs_infer_tests.clj +++ b/src/test/clojure/cljs/externs_infer_tests.clj @@ -454,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