-
Notifications
You must be signed in to change notification settings - Fork 1.2k
Warnings
Closure Compiler has a --warning_level
flag that gives you a few high-level options to control what warnings you see. The --warning_level
flag gives you an easy way to choose the most common options. But even --warning_level=VERBOSE
doesn't give you all the warnings that Closure Compiler can emit, and sometimes you want more fine-grained control.
Closure Compiler has an API for configuring the errors and warnings that you would like to see, and what level they're emitted at.
Flag API | Java API | Effect |
---|---|---|
--jscomp_error=<group> |
options.setWarningLevel("<group>", CheckLevel.ERROR); |
Makes all warnings of the given group to build-breaking error. |
--jscomp_warning=<group> |
options.setWarningLevel("<group>", CheckLevel.WARNING); |
Makes all warnings of the given group a non-breaking warning. |
--jscomp_off=<group> |
options.setWarningLevel("<group>", CheckLevel.OFF); |
Silences all warnings of the given group. |
In the examples above, <group>
is a pre-defined category of warnings.
Run the compiler with the --help flag to get a comprehensive up-to-date list. This may be out of date. Or consult DiagnosticGroups.java.
The following table describes the available diagnostic groups.
Name | Effect | Default Value |
---|---|---|
accessControls | Warnings when @deprecated, @private, @protected, or @package are violated. | OFF |
ambiguousFunctionDecl | [DELETED in v20200101] Warnings about ambiguous definitions of functions. On Chrome, if (false) { function f() {} } declared 'f' in the global scope anyway. Future versions of javascript forbid this, because the actual semantics differ between browsers. |
ERROR |
checkDebuggerStatement | Warnings when the 'debugger' keyword is used. | OFF |
checkEventfulObjectDisposal | [DELETED in v20191111] Warnings about undisposed eventful objects. | OFF |
checkRegExp | Warnings about weird regular expression literals | OFF |
checkTypes | Type-checking | WARNING |
checkVars | Warnings when vars are not declared or declared multiple times in the global scope. | ERROR |
closureDepMethodUsageChecks | Warnings about misused goog.provide/goog.require calls | ERROR |
conformanceViolations | Warnings about conformance violations and possible conformance violations. | WARNING |
constantProperty | Warnings when a member property marked @const is reassigned. | OFF |
const | Warnings when a variable or member property marked @const is reassigned. | OFF |
deprecatedAnnotations | Warnings when using annotations that are deprecated | OFF |
deprecated | Warnings when non-deprecated code accesses code that's marked @deprecated | OFF |
duplicateMessage | Warnings when two i18n messages have the same id | ERROR |
duplicate | Warnings when a variable is declared twice in the global scope | ERROR |
es3 | [DELETED in v20200101] Warnings about EcmaScript3 | ERROR |
es5Strict | Warnings about EcmaScript5 strict mode. See here for how to turn these off. | ERROR |
externsValidation | Warnings about malformed externs files | WARNING |
extraRequire | Warnings about unnecessary goog.require calls | OFF |
fileoverviewTags | [DELETED in v20200101] Warnings about duplicate @fileoverview tags | WARNING |
globalThis | Warnings about improper use of the global this. | WARNING |
internetExplorerChecks | [DELETED in v20200101] Warnings about syntax error on Internet Explorer. | ERROR |
invalidCasts | Warnings about invalid type casts. | WARNING |
misplacedSuppress | Warnings about misplaced @suppress annotations | WARNING |
misplacedTypeAnnotation | Warnings about jsdoc type annotations that are misplaced | WARNING |
missingGetCssName | Warnings about strings that should only be used inside calls to goog.getCssName | OFF |
missingProperties | Warnings about whether a property will ever be defined on an object. Part of type-checking. | OFF |
missingProvide | Warnings if missing a goog.provide('Foo') when defining a Foo class | OFF |
missingRequire | Warnings if missing a goog.require('Foo') when a new Foo() is encountered | OFF |
missingReturn | Warnings if missing return in a function which a non-void return type | OFF |
newCheckTypes | [DELETED in v20200101] Warnings from new type checker | OFF |
nonStandardJsDocs | Warnings when JSDoc has annotations that the compiler thinks you misspelled. | WARNING |
reportUnknownTypes | Warnings for any place in the code where type is inferred to ?. NOT RECOMMENDED! | OFF |
strictCheckTypes | Combines strictMissingProperties and strictPrimitiveOperators
|
OFF |
strictMissingProperties | Warnings for missing properties that forbid accessing subclass props off superclasses | OFF |
strictModuleDepCheck | Warnings about all references potentially violating module dependencies | OFF |
strictPrimitiveOperators | Warnings about legal operand types for primitive operators like + and -
|
OFF |
suspiciousCode | Warning about things like missing semicolons and comparisons to NaN | WARNING |
tweakValidation | Warnings about goog.tweak primitives | OFF |
typeInvalidation | Warn about properties that cannot be disambiguated when using type based optimizations | OFF |
undefinedNames | Warnings when a property of a global name is not defined. | OFF |
undefinedVars | Warnings when a variable is never defined. | ERROR |
unknownDefines | Warnings when unknown @define values are specified. | WARNING |
unusedLocalVariables | Warnings about unused variables in local scopes | OFF |
unusedPrivateMembers | Warnings about @private class properties that are unused | OFF |
untranspilableFeatures | Warnings about use of features that cannot be transpiled down to the specified --language_out
|
ERROR |
useOfGoogBase | [DEPRECATED]Warnings about usages of goog.base, which is deleted from Closure library | OFF |
uselessCode | Warnings when the compiler sees useless code that it plans to remove. | WARNING |
violatedModuleDep | Warnings when there are references in earlier modules to variables defined in later modules | ERROR |
visibility | Warnings when @private and @protected are violated. | OFF |
If there is a category of warnings that you would like to configure but is not listed in the table above, it is easy to define a new one.
- Find the unique identifier of the warnings that you'd like to configure.
- Create a new DiagnosticGroup that gives this warning category a human-readable name, and add it to our central repository of warnings categories: https://github.com/google/closure-compiler/blob/master/src/com/google/javascript/jscomp/DiagnosticGroups.java
- Send us a patch!
This is how we "canary" new warnings until we feel they're stable.
You can also silence warnings by adding JSDoc annotations to your code. All of the warnings categories above should be available for use in a @suppress tag in a @fileoverview JSDoc comment or a function JSDoc comment. However check ParserConfig.properties for a comprehensive list of suppressible warnings.
For example,
/**
* @fileoverview This is a file where deprecation checks are disabled.
* @suppress {deprecated}
*/
/**
* This is a function where type checking is disabled.
* @suppress {checkTypes}
*/
function f() { /** ... */ }
There is also one warning category that you can suppress with @suppress tags, but is not available from the command-line.
/** @suppress {duplicate} */ foo.prop = ...
Suppresses warnings about a declaration of the same method or property twice in the global scope.
If you want to suppress many warnings at once, you can write
/** @suppress {duplicate, accessControls} */ function f() { ... }
or
/** @suppress {duplicate|accessControls} */ function f() { ... }