| Index: tools/telemetry/catapult_base/refactor/annotated_symbol/import_statement.py
|
| diff --git a/tools/telemetry/catapult_base/refactor/annotated_symbol/import_statement.py b/tools/telemetry/catapult_base/refactor/annotated_symbol/import_statement.py
|
| deleted file mode 100644
|
| index e598f5aa9a22b2ae3c5ddfe5a37c6adfcd4c46f1..0000000000000000000000000000000000000000
|
| --- a/tools/telemetry/catapult_base/refactor/annotated_symbol/import_statement.py
|
| +++ /dev/null
|
| @@ -1,322 +0,0 @@
|
| -# Copyright 2015 The Chromium Authors. All rights reserved.
|
| -# Use of this source code is governed by a BSD-style license that can be
|
| -# found in the LICENSE file.
|
| -
|
| -import itertools
|
| -import keyword
|
| -import symbol
|
| -import token
|
| -
|
| -from catapult_base.refactor.annotated_symbol import base_symbol
|
| -from catapult_base.refactor import snippet
|
| -
|
| -
|
| -__all__ = [
|
| - 'AsName',
|
| - 'DottedName',
|
| - 'Import',
|
| - 'ImportFrom',
|
| - 'ImportName',
|
| -]
|
| -
|
| -
|
| -class DottedName(base_symbol.AnnotatedSymbol):
|
| - @classmethod
|
| - def Annotate(cls, symbol_type, children):
|
| - if symbol_type != symbol.dotted_name:
|
| - return None
|
| - return cls(symbol_type, children)
|
| -
|
| - @property
|
| - def value(self):
|
| - return ''.join(token_snippet.value for token_snippet in self._children)
|
| -
|
| - @value.setter
|
| - def value(self, value):
|
| - value_parts = value.split('.')
|
| - for value_part in value_parts:
|
| - if keyword.iskeyword(value_part):
|
| - raise ValueError('%s is a reserved keyword.' % value_part)
|
| -
|
| - # If we have too many children, cut the list down to size.
|
| - self._children = self._children[:len(value_parts)*2-1]
|
| -
|
| - # Update child nodes.
|
| - for child, value_part in itertools.izip_longest(
|
| - self._children[::2], value_parts):
|
| - if child:
|
| - # Modify existing children. This helps preserve comments and spaces.
|
| - child.value = value_part
|
| - else:
|
| - # Add children as needed.
|
| - self._children.append(snippet.TokenSnippet.Create(token.DOT, '.'))
|
| - self._children.append(
|
| - snippet.TokenSnippet.Create(token.NAME, value_part))
|
| -
|
| -
|
| -class AsName(base_symbol.AnnotatedSymbol):
|
| - @classmethod
|
| - def Annotate(cls, symbol_type, children):
|
| - if (symbol_type != symbol.dotted_as_name and
|
| - symbol_type != symbol.import_as_name):
|
| - return None
|
| - return cls(symbol_type, children)
|
| -
|
| - @property
|
| - def name(self):
|
| - return self.children[0].value
|
| -
|
| - @name.setter
|
| - def name(self, value):
|
| - self.children[0].value = value
|
| -
|
| - @property
|
| - def alias(self):
|
| - if len(self.children) < 3:
|
| - return None
|
| - return self.children[2].value
|
| -
|
| - @alias.setter
|
| - def alias(self, value):
|
| - if keyword.iskeyword(value):
|
| - raise ValueError('%s is a reserved keyword.' % value)
|
| -
|
| - if value:
|
| - if len(self.children) < 3:
|
| - # If we currently have no alias, add one.
|
| - self.children.append(
|
| - snippet.TokenSnippet.Create(token.NAME, 'as', (0, 1)))
|
| - self.children.append(
|
| - snippet.TokenSnippet.Create(token.NAME, value, (0, 1)))
|
| - else:
|
| - # We already have an alias. Just update the value.
|
| - self.children[2].value = value
|
| - else:
|
| - # Removing the alias. Strip the "as foo".
|
| - self.children = [self.children[0]]
|
| -
|
| -
|
| -class Import(base_symbol.AnnotatedSymbol):
|
| - """An import statement.
|
| -
|
| - Example:
|
| - import a.b.c as d
|
| - from a.b import c as d
|
| -
|
| - In these examples,
|
| - path == 'a.b.c'
|
| - alias == 'd'
|
| - root == 'a.b' (only for "from" imports)
|
| - module == 'c' (only for "from" imports)
|
| - name (read-only) == the name used by references to the module, which is the
|
| - alias if there is one, the full module path in "full" imports, and the
|
| - module name in "from" imports.
|
| - """
|
| - @property
|
| - def has_from(self):
|
| - """Returns True iff the import statment is of the form "from x import y"."""
|
| - raise NotImplementedError()
|
| -
|
| - @property
|
| - def values(self):
|
| - raise NotImplementedError()
|
| -
|
| - @property
|
| - def paths(self):
|
| - raise NotImplementedError()
|
| -
|
| - @property
|
| - def aliases(self):
|
| - raise NotImplementedError()
|
| -
|
| - @property
|
| - def path(self):
|
| - """The full dotted path of the module."""
|
| - raise NotImplementedError()
|
| -
|
| - @path.setter
|
| - def path(self, value):
|
| - raise NotImplementedError()
|
| -
|
| - @property
|
| - def alias(self):
|
| - """The alias, if the module is renamed with "as". None otherwise."""
|
| - raise NotImplementedError()
|
| -
|
| - @alias.setter
|
| - def alias(self, value):
|
| - raise NotImplementedError()
|
| -
|
| - @property
|
| - def name(self):
|
| - """The name used to reference this import's module."""
|
| - raise NotImplementedError()
|
| -
|
| -
|
| -class ImportName(Import):
|
| - @classmethod
|
| - def Annotate(cls, symbol_type, children):
|
| - if symbol_type != symbol.import_stmt:
|
| - return None
|
| - if children[0].type != symbol.import_name:
|
| - return None
|
| - assert len(children) == 1
|
| - return cls(symbol_type, children[0].children)
|
| -
|
| - @property
|
| - def has_from(self):
|
| - return False
|
| -
|
| - @property
|
| - def values(self):
|
| - dotted_as_names = self.children[1]
|
| - return tuple((dotted_as_name.name, dotted_as_name.alias)
|
| - for dotted_as_name in dotted_as_names.children[::2])
|
| -
|
| - @property
|
| - def paths(self):
|
| - return tuple(path for path, _ in self.values)
|
| -
|
| - @property
|
| - def aliases(self):
|
| - return tuple(alias for _, alias in self.values)
|
| -
|
| - @property
|
| - def _dotted_as_name(self):
|
| - dotted_as_names = self.children[1]
|
| - if len(dotted_as_names.children) != 1:
|
| - raise NotImplementedError(
|
| - 'This method only works if the statement has one import.')
|
| - return dotted_as_names.children[0]
|
| -
|
| - @property
|
| - def path(self):
|
| - return self._dotted_as_name.name
|
| -
|
| - @path.setter
|
| - def path(self, value): # pylint: disable=arguments-differ
|
| - self._dotted_as_name.name = value
|
| -
|
| - @property
|
| - def alias(self):
|
| - return self._dotted_as_name.alias
|
| -
|
| - @alias.setter
|
| - def alias(self, value): # pylint: disable=arguments-differ
|
| - self._dotted_as_name.alias = value
|
| -
|
| - @property
|
| - def name(self):
|
| - if self.alias:
|
| - return self.alias
|
| - else:
|
| - return self.path
|
| -
|
| -
|
| -class ImportFrom(Import):
|
| - @classmethod
|
| - def Annotate(cls, symbol_type, children):
|
| - if symbol_type != symbol.import_stmt:
|
| - return None
|
| - if children[0].type != symbol.import_from:
|
| - return None
|
| - assert len(children) == 1
|
| - return cls(symbol_type, children[0].children)
|
| -
|
| - @property
|
| - def has_from(self):
|
| - return True
|
| -
|
| - @property
|
| - def values(self):
|
| - try:
|
| - import_as_names = self.FindChild(symbol.import_as_names)
|
| - except ValueError:
|
| - return (('*', None),)
|
| -
|
| - return tuple((import_as_name.name, import_as_name.alias)
|
| - for import_as_name in import_as_names.children[::2])
|
| -
|
| - @property
|
| - def paths(self):
|
| - module = self.module
|
| - return tuple('.'.join((module, name)) for name, _ in self.values)
|
| -
|
| - @property
|
| - def aliases(self):
|
| - return tuple(alias for _, alias in self.values)
|
| -
|
| - @property
|
| - def root(self):
|
| - return self.FindChild(symbol.dotted_name).value
|
| -
|
| - @root.setter
|
| - def root(self, value):
|
| - self.FindChild(symbol.dotted_name).value = value
|
| -
|
| - @property
|
| - def _import_as_name(self):
|
| - try:
|
| - import_as_names = self.FindChild(symbol.import_as_names)
|
| - except ValueError:
|
| - return None
|
| -
|
| - if len(import_as_names.children) != 1:
|
| - raise NotImplementedError(
|
| - 'This method only works if the statement has one import.')
|
| -
|
| - return import_as_names.children[0]
|
| -
|
| - @property
|
| - def module(self):
|
| - import_as_name = self._import_as_name
|
| - if import_as_name:
|
| - return import_as_name.name
|
| - else:
|
| - return '*'
|
| -
|
| - @module.setter
|
| - def module(self, value):
|
| - if keyword.iskeyword(value):
|
| - raise ValueError('%s is a reserved keyword.' % value)
|
| -
|
| - import_as_name = self._import_as_name
|
| - if value == '*':
|
| - # TODO: Implement this.
|
| - raise NotImplementedError()
|
| - else:
|
| - if import_as_name:
|
| - import_as_name.name = value
|
| - else:
|
| - # TODO: Implement this.
|
| - raise NotImplementedError()
|
| -
|
| - @property
|
| - def path(self):
|
| - return '.'.join((self.root, self.module))
|
| -
|
| - @path.setter
|
| - def path(self, value): # pylint: disable=arguments-differ
|
| - self.root, _, self.module = value.rpartition('.')
|
| -
|
| - @property
|
| - def alias(self):
|
| - import_as_name = self._import_as_name
|
| - if import_as_name:
|
| - return import_as_name.alias
|
| - else:
|
| - return None
|
| -
|
| - @alias.setter
|
| - def alias(self, value): # pylint: disable=arguments-differ
|
| - import_as_name = self._import_as_name
|
| - if not import_as_name:
|
| - raise NotImplementedError('Cannot change alias for "import *".')
|
| - import_as_name.alias = value
|
| -
|
| - @property
|
| - def name(self):
|
| - if self.alias:
|
| - return self.alias
|
| - else:
|
| - return self.module
|
|
|