Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(646)

Unified Diff: third_party/closure_linter/closure_linter/gjslint.py

Issue 411243002: closure_linter: 2.3.4 => 2.3.14 (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: remove checker Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/closure_linter/closure_linter/gjslint.py
diff --git a/third_party/closure_linter/closure_linter/gjslint.py b/third_party/closure_linter/closure_linter/gjslint.py
index dcfe09ff11da3f87a50908063d0fd80f79653afd..824e025dcb00de1eaea0bf1a7367972f7e8da038 100755
--- a/third_party/closure_linter/closure_linter/gjslint.py
+++ b/third_party/closure_linter/closure_linter/gjslint.py
@@ -1,6 +1,4 @@
#!/usr/bin/env python
-# python2.6 for command-line runs using p4lib. pylint: disable-msg=C6301
-#
# Copyright 2007 The Closure Linter Authors. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
@@ -34,23 +32,27 @@ is in tokenizer.py and checker.py.
"""
__author__ = ('robbyw@google.com (Robert Walker)',
- 'ajp@google.com (Andy Perelson)')
+ 'ajp@google.com (Andy Perelson)',
+ 'nnaze@google.com (Nathan Naze)',)
-import functools
+import errno
import itertools
+import os
+import platform
+import re
import sys
import time
import gflags as flags
-from closure_linter import checker
from closure_linter import errorrecord
+from closure_linter import runner
from closure_linter.common import erroraccumulator
from closure_linter.common import simplefileflags as fileflags
# Attempt import of multiprocessing (should be available in Python 2.6 and up).
try:
- # pylint: disable-msg=C6204
+ # pylint: disable=g-import-not-at-top
import multiprocessing
except ImportError:
multiprocessing = None
@@ -60,6 +62,9 @@ flags.DEFINE_boolean('unix_mode', False,
'Whether to emit warnings in standard unix format.')
flags.DEFINE_boolean('beep', True, 'Whether to beep when errors are found.')
flags.DEFINE_boolean('time', False, 'Whether to emit timing statistics.')
+flags.DEFINE_boolean('quiet', False, 'Whether to minimize logged messages. '
+ 'Most useful for per-file linting, such as that performed '
+ 'by the presubmit linter service.')
flags.DEFINE_boolean('check_html', False,
'Whether to check javascript in html files.')
flags.DEFINE_boolean('summary', False,
@@ -67,13 +72,20 @@ flags.DEFINE_boolean('summary', False,
flags.DEFINE_list('additional_extensions', None, 'List of additional file '
'extensions (not js) that should be treated as '
'JavaScript files.')
-flags.DEFINE_boolean('multiprocess', False,
- 'Whether to parallalize linting using the '
- 'multiprocessing module. Disabled by default.')
+flags.DEFINE_boolean('multiprocess',
+ platform.system() is 'Linux' and bool(multiprocessing),
+ 'Whether to attempt parallelized linting using the '
+ 'multiprocessing module. Enabled by default on Linux '
+ 'if the multiprocessing module is present (Python 2.6+). '
+ 'Otherwise disabled by default. '
+ 'Disabling may make debugging easier.')
+flags.ADOPT_module_key_flags(fileflags)
+flags.ADOPT_module_key_flags(runner)
GJSLINT_ONLY_FLAGS = ['--unix_mode', '--beep', '--nobeep', '--time',
- '--check_html', '--summary']
+ '--check_html', '--summary', '--quiet']
+
def _MultiprocessCheckPaths(paths):
@@ -92,12 +104,20 @@ def _MultiprocessCheckPaths(paths):
pool = multiprocessing.Pool()
- for results in pool.imap(_CheckPath, paths):
- for record in results:
- yield record
+ path_results = pool.imap(_CheckPath, paths)
+ for results in path_results:
+ for result in results:
+ yield result
- pool.close()
- pool.join()
+ # Force destruct before returning, as this can sometimes raise spurious
+ # "interrupted system call" (EINTR), which we can ignore.
+ try:
+ pool.close()
+ pool.join()
+ del pool
+ except OSError as err:
+ if err.errno is not errno.EINTR:
+ raise err
def _CheckPaths(paths):
@@ -126,13 +146,11 @@ def _CheckPath(path):
A list of errorrecord.ErrorRecords for any found errors.
"""
- error_accumulator = erroraccumulator.ErrorAccumulator()
- style_checker = checker.JavaScriptStyleChecker(error_accumulator)
- style_checker.Check(path)
+ error_handler = erroraccumulator.ErrorAccumulator()
+ runner.Run(path, error_handler)
- # Return any errors as error records.
- make_error_record = functools.partial(errorrecord.MakeErrorRecord, path)
- return map(make_error_record, error_accumulator.GetErrors())
+ make_error_record = lambda err: errorrecord.MakeErrorRecord(path, err)
+ return map(make_error_record, error_handler.GetErrors())
def _GetFilePaths(argv):
@@ -178,13 +196,20 @@ def _PrintSummary(paths, error_records):
error_paths_count = len(error_paths)
no_error_paths_count = all_paths_count - error_paths_count
- if error_count or new_error_count:
- print ('Found %d errors, including %d new errors, in %d files '
- '(%d files OK).' % (
- error_count,
- new_error_count,
- error_paths_count,
- no_error_paths_count))
+ if (error_count or new_error_count) and not FLAGS.quiet:
+ error_noun = 'error' if error_count == 1 else 'errors'
+ new_error_noun = 'error' if new_error_count == 1 else 'errors'
+ error_file_noun = 'file' if error_paths_count == 1 else 'files'
+ ok_file_noun = 'file' if no_error_paths_count == 1 else 'files'
+ print ('Found %d %s, including %d new %s, in %d %s (%d %s OK).' %
+ (error_count,
+ error_noun,
+ new_error_count,
+ new_error_noun,
+ error_paths_count,
+ error_file_noun,
+ no_error_paths_count,
+ ok_file_noun))
def _PrintErrorRecords(error_records):
@@ -216,7 +241,9 @@ def _FormatTime(t):
return '%.2fs' % t
-def main(argv = None):
+
+
+def main(argv=None):
"""Main function.
Args:
@@ -274,7 +301,8 @@ def main(argv = None):
else:
fix_args.append(flag)
- print """
+ if not FLAGS.quiet:
+ print """
Some of the errors reported by GJsLint may be auto-fixable using the script
fixjsstyle. Please double check any changes it makes and report any bugs. The
script can be run by executing:
« no previous file with comments | « third_party/closure_linter/closure_linter/full_test.py ('k') | third_party/closure_linter/closure_linter/indentation.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698