欢迎!请参阅关于页面获取更多关于这个工作方式的详细信息。
评论人:roman01la
提交了一个带有测试用例的补丁。
评论人:mfikes
当与 CLJS-3085 一起应用时
CLJS-3086.patch 通过了 CI 和 Canary (/)
CLJS-3086.patch 添加到 Patch Tender (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)警告:cljs.core/+ 要求所有参数必须是数字,但在此行 1 处得到了 [clj-nil number] 的值警告:cljs.core/+ 要求所有参数必须是数字,但在此行 1 处得到了 [clj-nil number] 的值
`
我还没有深入考虑这个问题,但它提出了一个很好的哲学问题,即如果您有如下代码,这里是否存在类型错误?
(if nil (+ nil 1) 0)
我的最初直觉是,虽然这就像森林里掉落的树,我们可能能够以某种方式解决它,但也许应该纠正那个有毛病的宏。无论如何,我不打算花太多时间纠结于此,至少想与你分享。
独立于此票据,我们有一些先例:这会在 1.10.520 版本中触发诊断
`cljs.user=> (when false (inc false))
^
警告:cljs.core/+ 要求所有参数必须是数字,但在此行 1 处得到了 [boolean number] 的值nil `
我认为应该修复这个宏。上面显示,尽管您可以从静态上证明某个代码路径不会执行,但仍然会在该路径上的代码触发分析警告。