Index: third_party/closure_linter/closure_linter/checker.py |
diff --git a/third_party/closure_linter/closure_linter/checker.py b/third_party/closure_linter/closure_linter/checker.py |
index 5c0fa81825887151868f4554a987fcc092f61037..41e52c3db56c744c619f5b3d436bf6647b483dbe 100755 |
--- a/third_party/closure_linter/closure_linter/checker.py |
+++ b/third_party/closure_linter/closure_linter/checker.py |
@@ -21,18 +21,12 @@ __author__ = ('robbyw@google.com (Robert Walker)', |
import gflags as flags |
+from closure_linter import aliaspass |
from closure_linter import checkerbase |
from closure_linter import closurizednamespacesinfo |
-from closure_linter import ecmametadatapass |
from closure_linter import javascriptlintrules |
-from closure_linter import javascriptstatetracker |
-from closure_linter.common import lintrunner |
- |
-flags.DEFINE_list('limited_doc_files', ['dummy.js', 'externs.js'], |
- 'List of files with relaxed documentation checks. Will not ' |
- 'report errors for missing documentation, some missing ' |
- 'descriptions, or methods whose @return tags don\'t have a ' |
- 'matching return statement.') |
+ |
+ |
flags.DEFINE_list('closurized_namespaces', '', |
'Namespace prefixes, used for testing of' |
'goog.provide/require') |
@@ -44,65 +38,64 @@ flags.DEFINE_list('ignored_extra_namespaces', '', |
class JavaScriptStyleChecker(checkerbase.CheckerBase): |
"""Checker that applies JavaScriptLintRules.""" |
- def __init__(self, error_handler): |
+ def __init__(self, state_tracker, error_handler): |
"""Initialize an JavaScriptStyleChecker object. |
Args: |
+ state_tracker: State tracker. |
error_handler: Error handler to pass all errors to. |
""" |
self._namespaces_info = None |
+ self._alias_pass = None |
if flags.FLAGS.closurized_namespaces: |
self._namespaces_info = ( |
closurizednamespacesinfo.ClosurizedNamespacesInfo( |
flags.FLAGS.closurized_namespaces, |
flags.FLAGS.ignored_extra_namespaces)) |
+ self._alias_pass = aliaspass.AliasPass( |
+ flags.FLAGS.closurized_namespaces, error_handler) |
+ |
checkerbase.CheckerBase.__init__( |
self, |
error_handler=error_handler, |
lint_rules=javascriptlintrules.JavaScriptLintRules( |
self._namespaces_info), |
- state_tracker=javascriptstatetracker.JavaScriptStateTracker(), |
- metadata_pass=ecmametadatapass.EcmaMetaDataPass(), |
- limited_doc_files=flags.FLAGS.limited_doc_files) |
+ state_tracker=state_tracker) |
- def _CheckTokens(self, token, parse_error, debug_tokens): |
+ def Check(self, start_token, limited_doc_checks=False, is_html=False, |
+ stop_token=None): |
"""Checks a token stream for lint warnings/errors. |
Adds a separate pass for computing dependency information based on |
goog.require and goog.provide statements prior to the main linting pass. |
Args: |
- token: The first token in the token stream. |
- parse_error: A ParseError if any errors occurred. |
- debug_tokens: Whether every token should be printed as it is encountered |
- during the pass. |
- |
- Returns: |
- A boolean indicating whether the full token stream could be checked or if |
- checking failed prematurely. |
+ start_token: The first token in the token stream. |
+ limited_doc_checks: Whether to perform limited checks. |
+ is_html: Whether this token stream is HTML. |
+ stop_token: If given, checks should stop at this token. |
""" |
+ self._lint_rules.Initialize(self, limited_doc_checks, is_html) |
+ |
+ if self._alias_pass: |
+ self._alias_pass.Process(start_token) |
+ |
# To maximize the amount of errors that get reported before a parse error |
# is displayed, don't run the dependency pass if a parse error exists. |
- if self._namespaces_info and not parse_error: |
+ if self._namespaces_info: |
self._namespaces_info.Reset() |
- result = (self._ExecutePass(token, self._DependencyPass) and |
- self._ExecutePass(token, self._LintPass, |
- debug_tokens=debug_tokens)) |
- else: |
- result = self._ExecutePass(token, self._LintPass, parse_error, |
- debug_tokens) |
- |
- if not result: |
- return False |
+ self._ExecutePass(start_token, self._DependencyPass, stop_token) |
- self._lint_rules.Finalize(self._state_tracker, self._tokenizer.mode) |
+ self._ExecutePass(start_token, self._LintPass, stop_token) |
- self._error_handler.FinishFile() |
- return True |
+ # If we have a stop_token, we didn't end up reading the whole file and, |
+ # thus, don't call Finalize to do end-of-file checks. |
+ if not stop_token: |
+ self._lint_rules.Finalize(self._state_tracker) |
def _DependencyPass(self, token): |
- """Processes an invidual token for dependency information. |
+ """Processes an individual token for dependency information. |
Used to encapsulate the logic needed to process an individual token so that |
it can be passed to _ExecutePass. |
@@ -111,20 +104,3 @@ class JavaScriptStyleChecker(checkerbase.CheckerBase): |
token: The token to process. |
""" |
self._namespaces_info.ProcessToken(token, self._state_tracker) |
- |
- |
-class GJsLintRunner(lintrunner.LintRunner): |
- """Wrapper class to run GJsLint.""" |
- |
- def Run(self, filenames, error_handler): |
- """Run GJsLint on the given filenames. |
- |
- Args: |
- filenames: The filenames to check |
- error_handler: An ErrorHandler object. |
- """ |
- checker = JavaScriptStyleChecker(error_handler) |
- |
- # Check the list of files. |
- for filename in filenames: |
- checker.Check(filename) |