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

欢迎!请查看 关于 页面以了解此工作的更多信息。

0
ClojureScript
我们应该能够获得类似于以下的警告


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


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

但是有了这个,通过删除其 {{cond}} 分支,将 {{cljs.analyzer/numeric-type?}} 返回 {{false}} 而不是 {{true}} 对于 {{'clj-nil'}} 似乎很简单。

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/+, all arguments must be numbers, got [clj-nil number] instead at line 1
WARNING: cljs.core/+, all arguments must be numbers, got [clj-nil number] instead at line 1

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

`

我还没有对此进行过多的考虑,但这对有如下代码的场景提出了一个很好的哲学问题,即如果您的代码如下所示,是否存在类型错误?

(如果nil,则加nil 1,否则0)

我的初步想法是,虽然这是树林中倒下的树,我们可能以某种方式解决,但也许更好的办法是纠正那个不受欢迎的宏。无论如何,我还不想在这方面花太多时间,但至少想与你分享。

0

评论者:mfikes

与此票据独立,我们有先例:这在1.10.520中触发诊断。

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

                    ^

警告:cljs.core/+,所有参数都必须是数字,在第1行得到了[布尔型 数字]代替
空值
`

0

评论者:mfikes

我认为应该修复这个宏。上面显示,即使你可以用静态证明某个代码路径不会被采取,分析警告仍然会触发该路径上的代码。

0
...