Skip to content

Commit cc7404a

Browse files
sgroveswannodette
authored andcommitted
CLJS-1324: Compiler fails to raise warning/error when invoking a keyword without arguments
Warn during analyses when invoking a keyword without any arguments
1 parent 23e6636 commit cc7404a

File tree

2 files changed

+10
-6
lines changed

2 files changed

+10
-6
lines changed

src/main/clojure/cljs/analyzer.cljc

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2188,12 +2188,15 @@
21882188
(let [enve (assoc env :context :expr)
21892189
fexpr (analyze enve f)
21902190
argc (count args)
2191-
^boolean fn-var? (-> fexpr :info :fn-var)]
2192-
(when fn-var?
2191+
^boolean fn-var? (-> fexpr :info :fn-var)
2192+
kw? (= 'cljs.core/Keyword (:tag fexpr))]
2193+
(when (or fn-var? kw?)
21932194
(let [{:keys [^boolean variadic max-fixed-arity method-params name]} (:info fexpr)]
2194-
(when (and (not (valid-arity? argc method-params))
2195-
(or (not variadic)
2196-
(and variadic (< argc max-fixed-arity))))
2195+
(when (or (and kw? (zero? argc))
2196+
(and (not kw?)
2197+
(not (valid-arity? argc method-params))
2198+
(or (not variadic)
2199+
(and variadic (< argc max-fixed-arity)))))
21972200
(warning :fn-arity env {:name name :argc argc}))))
21982201
(let [deprecated? (-> fexpr :info :deprecated)
21992202
no-warn? (-> form meta :deprecation-nowarn)]

src/test/clojure/cljs/analyzer_tests.clj

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@
1313
(def warning-forms
1414
{:undeclared-var (let [v (gensym)] `(~v 1 2 3))
1515
:fn-arity '(do (defn x [a b] (+ a b))
16-
(x 1 2 3 4))})
16+
(x 1 2 3 4))
17+
:keyword-arity '(do (:argumentless-keyword-invocation))})
1718

1819
(defn warn-count [form]
1920
(let [counter (atom 0)

0 commit comments

Comments
 (0)