Skip to content

Commit 910fbe3

Browse files
committed
CLJS-3170: Checked-arrays triggers on inferred Array type
if we see Array return type, convert to array. add test. CLJS-3189: Incorrect inference for goog.object/get if we have a generic type, set return type to 'any. add test
1 parent 973687b commit 910fbe3

File tree

2 files changed

+18
-1
lines changed

2 files changed

+18
-1
lines changed

src/main/clojure/cljs/externs.clj

+13-1
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,17 @@
4848
(recur (conj ret (conj (last ret) opt)) (drop 1 opts))
4949
(seq ret))))))
5050

51+
(defn generic? [t]
52+
(let [s (name t)]
53+
(boolean (re-matches #"[A-Z]" s))))
54+
55+
(defn gtype->cljs-type [t]
56+
(when t
57+
(cond
58+
(generic? t) 'any
59+
(= t 'Array) 'array
60+
:else t)))
61+
5162
(defn get-var-info [^Node node]
5263
(when node
5364
(let [info (.getJSDocInfo node)]
@@ -67,7 +78,8 @@
6778
arglists (params->method-params arglist)]
6879
{:tag 'Function
6980
:js-fn-var true
70-
:ret-tag (or (some-> (.getReturnType info) get-tag)
81+
:ret-tag (or (some-> (.getReturnType info)
82+
get-tag gtype->cljs-type)
7183
'clj-nil)
7284
:variadic? (boolean (some '#{var_args} arglist))
7385
:max-fixed-arity (count (take-while #(not= 'var_args %) arglist))

src/test/clojure/cljs/externs_parsing_test.clj

+5
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,11 @@
2929
(let [ns (externs/analyze-goog-file "goog/date/date.js" 'goog.date.month)]
3030
(is (= 12 (-> ns :defs count)))))
3131

32+
(deftest cljs-3170&3189
33+
(let [ns (externs/analyze-goog-file "goog/object/object.js")]
34+
(is (= 'any (get-in ns [:defs 'get :ret-tag])))
35+
(is (= 'array (get-in ns [:defs 'getKeys :ret-tag])))))
36+
3237
(comment
3338

3439
(test/run-tests)

0 commit comments

Comments
 (0)