1
0
forked from VimPlug/jedi

Remove used_names from the parser step. It's a separate iteration, now.

This commit is contained in:
Dave Halter
2017-03-16 21:28:42 +01:00
parent fd50146f92
commit 8156a6b8a2
3 changed files with 25 additions and 10 deletions

View File

@@ -442,7 +442,7 @@ class Module(Scope):
Depending on the underlying parser this may be a full module or just a part
of a module.
"""
__slots__ = ('path', 'used_names', '_name')
__slots__ = ('path', '_used_names', '_name')
type = 'file_input'
def __init__(self, children):
@@ -456,6 +456,7 @@ class Module(Scope):
"""
super(Module, self).__init__(children)
self.path = None # Set later.
self._used_names = None
@property
def name(self):
@@ -497,6 +498,27 @@ class Module(Scope):
result += child.nodes_to_execute()
return result
@property
def used_names(self):
if self._used_names is None:
# Don't directly use self._used_names to eliminate a lookup.
dct = {}
def recurse(node):
try:
children = node.children
except AttributeError:
if node.type == 'name':
arr = dct.setdefault(node.value, [])
arr.append(node)
else:
for child in children:
recurse(child)
recurse(self)
self._used_names = dct
return self._used_names
class Decorator(PythonBaseNode):
type = 'decorator'