Index: third_party/closure_compiler/compile.py |
diff --git a/third_party/closure_compiler/compile.py b/third_party/closure_compiler/compile.py |
index b40dcfc962f0dae97c82b16825b4604e2f056f15..90c114fe5360f47615b30b964bcde49c87e0b0dd 100755 |
--- a/third_party/closure_compiler/compile.py |
+++ b/third_party/closure_compiler/compile.py |
@@ -17,36 +17,58 @@ import build.inputs |
import processor |
import error_filter |
+CURRENT_DIR = os.path.join(os.path.dirname(__file__)) |
Dan Beam
2015/05/12 04:22:37
_CURRENT_DIR
Jeremy Klein
2015/05/12 04:47:49
Done.
|
+ |
class Checker(object): |
"""Runs the Closure compiler on given source files to typecheck them |
and produce minified output.""" |
+ _COMMON_JSCOMP_ERROR = [ |
Dan Beam
2015/05/12 04:22:37
I don't think you really need _COMMON unless there
Jeremy Klein
2015/05/12 04:47:49
There are a few in _STRICT_CLOSURE_ARGS.
Worth do
|
+ "accessControls", |
+ "ambiguousFunctionDecl", |
+ "checkStructDictInheritance", |
+ "checkTypes", |
+ "checkVars", |
+ "constantProperty", |
+ "deprecated", |
+ "externsValidation", |
+ "globalThis", |
+ "invalidCasts", |
+ "missingProperties", |
+ "missingReturn", |
+ "nonStandardJsDocs", |
+ "suspiciousCode", |
+ "undefinedNames", |
+ "undefinedVars", |
+ "unknownDefines", |
+ "uselessCode", |
+ "visibility", |
+ ] |
+ |
_COMMON_CLOSURE_ARGS = [ |
"--accept_const_keyword", |
- "--jscomp_error=accessControls", |
- "--jscomp_error=ambiguousFunctionDecl", |
- "--jscomp_error=checkStructDictInheritance", |
- "--jscomp_error=checkTypes", |
- "--jscomp_error=checkVars", |
- "--jscomp_error=constantProperty", |
- "--jscomp_error=deprecated", |
- "--jscomp_error=externsValidation", |
- "--jscomp_error=globalThis", |
- "--jscomp_error=invalidCasts", |
- "--jscomp_error=missingProperties", |
- "--jscomp_error=missingReturn", |
- "--jscomp_error=nonStandardJsDocs", |
- "--jscomp_error=suspiciousCode", |
- "--jscomp_error=undefinedNames", |
- "--jscomp_error=undefinedVars", |
- "--jscomp_error=unknownDefines", |
- "--jscomp_error=uselessCode", |
- "--jscomp_error=visibility", |
"--language_in=ECMASCRIPT5_STRICT", |
"--summary_detail_level=3", |
"--compilation_level=SIMPLE_OPTIMIZATIONS", |
"--source_map_format=V3", |
+ ] + ["--jscomp_error=%s" % err for err in _COMMON_JSCOMP_ERROR] |
+ |
+ # Extra flags used when compiling polymer code. |
Dan Beam
2015/05/12 04:22:37
Extra @jsDocAnnotations used when compiling Polyme
Jeremy Klein
2015/05/12 04:47:49
Done.
|
+ _POLYMER_EXTRA_ANNOTATIONS = [ |
+ "attribute", |
+ "status", |
+ "element", |
+ "homepage", |
+ "submodule", |
+ "group", |
+ ] |
+ |
+ _POLYMER_ARGS = [ |
+ "--polymer_pass", |
+ ] + [ |
+ "--extra_annotation_name=%s" % annotation for annotation in |
+ _POLYMER_EXTRA_ANNOTATIONS |
Dan Beam
2015/05/12 04:22:37
2 "annotations" in the same line (e.g.
"--extra
Jeremy Klein
2015/05/12 04:47:49
Done.
|
] |
# These are the extra flags used when compiling in strict mode. |
@@ -75,17 +97,18 @@ class Checker(object): |
_MAP_FILE_FORMAT = "%s.map" |
- def __init__(self, verbose=False, strict=False): |
+ def __init__(self, verbose=False, strict=False, polymer=False): |
""" |
Args: |
verbose: Whether this class should output diagnostic messages. |
strict: Whether the Closure Compiler should be invoked more strictly. |
+ polymer: Whether the Polymer pass is being run. |
Dan Beam
2015/05/12 04:22:37
polymer: Whether the code requires Polymer support
Jeremy Klein
2015/05/12 04:47:49
Removed.
|
""" |
- current_dir = os.path.join(os.path.dirname(__file__)) |
- self._runner_jar = os.path.join(current_dir, "runner", "runner.jar") |
+ self._runner_jar = os.path.join(CURRENT_DIR, "runner", "runner.jar") |
self._temp_files = [] |
self._verbose = verbose |
self._strict = strict |
+ self._polymer = polymer |
self._error_filter = error_filter.PromiseErrorFilter() |
def _nuke_temp_files(self): |
@@ -259,6 +282,9 @@ class Checker(object): |
if output_wrapper: |
args += ['--output_wrapper="%s"' % output_wrapper] |
+ if self._polymer: |
+ args += self._POLYMER_ARGS |
+ |
args_file_content = " %s" % " ".join(self._common_args() + args) |
self._log_debug("Args: %s" % args_file_content.strip()) |
@@ -382,6 +408,8 @@ if __name__ == "__main__": |
help="Show more information as this script runs") |
parser.add_argument("--strict", action="store_true", |
help="Enable strict type checking") |
+ parser.add_argument("-p", "--polymer", type=int, |
+ help="'1' to run polymer-specific checks.") |
parser.add_argument("--success-stamp", |
help="Timestamp file to update upon success") |
@@ -389,14 +417,21 @@ if __name__ == "__main__": |
opts = parser.parse_args() |
depends = opts.depends or [] |
- externs = opts.externs or set() |
+ externs = set(opts.externs) or set() |
+ |
+ if opts.polymer: |
+ polymer_externs = os.path.join(CURRENT_DIR, os.pardir, 'polymer', |
+ 'v0_8', 'components-chromium', |
+ 'polymer-externs', 'polymer.externs.js') |
+ externs.add(os.path.abspath(polymer_externs)) |
if opts.out_file: |
out_dir = os.path.dirname(opts.out_file) |
if not os.path.exists(out_dir): |
os.makedirs(out_dir) |
- checker = Checker(verbose=opts.verbose, strict=opts.strict) |
+ checker = Checker(verbose=opts.verbose, strict=opts.strict, |
+ polymer=opts.polymer) |
if opts.single_file: |
for source in opts.sources: |
depends, externs = build.inputs.resolve_recursive_dependencies( |