2024 年 Clojure 调查中分享您的想法!

欢迎!请参阅关于页面以获取有关其工作方式的一些更多信息。

0
ClojureScript
我们应该能获取到类似这样的警告:


cljs.user=> (+ nil 1)
WARNING: cljs.core/+, all arguments must be numbers, got [clj-nil number] instead at line 1 <cljs repl>
1


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

但是有了这一点,它似乎与将 {{cljs.analyzer/numeric-type?}} 返回 {{false}} 而不是返回 {{true}} 相当简单,对于 {{'clj-nil'}} 删除 {{cond}} 分支即可。

6 个答案

0

评论由:roman01la 提供

提交了一个包含测试用例的补丁。

0

评论由:mfikes 提供

当应用 CLJS-3085

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

CLJS-3086.patch 已添加到补丁仓库 (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)
警告:cljs.core/+ 函数的所有参数必须是数字,但在第 1 行得到了 clj-nil number
警告: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 行得到了 [boolean number]
nil
`

0

评论由:mfikes 提供

我认为这个宏应该得到修复。上面的例子表明,即使你可以静态地证明不会执行某个代码路径,但该路径上的代码仍然会触发分析警告。

0
相关链接:[https://clojure.atlassian.net/browse/CLJS-3086](https://clojure.atlassian.net/browse/CLJS-3086)(由 mflies 提交)
...