评论者:kamn
所以我想对这个补丁提出一些反馈,我会尝试解释每个部分的理由。
问题在于,函数只在一次被解析后就知道了它的参数数量。
所以我们需要在第二次遍历中检查参数问题
首先,增加了两个新变量。
-activate-second-pass-warnings:布尔型。基本上如果你想要打开第二次遍历的警告
-second-pass-cljs-warnings:集合。目前我们只有 :fn-arity,但我认为最好让它通用。
所以首先是对 analyze-fn-methods-pass2 函数的修改。
在这里我们不使用 no-warn 标签,而是有了一些新的功能。
目标是关闭所有功能,只打开第二次遍历的警告
所以如果 activate-second-pass-warnings 是 false,就使用 no-warn,否则它会使用新的代码部分。
default-warning-handler 也被修改了。在检查警告是否打开后,它会检查警告是否是第二次遍历的警告
如果现在可以激活那个警告。如果 activate-second-pass-warnings 为 false 并且仍然存在警告,则意味着它是一个第二次遍历警告
在第二次遍历中,所以我们激活它。
我还尽量在 cljs.analyzer 中进行所有修改。
最初,我设 cljs-warnings :fn-arity 为 false,并且只有在第二次遍历时才会被激活。
然而,repl 部分只是将所有内容设置为 true(并关闭 select 部分,如 ns 错误)。
因此,我决定不修改这些部分,而是保持其他文件与分析器的接口相同。