Index: third_party/closure_linter/closure_linter/runner.py |
diff --git a/third_party/closure_linter/closure_linter/runner.py b/third_party/closure_linter/closure_linter/runner.py |
deleted file mode 100644 |
index 04e7fa4ac87a1c58e97b782dc56c638c8f4072ab..0000000000000000000000000000000000000000 |
--- a/third_party/closure_linter/closure_linter/runner.py |
+++ /dev/null |
@@ -1,198 +0,0 @@ |
-#!/usr/bin/env python |
-# |
-# Copyright 2012 The Closure Linter Authors. All Rights Reserved. |
-# Licensed under the Apache License, Version 2.0 (the "License"); |
-# you may not use this file except in compliance with the License. |
-# You may obtain a copy of the License at |
-# |
-# http://www.apache.org/licenses/LICENSE-2.0 |
-# |
-# Unless required by applicable law or agreed to in writing, software |
-# distributed under the License is distributed on an "AS-IS" BASIS, |
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
-# See the License for the specific language governing permissions and |
-# limitations under the License. |
- |
-"""Main lint function. Tokenizes file, runs passes, and feeds to checker.""" |
- |
-# Allow non-Google copyright |
-# pylint: disable=g-bad-file-header |
- |
-__author__ = 'nnaze@google.com (Nathan Naze)' |
- |
-import traceback |
- |
-import gflags as flags |
- |
-from closure_linter import checker |
-from closure_linter import ecmalintrules |
-from closure_linter import ecmametadatapass |
-from closure_linter import error_check |
-from closure_linter import errors |
-from closure_linter import javascriptstatetracker |
-from closure_linter import javascripttokenizer |
- |
-from closure_linter.common import error |
-from closure_linter.common import htmlutil |
-from closure_linter.common import tokens |
- |
-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_boolean('error_trace', False, |
- 'Whether to show error exceptions.') |
-flags.ADOPT_module_key_flags(checker) |
-flags.ADOPT_module_key_flags(ecmalintrules) |
-flags.ADOPT_module_key_flags(error_check) |
- |
- |
-def _GetLastNonWhiteSpaceToken(start_token): |
- """Get the last non-whitespace token in a token stream.""" |
- ret_token = None |
- |
- whitespace_tokens = frozenset([ |
- tokens.TokenType.WHITESPACE, tokens.TokenType.BLANK_LINE]) |
- for t in start_token: |
- if t.type not in whitespace_tokens: |
- ret_token = t |
- |
- return ret_token |
- |
- |
-def _IsHtml(filename): |
- return filename.endswith('.html') or filename.endswith('.htm') |
- |
- |
-def _Tokenize(fileobj): |
- """Tokenize a file. |
- |
- Args: |
- fileobj: file-like object (or iterable lines) with the source. |
- |
- Returns: |
- The first token in the token stream and the ending mode of the tokenizer. |
- """ |
- tokenizer = javascripttokenizer.JavaScriptTokenizer() |
- start_token = tokenizer.TokenizeFile(fileobj) |
- return start_token, tokenizer.mode |
- |
- |
-def _IsLimitedDocCheck(filename, limited_doc_files): |
- """Whether this this a limited-doc file. |
- |
- Args: |
- filename: The filename. |
- limited_doc_files: Iterable of strings. Suffixes of filenames that should |
- be limited doc check. |
- |
- Returns: |
- Whether the file should be limited check. |
- """ |
- for limited_doc_filename in limited_doc_files: |
- if filename.endswith(limited_doc_filename): |
- return True |
- return False |
- |
- |
-def Run(filename, error_handler, source=None): |
- """Tokenize, run passes, and check the given file. |
- |
- Args: |
- filename: The path of the file to check |
- error_handler: The error handler to report errors to. |
- source: A file-like object with the file source. If omitted, the file will |
- be read from the filename path. |
- """ |
- if not source: |
- try: |
- source = open(filename) |
- except IOError: |
- error_handler.HandleFile(filename, None) |
- error_handler.HandleError( |
- error.Error(errors.FILE_NOT_FOUND, 'File not found')) |
- error_handler.FinishFile() |
- return |
- |
- if _IsHtml(filename): |
- source_file = htmlutil.GetScriptLines(source) |
- else: |
- source_file = source |
- |
- token, tokenizer_mode = _Tokenize(source_file) |
- |
- error_handler.HandleFile(filename, token) |
- |
- # If we did not end in the basic mode, this a failed parse. |
- if tokenizer_mode is not javascripttokenizer.JavaScriptModes.TEXT_MODE: |
- error_handler.HandleError( |
- error.Error(errors.FILE_IN_BLOCK, |
- 'File ended in mode "%s".' % tokenizer_mode, |
- _GetLastNonWhiteSpaceToken(token))) |
- |
- # Run the ECMA pass |
- error_token = None |
- |
- ecma_pass = ecmametadatapass.EcmaMetaDataPass() |
- error_token = RunMetaDataPass(token, ecma_pass, error_handler, filename) |
- |
- is_limited_doc_check = ( |
- _IsLimitedDocCheck(filename, flags.FLAGS.limited_doc_files)) |
- |
- _RunChecker(token, error_handler, |
- is_limited_doc_check, |
- is_html=_IsHtml(filename), |
- stop_token=error_token) |
- |
- error_handler.FinishFile() |
- |
- |
-def RunMetaDataPass(start_token, metadata_pass, error_handler, filename=''): |
- """Run a metadata pass over a token stream. |
- |
- Args: |
- start_token: The first token in a token stream. |
- metadata_pass: Metadata pass to run. |
- error_handler: The error handler to report errors to. |
- filename: Filename of the source. |
- |
- Returns: |
- The token where the error occurred (if any). |
- """ |
- |
- try: |
- metadata_pass.Process(start_token) |
- except ecmametadatapass.ParseError, parse_err: |
- if flags.FLAGS.error_trace: |
- traceback.print_exc() |
- error_token = parse_err.token |
- error_msg = str(parse_err) |
- error_handler.HandleError( |
- error.Error(errors.FILE_DOES_NOT_PARSE, |
- ('Error parsing file at token "%s". Unable to ' |
- 'check the rest of file.' |
- '\nError "%s"' % (error_token, error_msg)), error_token)) |
- return error_token |
- except Exception: # pylint: disable=broad-except |
- traceback.print_exc() |
- error_handler.HandleError( |
- error.Error( |
- errors.FILE_DOES_NOT_PARSE, |
- 'Internal error in %s' % filename)) |
- |
- |
-def _RunChecker(start_token, error_handler, |
- limited_doc_checks, is_html, |
- stop_token=None): |
- |
- state_tracker = javascriptstatetracker.JavaScriptStateTracker() |
- |
- style_checker = checker.JavaScriptStyleChecker( |
- state_tracker=state_tracker, |
- error_handler=error_handler) |
- |
- style_checker.Check(start_token, |
- is_html=is_html, |
- limited_doc_checks=limited_doc_checks, |
- stop_token=stop_token) |