| Index: third_party/closure_linter/closure_linter/javascriptstatetracker.py
|
| diff --git a/third_party/closure_linter/closure_linter/javascriptstatetracker.py b/third_party/closure_linter/closure_linter/javascriptstatetracker.py
|
| deleted file mode 100755
|
| index e0a42f66a84aae3716d4d2d0da1d02c6f0d187f5..0000000000000000000000000000000000000000
|
| --- a/third_party/closure_linter/closure_linter/javascriptstatetracker.py
|
| +++ /dev/null
|
| @@ -1,150 +0,0 @@
|
| -#!/usr/bin/env python
|
| -# Copyright 2008 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.
|
| -
|
| -"""Parser for JavaScript files."""
|
| -
|
| -
|
| -
|
| -from closure_linter import javascripttokens
|
| -from closure_linter import statetracker
|
| -from closure_linter import tokenutil
|
| -
|
| -# Shorthand
|
| -Type = javascripttokens.JavaScriptTokenType
|
| -
|
| -
|
| -class JsDocFlag(statetracker.DocFlag):
|
| - """Javascript doc flag object.
|
| -
|
| - Attribute:
|
| - flag_type: param, return, define, type, etc.
|
| - flag_token: The flag token.
|
| - type_start_token: The first token specifying the flag JS type,
|
| - including braces.
|
| - type_end_token: The last token specifying the flag JS type,
|
| - including braces.
|
| - type: The type spec string.
|
| - jstype: The type spec, a TypeAnnotation instance.
|
| - name_token: The token specifying the flag name.
|
| - name: The flag name
|
| - description_start_token: The first token in the description.
|
| - description_end_token: The end token in the description.
|
| - description: The description.
|
| - """
|
| -
|
| - # Please keep these lists alphabetized.
|
| -
|
| - # Some projects use the following extensions to JsDoc.
|
| - # TODO(robbyw): determine which of these, if any, should be illegal.
|
| - EXTENDED_DOC = frozenset([
|
| - 'class', 'code', 'desc', 'final', 'hidden', 'inheritDoc', 'link',
|
| - 'meaning', 'provideGoog', 'throws'])
|
| -
|
| - LEGAL_DOC = EXTENDED_DOC | statetracker.DocFlag.LEGAL_DOC
|
| -
|
| -
|
| -class JavaScriptStateTracker(statetracker.StateTracker):
|
| - """JavaScript state tracker.
|
| -
|
| - Inherits from the core EcmaScript StateTracker adding extra state tracking
|
| - functionality needed for JavaScript.
|
| - """
|
| -
|
| - def __init__(self):
|
| - """Initializes a JavaScript token stream state tracker."""
|
| - statetracker.StateTracker.__init__(self, JsDocFlag)
|
| -
|
| - def Reset(self):
|
| - self._scope_depth = 0
|
| - self._block_stack = []
|
| - super(JavaScriptStateTracker, self).Reset()
|
| -
|
| - def InTopLevel(self):
|
| - """Compute whether we are at the top level in the class.
|
| -
|
| - This function call is language specific. In some languages like
|
| - JavaScript, a function is top level if it is not inside any parenthesis.
|
| - In languages such as ActionScript, a function is top level if it is directly
|
| - within a class.
|
| -
|
| - Returns:
|
| - Whether we are at the top level in the class.
|
| - """
|
| - return self._scope_depth == self.ParenthesesDepth()
|
| -
|
| - def InFunction(self):
|
| - """Returns true if the current token is within a function.
|
| -
|
| - This js-specific override ignores goog.scope functions.
|
| -
|
| - Returns:
|
| - True if the current token is within a function.
|
| - """
|
| - return self._scope_depth != self.FunctionDepth()
|
| -
|
| - def InNonScopeBlock(self):
|
| - """Compute whether we are nested within a non-goog.scope block.
|
| -
|
| - Returns:
|
| - True if the token is not enclosed in a block that does not originate from
|
| - a goog.scope statement. False otherwise.
|
| - """
|
| - return self._scope_depth != self.BlockDepth()
|
| -
|
| - def GetBlockType(self, token):
|
| - """Determine the block type given a START_BLOCK token.
|
| -
|
| - Code blocks come after parameters, keywords like else, and closing parens.
|
| -
|
| - Args:
|
| - token: The current token. Can be assumed to be type START_BLOCK
|
| - Returns:
|
| - Code block type for current token.
|
| - """
|
| - last_code = tokenutil.SearchExcept(token, Type.NON_CODE_TYPES, reverse=True)
|
| - if last_code.type in (Type.END_PARAMETERS, Type.END_PAREN,
|
| - Type.KEYWORD) and not last_code.IsKeyword('return'):
|
| - return self.CODE
|
| - else:
|
| - return self.OBJECT_LITERAL
|
| -
|
| - def GetCurrentBlockStart(self):
|
| - """Gets the start token of current block.
|
| -
|
| - Returns:
|
| - Starting token of current block. None if not in block.
|
| - """
|
| - if self._block_stack:
|
| - return self._block_stack[-1]
|
| - else:
|
| - return None
|
| -
|
| - def HandleToken(self, token, last_non_space_token):
|
| - """Handles the given token and updates state.
|
| -
|
| - Args:
|
| - token: The token to handle.
|
| - last_non_space_token: The last non space token encountered
|
| - """
|
| - if token.type == Type.START_BLOCK:
|
| - self._block_stack.append(token)
|
| - if token.type == Type.IDENTIFIER and token.string == 'goog.scope':
|
| - self._scope_depth += 1
|
| - if token.type == Type.END_BLOCK:
|
| - start_token = self._block_stack.pop()
|
| - if tokenutil.GoogScopeOrNoneFromStartBlock(start_token):
|
| - self._scope_depth -= 1
|
| - super(JavaScriptStateTracker, self).HandleToken(token,
|
| - last_non_space_token)
|
|
|