forked from VimPlug/jedi
Name refactoring.
This commit is contained in:
@@ -168,6 +168,67 @@ class Base(object):
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
class _Leaf(Base):
|
||||||
|
__slots__ = ('value', 'parent', 'start_pos', 'prefix')
|
||||||
|
|
||||||
|
def __init__(self, value, start_pos, prefix):
|
||||||
|
self.value = value
|
||||||
|
self.start_pos = start_pos
|
||||||
|
self.prefix = prefix
|
||||||
|
|
||||||
|
def get_code(self):
|
||||||
|
return self.prefix + self.value
|
||||||
|
|
||||||
|
def __repr__(self):
|
||||||
|
return "<%s: `%s`>" % (type(self).__name__, self.value)
|
||||||
|
|
||||||
|
|
||||||
|
class Name(_Leaf):
|
||||||
|
"""
|
||||||
|
A string. Sometimes it is important to know if the string belongs to a name
|
||||||
|
or not.
|
||||||
|
"""
|
||||||
|
# Unfortunately there's no way to use slots for str (non-zero __itemsize__)
|
||||||
|
# -> http://utcc.utoronto.ca/~cks/space/blog/python/IntSlotsPython3k
|
||||||
|
# Therefore don't subclass `str`.
|
||||||
|
__slots__ = ('_string', '_line', '_column')
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return self.value
|
||||||
|
|
||||||
|
def __unicode__(self):
|
||||||
|
return self.value
|
||||||
|
|
||||||
|
def __repr__(self):
|
||||||
|
return "<%s: %s@%s,%s>" % (type(self).__name__, self._string,
|
||||||
|
self.start_pos[0], self.start_pos[1])
|
||||||
|
|
||||||
|
def get_definition(self):
|
||||||
|
return self.get_parent_until((ArrayStmt, StatementElement), reverse=True)
|
||||||
|
|
||||||
|
|
||||||
|
class Operator(_Leaf):
|
||||||
|
def __str__(self):
|
||||||
|
return self.get_code()
|
||||||
|
|
||||||
|
def __eq__(self, other):
|
||||||
|
"""
|
||||||
|
Make comparisons with strings easy.
|
||||||
|
Improves the readability of the parser.
|
||||||
|
"""
|
||||||
|
if isinstance(other, Operator):
|
||||||
|
return self is other
|
||||||
|
else:
|
||||||
|
return self.value == other
|
||||||
|
|
||||||
|
def __ne__(self, other):
|
||||||
|
"""Python 2 compatibility."""
|
||||||
|
return self.value != other
|
||||||
|
|
||||||
|
def __hash__(self):
|
||||||
|
return hash(self.value)
|
||||||
|
|
||||||
|
|
||||||
class Simple(Base):
|
class Simple(Base):
|
||||||
"""
|
"""
|
||||||
The super class for Scope, Import, Name and Statement. Every object in
|
The super class for Scope, Import, Name and Statement. Every object in
|
||||||
@@ -1495,55 +1556,6 @@ class Array(StatementElement):
|
|||||||
return "<%s: %s%s>" % (type(self).__name__, typ, self.values)
|
return "<%s: %s%s>" % (type(self).__name__, typ, self.values)
|
||||||
|
|
||||||
|
|
||||||
class Name(object):
|
|
||||||
"""
|
|
||||||
A string. Sometimes it is important to know if the string belongs to a name
|
|
||||||
or not.
|
|
||||||
"""
|
|
||||||
# Unfortunately there's no way to use slots for str (non-zero __itemsize__)
|
|
||||||
# -> http://utcc.utoronto.ca/~cks/space/blog/python/IntSlotsPython3k
|
|
||||||
# Therefore don't subclass `str`.
|
|
||||||
__slots__ = ('_sub_module', 'parent', '_string', '_line', '_column')
|
|
||||||
|
|
||||||
def __init__(self, sub_module, string, parent, start_pos):
|
|
||||||
self._string = string
|
|
||||||
self.parent = parent
|
|
||||||
self._sub_module = sub_module
|
|
||||||
self._line = start_pos[0]
|
|
||||||
self._column = start_pos[1]
|
|
||||||
|
|
||||||
def __str__(self):
|
|
||||||
return self._string
|
|
||||||
|
|
||||||
def __unicode__(self):
|
|
||||||
return self._string
|
|
||||||
|
|
||||||
def __repr__(self):
|
|
||||||
return "<%s: %s@%s,%s>" % (type(self).__name__, self._string,
|
|
||||||
self.start_pos[0], self.start_pos[1])
|
|
||||||
|
|
||||||
def get_code(self):
|
|
||||||
return self._string
|
|
||||||
|
|
||||||
def get_definition(self):
|
|
||||||
return self.get_parent_until((ArrayStmt, StatementElement), reverse=True)
|
|
||||||
|
|
||||||
def get_parent_until(self, *args, **kwargs):
|
|
||||||
return self.parent.get_parent_until(*args, **kwargs)
|
|
||||||
|
|
||||||
def isinstance(self, *cls):
|
|
||||||
return isinstance(self, cls)
|
|
||||||
|
|
||||||
@property
|
|
||||||
def start_pos(self):
|
|
||||||
offset = self._sub_module.line_offset
|
|
||||||
return offset + self._line, self._column
|
|
||||||
|
|
||||||
@property
|
|
||||||
def end_pos(self):
|
|
||||||
return self.start_pos[0], self.start_pos[1] + len(self._string)
|
|
||||||
|
|
||||||
|
|
||||||
class ListComprehension(ForFlow):
|
class ListComprehension(ForFlow):
|
||||||
""" Helper class for list comprehensions """
|
""" Helper class for list comprehensions """
|
||||||
def __init__(self, module, stmt, middle, input, parent):
|
def __init__(self, module, stmt, middle, input, parent):
|
||||||
@@ -1581,39 +1593,3 @@ class ListComprehension(ForFlow):
|
|||||||
statements = self.stmt, self.middle, self.input
|
statements = self.stmt, self.middle, self.input
|
||||||
code = [s.get_code().replace('\n', '') for s in statements]
|
code = [s.get_code().replace('\n', '') for s in statements]
|
||||||
return "%s for %s in %s" % tuple(code)
|
return "%s for %s in %s" % tuple(code)
|
||||||
|
|
||||||
|
|
||||||
class _Leaf(Base):
|
|
||||||
__slots__ = ('value', 'parent', 'start_pos', 'prefix')
|
|
||||||
def __init__(self, value, start_pos, prefix):
|
|
||||||
self.value = value
|
|
||||||
self.start_pos = start_pos
|
|
||||||
self.prefix = prefix
|
|
||||||
|
|
||||||
def get_code(self):
|
|
||||||
return self.prefix + self.value
|
|
||||||
|
|
||||||
def __repr__(self):
|
|
||||||
return "<%s: `%s`>" % (type(self).__name__, self.value)
|
|
||||||
|
|
||||||
|
|
||||||
class Operator(_Leaf):
|
|
||||||
def __str__(self):
|
|
||||||
return self.get_code()
|
|
||||||
|
|
||||||
def __eq__(self, other):
|
|
||||||
"""
|
|
||||||
Make comparisons with strings easy.
|
|
||||||
Improves the readability of the parser.
|
|
||||||
"""
|
|
||||||
if isinstance(other, Operator):
|
|
||||||
return self is other
|
|
||||||
else:
|
|
||||||
return self.value == other
|
|
||||||
|
|
||||||
def __ne__(self, other):
|
|
||||||
"""Python 2 compatibility."""
|
|
||||||
return self.value != other
|
|
||||||
|
|
||||||
def __hash__(self):
|
|
||||||
return hash(self.value)
|
|
||||||
|
|||||||
Reference in New Issue
Block a user