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

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

Issue 2328693002: Updated linter with upstream release (2.3.19) (Closed)
Patch Set: Created 4 years, 3 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/scopeutil.py
diff --git a/third_party/closure_linter/closure_linter/scopeutil.py b/third_party/closure_linter/closure_linter/scopeutil.py
index 35c1aad9ac77ecc23b900b7e38e8de8faab1a875..a7ca9b630a470c66c7acd28448da814a0ad06231 100644
--- a/third_party/closure_linter/closure_linter/scopeutil.py
+++ b/third_party/closure_linter/closure_linter/scopeutil.py
@@ -120,24 +120,19 @@ def IsInClosurizedNamespace(symbol, closurized_namespaces):
return False
-def MatchAlias(context):
- """Match an alias statement (some identifier assigned to a variable).
-
- Example alias: var MyClass = proj.longNamespace.MyClass.
+def _GetVarAssignmentTokens(context):
+ """Returns the tokens from context if it is a var assignment.
Args:
- context: An EcmaContext of type EcmaContext.VAR.
+ context: An EcmaContext.
Returns:
- If a valid alias, returns a tuple of alias and symbol, otherwise None.
+ If a var assignment, the tokens contained within it w/o the trailing
+ semicolon.
"""
if context.type != ecmametadatapass.EcmaContext.VAR:
return
- # The var's parent is a STATEMENT, which should be directly below goog.scope.
- if not IsGoogScopeBlock(context.parent.parent):
- return
-
# Get the tokens in this statement.
if context.start_token and context.end_token:
statement_tokens = tokenutil.GetTokenRange(context.start_token,
@@ -149,8 +144,6 @@ def MatchAlias(context):
is_non_code_type = lambda t: t.type not in JavaScriptTokenType.NON_CODE_TYPES
code_tokens = filter(is_non_code_type, statement_tokens)
- # This section identifies statements of the alias form "var alias = symbol".
-
# Pop off the semicolon if present.
if code_tokens and code_tokens[-1].IsType(JavaScriptTokenType.SEMICOLON):
code_tokens.pop()
@@ -158,15 +151,56 @@ def MatchAlias(context):
if len(code_tokens) < 4:
return
- # Verify that this is of the form "var lvalue = identifier;".
- # The identifier may span multiple lines and could be multiple tokens.
if (code_tokens[0].IsKeyword('var') and
code_tokens[1].IsType(JavaScriptTokenType.SIMPLE_LVALUE) and
- code_tokens[2].IsOperator('=') and
- all(t.IsType(JavaScriptTokenType.IDENTIFIER) for t in code_tokens[3:])):
+ code_tokens[2].IsOperator('=')):
+ return code_tokens
+
+
+def MatchAlias(context):
+ """Match an alias statement (some identifier assigned to a variable).
+
+ Example alias: var MyClass = proj.longNamespace.MyClass.
+
+ Args:
+ context: An EcmaContext of type EcmaContext.VAR.
+
+ Returns:
+ If a valid alias, returns a tuple of alias and symbol, otherwise None.
+ """
+ code_tokens = _GetVarAssignmentTokens(context)
+ if code_tokens is None:
+ return
+
+ if all(tokenutil.IsIdentifierOrDot(t) for t in code_tokens[3:]):
+ # var Foo = bar.Foo;
alias, symbol = code_tokens[1], code_tokens[3]
- # Mark both tokens as an alias definition to avoid counting them as usages.
+ # Mark both tokens as an alias definition to not count them as usages.
alias.metadata.is_alias_definition = True
symbol.metadata.is_alias_definition = True
-
return alias.string, tokenutil.GetIdentifierForToken(symbol)
+
+
+def MatchModuleAlias(context):
+ """Match an alias statement in a goog.module style import.
+
+ Example alias: var MyClass = goog.require('proj.longNamespace.MyClass').
+
+ Args:
+ context: An EcmaContext.
+
+ Returns:
+ If a valid alias, returns a tuple of alias and symbol, otherwise None.
+ """
+ code_tokens = _GetVarAssignmentTokens(context)
+ if code_tokens is None:
+ return
+
+ if(code_tokens[3].IsType(JavaScriptTokenType.IDENTIFIER) and
+ code_tokens[3].string == 'goog.require'):
+ # var Foo = goog.require('bar.Foo');
+ alias = code_tokens[1]
+ symbol = tokenutil.GetStringAfterToken(code_tokens[3])
+ if symbol:
+ alias.metadata.is_alias_definition = True
+ return alias.string, symbol

Powered by Google App Engine
This is Rietveld 408576698