抑制或解决 goog.base 中的编译器错误

Suppressing or resolving compiler errors in goog.base

我在源代码上使用 Closure Compiler,最近决定通过 --jscomp_warning=reportUnknownTypes 启用最严格的模式。 las,它在 goog.base 本身内部触发了很多警告!我已经修复了我自己代码中的所有问题,现在我正在寻找一种方法来解决闭包库代码中的 silence/remove 错误。

我试图修复 base.js 中的错误,但很快意识到这是不可行的。文件中大约有 108 个错误,在大多数情况下它们是 真正的错误 因为 goog.base 不太关心类型:通常的做法是定义一个类型像 {?}{*}.

我还尝试使用 --warnings_whitelist_file 来消除我不关心的警告,但它也没有用。对于错误:

..\js\google\base.js:204: WARNING - could not determine the type of this expression cur[part] = opt_object; ^

我在白名单文件中尝试了不同的形式,但 none 有效:

..\js\google\base.js:204 could not determine the type of this expression ..\js\google\base.js:204 WARNING - could not determine the type of this expression ..\js\google\base.js:204 could not determine the type of this expression ..\js\google\base.js:204 WARNING - could not determine the type of this expression ../js/google/base.js:204 could not determine the type of this expression ../js/google/base.js:204 WARNING - could not determine the type of this expression ..\js\google\base.js:204 WARNING - could not determine the type of this expression cur[part] = opt_object;

有没有人有可行的解决方案来启用此模式并且不会被闭包库本身的错误发送垃圾邮件?

我使用最新的 Closure 编译器,它是: Version: v20150315 Built on: 2015/03/17 14:18

因此,我决定在 base.js 中采用静音警告的方式。为此,我调查了编译器源代码(感谢作者,它是开源的),我发现标志描述与其实际效果不符。描述说:

A file containing warnings to suppress. Each line should be of the form <file-name>:<line-number>? <warning-description>

但实际上这个守卫会拦截匹配的错误将它们转换为警告。此外,行号被完全忽略。我看不到在这种行为中使用此标志,但我敢打赌作者有充分的理由以这种方式实现它。

无论如何,我从主分支中分叉并修复了 flag 的行为。现在匹配的错误和警告实际上被抑制(沉默)。现在在匹配中考虑行号。

白名单文件的语法与 error/warning 输出非常相似。例如,如果您收到如下错误(或警告):

..\js\google\base.js:120: ERROR - could not determine the type of this expression if (goog.getObjectByName(namespace)) { ^

则白名单文件中的相关记录为:

..\js\google\base.js:120 could not determine the type of this expression

您可以将多行错误的内容作为注释添加到它们前面 # 但只有第一行将用于匹配。

如果这是您需要的,您可以通过以下两种方式之一获取二进制文件: