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

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

Issue 2592193002: Remove closure_linter from Chrome (Closed)
Patch Set: Created 4 years 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/requireprovidesorter.py
diff --git a/third_party/closure_linter/closure_linter/requireprovidesorter.py b/third_party/closure_linter/closure_linter/requireprovidesorter.py
deleted file mode 100755
index e7e08a13c2946fff99aef8b273c0ae89eaf52a54..0000000000000000000000000000000000000000
--- a/third_party/closure_linter/closure_linter/requireprovidesorter.py
+++ /dev/null
@@ -1,329 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2011 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.
-
-"""Contains logic for sorting goog.provide and goog.require statements.
-
-Closurized JavaScript files use goog.provide and goog.require statements at the
-top of the file to manage dependencies. These statements should be sorted
-alphabetically, however, it is common for them to be accompanied by inline
-comments or suppression annotations. In order to sort these statements without
-disrupting their comments and annotations, the association between statements
-and comments/annotations must be maintained while sorting.
-
- RequireProvideSorter: Handles checking/fixing of provide/require statements.
-"""
-
-
-
-from closure_linter import javascripttokens
-from closure_linter import tokenutil
-
-# Shorthand
-Type = javascripttokens.JavaScriptTokenType
-
-
-class RequireProvideSorter(object):
- """Checks for and fixes alphabetization of provide and require statements.
-
- When alphabetizing, comments on the same line or comments directly above a
- goog.provide or goog.require statement are associated with that statement and
- stay with the statement as it gets sorted.
- """
-
- def CheckProvides(self, token):
- """Checks alphabetization of goog.provide statements.
-
- Iterates over tokens in given token stream, identifies goog.provide tokens,
- and checks that they occur in alphabetical order by the object being
- provided.
-
- Args:
- token: A token in the token stream before any goog.provide tokens.
-
- Returns:
- The first provide token in the token stream.
-
- None is returned if all goog.provide statements are already sorted.
- """
- provide_tokens = self._GetRequireOrProvideTokens(token, 'goog.provide')
- provide_strings = self._GetRequireOrProvideTokenStrings(provide_tokens)
- sorted_provide_strings = sorted(provide_strings)
- if provide_strings != sorted_provide_strings:
- return provide_tokens[0]
- return None
-
- def CheckRequires(self, token):
- """Checks alphabetization of goog.require statements.
-
- Iterates over tokens in given token stream, identifies goog.require tokens,
- and checks that they occur in alphabetical order by the dependency being
- required.
-
- Args:
- token: A token in the token stream before any goog.require tokens.
-
- Returns:
- The first require token in the token stream.
-
- None is returned if all goog.require statements are already sorted.
- """
- require_tokens = self._GetRequireOrProvideTokens(token, 'goog.require')
- require_strings = self._GetRequireOrProvideTokenStrings(require_tokens)
- sorted_require_strings = sorted(require_strings)
- if require_strings != sorted_require_strings:
- return require_tokens[0]
- return None
-
- def FixProvides(self, token):
- """Sorts goog.provide statements in the given token stream alphabetically.
-
- Args:
- token: The first token in the token stream.
- """
- self._FixProvidesOrRequires(
- self._GetRequireOrProvideTokens(token, 'goog.provide'))
-
- def FixRequires(self, token):
- """Sorts goog.require statements in the given token stream alphabetically.
-
- Args:
- token: The first token in the token stream.
- """
- self._FixProvidesOrRequires(
- self._GetRequireOrProvideTokens(token, 'goog.require'))
-
- def _FixProvidesOrRequires(self, tokens):
- """Sorts goog.provide or goog.require statements.
-
- Args:
- tokens: A list of goog.provide or goog.require tokens in the order they
- appear in the token stream. i.e. the first token in this list must
- be the first goog.provide or goog.require token.
- """
- strings = self._GetRequireOrProvideTokenStrings(tokens)
- sorted_strings = sorted(strings)
-
- # Make a separate pass to remove any blank lines between goog.require/
- # goog.provide tokens.
- first_token = tokens[0]
- last_token = tokens[-1]
- i = last_token
- while i != first_token and i is not None:
- if i.type is Type.BLANK_LINE:
- tokenutil.DeleteToken(i)
- i = i.previous
-
- # A map from required/provided object name to tokens that make up the line
- # it was on, including any comments immediately before it or after it on the
- # same line.
- tokens_map = self._GetTokensMap(tokens)
-
- # Iterate over the map removing all tokens.
- for name in tokens_map:
- tokens_to_delete = tokens_map[name]
- for i in tokens_to_delete:
- tokenutil.DeleteToken(i)
-
- # Save token to rest of file. Sorted token will be inserted before this.
- rest_of_file = tokens_map[strings[-1]][-1].next
-
- # Re-add all tokens in the map in alphabetical order.
- insert_after = tokens[0].previous
- for string in sorted_strings:
- for i in tokens_map[string]:
- if rest_of_file:
- tokenutil.InsertTokenBefore(i, rest_of_file)
- else:
- tokenutil.InsertTokenAfter(i, insert_after)
- insert_after = i
-
- def _GetRequireOrProvideTokens(self, token, token_string):
- """Gets all goog.provide or goog.require tokens in the given token stream.
-
- Args:
- token: The first token in the token stream.
- token_string: One of 'goog.provide' or 'goog.require' to indicate which
- tokens to find.
-
- Returns:
- A list of goog.provide or goog.require tokens in the order they appear in
- the token stream.
- """
- tokens = []
- while token:
- if token.type == Type.IDENTIFIER:
- if token.string == token_string:
- tokens.append(token)
- elif token.string not in [
- 'goog.provide', 'goog.require', 'goog.setTestOnly']:
- # These 3 identifiers are at the top of the file. So if any other
- # identifier is encountered, return.
- # TODO(user): Once it's decided what ordering goog.require
- # should use, add 'goog.module' to the list above and implement the
- # decision.
- break
- token = token.next
-
- return tokens
-
- def _GetRequireOrProvideTokenStrings(self, tokens):
- """Gets a list of strings corresponding to the given list of tokens.
-
- The string will be the next string in the token stream after each token in
- tokens. This is used to find the object being provided/required by a given
- goog.provide or goog.require token.
-
- Args:
- tokens: A list of goog.provide or goog.require tokens.
-
- Returns:
- A list of object names that are being provided or required by the given
- list of tokens. For example:
-
- ['object.a', 'object.c', 'object.b']
- """
- token_strings = []
- for token in tokens:
- if not token.is_deleted:
- name = tokenutil.GetStringAfterToken(token)
- token_strings.append(name)
- return token_strings
-
- def _GetTokensMap(self, tokens):
- """Gets a map from object name to tokens associated with that object.
-
- Starting from the goog.provide/goog.require token, searches backwards in the
- token stream for any lines that start with a comment. These lines are
- associated with the goog.provide/goog.require token. Also associates any
- tokens on the same line as the goog.provide/goog.require token with that
- token.
-
- Args:
- tokens: A list of goog.provide or goog.require tokens.
-
- Returns:
- A dictionary that maps object names to the tokens associated with the
- goog.provide or goog.require of that object name. For example:
-
- {
- 'object.a': [JavaScriptToken, JavaScriptToken, ...],
- 'object.b': [...]
- }
-
- The list of tokens includes any comment lines above the goog.provide or
- goog.require statement and everything after the statement on the same
- line. For example, all of the following would be associated with
- 'object.a':
-
- /** @suppress {extraRequire} */
- goog.require('object.a'); // Some comment.
- """
- tokens_map = {}
- for token in tokens:
- object_name = tokenutil.GetStringAfterToken(token)
- # If the previous line starts with a comment, presume that the comment
- # relates to the goog.require or goog.provide and keep them together when
- # sorting.
- first_token = token
- previous_first_token = tokenutil.GetFirstTokenInPreviousLine(first_token)
- while (previous_first_token and
- previous_first_token.IsAnyType(Type.COMMENT_TYPES)):
- first_token = previous_first_token
- previous_first_token = tokenutil.GetFirstTokenInPreviousLine(
- first_token)
-
- # Find the last token on the line.
- last_token = tokenutil.GetLastTokenInSameLine(token)
-
- all_tokens = self._GetTokenList(first_token, last_token)
- tokens_map[object_name] = all_tokens
- return tokens_map
-
- def _GetTokenList(self, first_token, last_token):
- """Gets a list of all tokens from first_token to last_token, inclusive.
-
- Args:
- first_token: The first token to get.
- last_token: The last token to get.
-
- Returns:
- A list of all tokens between first_token and last_token, including both
- first_token and last_token.
-
- Raises:
- Exception: If the token stream ends before last_token is reached.
- """
- token_list = []
- token = first_token
- while token != last_token:
- if not token:
- raise Exception('ran out of tokens')
- token_list.append(token)
- token = token.next
- token_list.append(last_token)
-
- return token_list
-
- def GetFixedRequireString(self, token):
- """Get fixed/sorted order of goog.require statements.
-
- Args:
- token: The first token in the token stream.
-
- Returns:
- A string for correct sorted order of goog.require.
- """
- return self._GetFixedRequireOrProvideString(
- self._GetRequireOrProvideTokens(token, 'goog.require'))
-
- def GetFixedProvideString(self, token):
- """Get fixed/sorted order of goog.provide statements.
-
- Args:
- token: The first token in the token stream.
-
- Returns:
- A string for correct sorted order of goog.provide.
- """
- return self._GetFixedRequireOrProvideString(
- self._GetRequireOrProvideTokens(token, 'goog.provide'))
-
- def _GetFixedRequireOrProvideString(self, tokens):
- """Sorts goog.provide or goog.require statements.
-
- Args:
- tokens: A list of goog.provide or goog.require tokens in the order they
- appear in the token stream. i.e. the first token in this list must
- be the first goog.provide or goog.require token.
-
- Returns:
- A string for sorted goog.require or goog.provide statements
- """
-
- # A map from required/provided object name to tokens that make up the line
- # it was on, including any comments immediately before it or after it on the
- # same line.
- tokens_map = self._GetTokensMap(tokens)
- sorted_strings = sorted(tokens_map.keys())
-
- new_order = ''
- for string in sorted_strings:
- for i in tokens_map[string]:
- new_order += i.string
- if i.IsLastInLine():
- new_order += '\n'
-
- return new_order

Powered by Google App Engine
This is Rietveld 408576698