欢迎!请查看 关于 页面以了解此工作的更多信息。
评论者:roman01la
提交了一个包含测试用例的补丁。
评论者:mfikes
当与 CLJS-3085 一起应用
CLJS-3086.patch 通过 CI 和 Canary (/)
CLJS-3086.patch 已添加到 Patch Tender (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)WARNING: cljs.core/+, all arguments must be numbers, got [clj-nil number] instead at line 1WARNING: cljs.core/+, all arguments must be numbers, got [clj-nil number] instead at line 1
`
我还没有对此进行过多的考虑,但这对有如下代码的场景提出了一个很好的哲学问题,即如果您的代码如下所示,是否存在类型错误?
(如果nil,则加nil 1,否则0)
我的初步想法是,虽然这是树林中倒下的树,我们可能以某种方式解决,但也许更好的办法是纠正那个不受欢迎的宏。无论如何,我还不想在这方面花太多时间,但至少想与你分享。
与此票据独立,我们有先例:这在1.10.520中触发诊断。
`cljs.user=> (when false (inc false))
^
警告:cljs.core/+,所有参数都必须是数字,在第1行得到了[布尔型 数字]代替空值 `
我认为应该修复这个宏。上面显示,即使你可以用静态证明某个代码路径不会被采取,分析警告仍然会触发该路径上的代码。