请在2024 Clojure状态调查!分享您的想法。

欢迎!请参阅关于页面以了解更多关于其工作原理的信息。

0
ClojureScript
我们应该能够得到类似如下警告:


cljs.user=> (+ nil 1)
WARNING: cljs.core/+, 所有参数必须是数字,在第1行得到[clj-nil 数字]而不是数字
1


首先,我们需要修复CLJS-3085。

但是有了这个,似乎只需将{{cljs.analyzer/numeric-type?}}对{{'clj-nil'}}返回{{false}}而不是{{true}}即可,通过删除为此创建的{{cond}}分支。

6 个答案

0

评论由:roman01la

提交了一个带有测试用例的补丁。

0

评论由:mfikes

当与CLJS-3085一起应用时

CLJS-3086.patch通过CI和Canary (/)

CLJS-3086.patch已添加到补丁豆腐(i)

0

评论由:mfikes

嘿,罗马

这是一段有趣的标准库代码,该补丁会触发警告

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 数字]
WARNING: cljs.core/+, 所有参数必须是数字,在第1行得到[clj-nil 数字]

object[cljs.spec.alpha.t_cljs$spec$alpha23729]

`

我还没有深入考虑这个问题,但这个问题提出了一个好的哲学问题,那就是如果你有以下这样的代码,是否存在类型错误?

(if nil (+ nil 1) 0)

我的初步感觉是,虽然这个问题就像森林中倒下的一棵树一样可能能够得到某种解决方案,但也许我们应该纠正那个有问题的宏。无论如何,我不想在这上面花费太多时间,但我至少想和你分享一下。

0

评论由:mfikes

与这个工单无关,我们有一些先例:这是在1.10.520版本中触发的诊断。

`
cljs.user=> (when false (inc false))

                    ^

警告:cljs.core/+, 所有参数都必须是数字,在第1行得到[布尔数]而不是[数字]。
nil
`

0

评论由:mfikes

我认为应该修复这个宏。上面显示,尽管你可以静态地证明某个代码路径不会被执行,但分析警告还是会因为那条路径的代码而触发。

0
...