2024 Clojure 调查问卷! 中分享您的想法。

欢迎!请参阅关于 页面,获取有关如何使用的更多信息。

0
ClojureScript
我们应该能够得到一个警告,比如


cljs.user=> (+ nil 1)
WARNING: cljs.core/+, 所有参数都必须是数字,在行 1 获取 [clj-nil number] 替代了,<cljs repl>
1


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

但有了它,这看起来就像将 {{cljs.analyzer/numeric-type?}} 返回 {{false}} 而不是对 {{'clj-nil}} 的 {{true}} 删除其 {{cond}} 分支一样简单。

6 个答案

0

评论由 roman01la 提出

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

0

评论由 mfikes 提出

当与 CLJS-3085 结合使用时

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

CLJS-3086.patch 已添加到 Patch Tender (i)

0

评论由 mfikes 提出

嗨 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/+, 所有参数都必须是数字,在行 1 获取 [clj-nil number]
WARNING: cljs.core/+, 所有参数都必须是数字,在行 1 获取 [clj-nil number]

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
...