欢迎!请查看关于页面获取更多信息。
评论者:roman01la
提交了一个带有测试用例的补丁。
评论者:mfikes
当与CLJS-3085一起应用时
CLJS-3086.patch通过CI和Canary (/)
CLJS-3086.patch添加到补丁堤 (i)
罗马,
这里有一些有趣的标准库代码,这个补丁会触发警告
https://github.com/clojure/clojurescript/blob/c87d61e54fbbeae390e522ba315f0207fb0fed75/src/main/cljs/cljs/spec/alpha.cljc#L264
`cljs.user=> (s/coll-of any? :kind any? :min-count 1)WARNING: cljs.core/+, 所有参数必须是数字,在行1处获得 [clj-nil number]WARNING: cljs.core/+, 所有参数必须是数字,在行1处获得 [clj-nil number]
`
我还没有仔细想过这个问题,但这提出了一个很好的哲学问题:如果你有如下所示的代码,是否存在类型错误?
(if nil (+ nil 1) 0)
我的初步想法是,虽然这像是在森林里掉落的树,我们可能以某种方式处理它,也许我们应该纠正那个有问题的宏。无论如何,我还不想花太多时间去深思这个问题,只想至少和你分享一下。
与这个工单无关,我们有一些先例:这在大版本1.10.520中引发了一个诊断。
`cljs.user=> (when false (inc false))
^
WARNING: cljs.core/+, 所有参数必须是数字,但在第1行收到了 [布尔 布尔] 替代品nil `
我认为应该修复这个宏。上面的代码显示,即使你可以静态地证明某个代码路径不会被采取,分析警告也会触发那个路径上的代码。