欢迎!请参阅 关于 页面以获取更多关于此如何工作的信息。
由 roman01la 写的评论
提交了一个带有测试用例的补丁。
由 mfikes 写的评论
在应用 CLJS-3085 后
CLJS-3086.patch 通过了 CI 和 Canary (/)
CLJS-3086.patch 已添加到补丁传递者 (i)
嗨,Roman,
这里是触发此补丁后警告的一段有趣的代码片段,这段代码位于标准库中
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)警告:cljs.core/+, 所有参数都必须是数字,但是 line 1 位置获得了 [clj-nil number]警告:cljs.core/+, 所有参数都必须是数字,但是 line 1 位置获得了 [clj-nil number]
`
我还没有深入考虑这个话题,但这引发了一个很好的哲学问题,即如果你有如下代码,是否存在类型错误?
(if nil (+ nil 1) 0)
我的初步感觉是,虽然这可能类似于森林里的树倒下,我们可能能够以某种方式解决它,但也许应该纠正有问题的宏。不管怎样,我还不想在这上面花费太多时间,至少想和你分享一下。
与这个工单无关,我们有一些先例:这将在1.10.520版本中触发诊断。
`cljs.user=> (when false (inc false))
^
警告:cljs.core/+, 所有参数都必须是数字,在行1获得[布尔类型 数字]nil `
我认为应该修复这个宏。上面的例子表明,尽管你可以静态地证明某个代码路径没有被采取,但分析警告会在该路径上启动。