评论者:kamn
所以我在寻找对这个补丁的反馈,并尝试解释每个部分的推理。
问题是函数只有在其被解析一次之后才知道它的 arity。
所以我们需要在第二次遍历中检查 arity 问题
首先,添加了两个新的变量。
-activate-second-pass-warnings:布尔型。如果您希望启用第二次遍历的警告
-second-pass-cljs-warnings:集合。目前我们只有 :fn-arity,但我想应该让它通用。
所以首先是对 analyze-fn-methods-pass2 函数的修改。
在这里不使用 no-warn marco,而是有一些新的功能。
目标是将所有内容除第二次遍历警告之外都关闭
所以如果 activate-second-pass-warnings 是 false,则仅使用 no-warn,否则它将使用新的代码部分。
默认警告处理程序也被修改了。在检查警告是否存在之后,它会检查该警告是否是第二次遍历警告,并
现在是否可以激活。如果 activate-second-pass-warnings 为 false,并且警告仍然存在,这表示它是一个第二次遍历警告
因此我们激活它。
我还试图保持所有修改都在 cljs.analyzer 中。
最初,我将 cljs-warnings :fn-arity 设置为 false,它只会在第二次遍历时打开。
然而,repl 部分只是将所有内容设置为 true(并关闭选择的部分,如 ns 错误)。
因此我决定不修改这些部分,而是保持其他文件与分析器的接口相同。