Definition.parent is working. fixes #325

This commit is contained in:
Dave Halter
2014-04-02 15:37:41 +02:00
parent 99f292fbb5
commit d8c433cb20
2 changed files with 13 additions and 6 deletions

View File

@@ -632,6 +632,11 @@ class Definition(use_metaclass(CachedMetaClass, BaseDefinition)):
iterable = list(iterable) iterable = list(iterable)
return list(chain.from_iterable(iterable)) return list(chain.from_iterable(iterable))
def parent(self):
scope = self._definition.get_parent_until(pr.IsScope, include_current=False)
non_flow = scope.get_parent_until(pr.Flow, reverse=True)
return Definition(self._evaluator, non_flow)
class CallSignature(Definition): class CallSignature(Definition):
""" """

View File

@@ -146,17 +146,19 @@ def test_signature_params():
class TestParent(TestCase): class TestParent(TestCase):
def _parent(self, source): def _parent(self, source):
defs = Script(dedent(source)).goto_definitions() defs = Script(dedent(source)).goto_assignments()
assert len(defs) == 1 assert len(defs) == 1
return defs[0].parent() return defs[0].parent()
def test_parent(self): def test_parent(self):
parent = self._parent('foo') parent = self._parent('foo=1\nfoo')
assert isinstance(parent, pr.SubModule) assert parent.type == 'module'
parent = self._parent(''' parent = self._parent('''
def spam(): def spam():
if 1: if 1:
''') y=1
assert isinstance(parent, pr.SubModule) y''')
assert isinstance(parent.parent(), pr.SubModule) assert parent.name == 'spam'
print(parent, parent.parent())
assert parent.parent().type == 'module'