diff --git a/.gitignore b/.gitignore index 26c170bec9..4ba6e46ecf 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ *.pyc /bin/plovr*.jar /build/gh-pages +/build/check-requires-timestamp /build/jsdoc-*-timestamp /build/lint-spec-timestamp /build/lint-src-timestamp diff --git a/build.py b/build.py index 5dca545c20..afe527441b 100755 --- a/build.py +++ b/build.py @@ -187,7 +187,7 @@ def serve_precommit(t): t.run('%(JAVA)s', '-jar', PLOVR_JAR, 'serve', 'build/ol-all.json') -virtual('lint', 'build/lint-src-timestamp', 'build/lint-spec-timestamp') +virtual('lint', 'build/lint-src-timestamp', 'build/lint-spec-timestamp', 'build/check-requires-timestamp') @target('build/lint-src-timestamp', SRC, INTERNAL_SRC, EXTERNAL_SRC, EXAMPLES_SRC) @@ -199,6 +199,32 @@ def build_lint_src_timestamp(t): t.touch() +@target('build/check-requires-timestamp', SRC, INTERNAL_SRC, EXTERNAL_SRC, EXAMPLES_SRC) +def build_check_requires_timestamp(t): + count = 0 + for filename in sorted(t.dependencies): + if filename == 'build/src/internal/src/requireall.js': + continue + require_linenos = {} + uses = set() + lineno = 0 + for line in open(filename): + lineno += 1 + m = re.match(r'goog.require\(\'(.*)\'\);', line) + if m: + require_linenos[m.group(1)] = lineno + continue + for require in require_linenos.iterkeys(): + if require in line: + uses.add(require) + for require in sorted(set(require_linenos.keys()) - uses): + t.info('%s:%d: unused goog.require %r' % (filename, require_linenos[require], require)) + count += 1 + if count: + t.error('%d unused goog.requires' % (count,)) + t.touch() + + @target('build/lint-spec-timestamp', SPEC) def build_lint_spec_timestamp(t): t.run('%(GJSLINT)s', t.newer(SPEC))