Goto on named params in class calls is now working.

This commit is contained in:
Dave Halter
2014-09-18 20:11:58 +02:00
parent ba80e35204
commit 69e6139527
3 changed files with 13 additions and 2 deletions

View File

@@ -337,7 +337,13 @@ class Evaluator(object):
param_names = [] param_names = []
named_param_name = stmt.get_defined_names()[0] named_param_name = stmt.get_defined_names()[0]
for typ in self.eval_call(call): for typ in self.eval_call(call):
for param in typ.params: if isinstance(typ, er.Class):
params = []
for init_method in typ.py__getattribute__('__init__'):
params += init_method.params
else:
params = typ.params
for param in params:
if unicode(param.get_name()) == unicode(named_param_name): if unicode(param.get_name()) == unicode(named_param_name):
param_names.append(param.get_name().names[-1]) param_names.append(param.get_name().names[-1])
return param_names return param_names

View File

@@ -390,6 +390,9 @@ class Class(use_metaclass(CachedMetaClass, Wrapper)):
def py__call__(self, evaluator, params): def py__call__(self, evaluator, params):
return [Instance(evaluator, self, params)] return [Instance(evaluator, self, params)]
def py__getattribute__(self, name):
return self._evaluator.find_types(self, name)
def scope_names_generator(self, position=None, add_class_vars=True): def scope_names_generator(self, position=None, add_class_vars=True):
def in_iterable(name, iterable): def in_iterable(name, iterable):
""" checks if the name is in the variable 'iterable'. """ """ checks if the name is in the variable 'iterable'. """

View File

@@ -246,4 +246,6 @@ class TestGotoAssignments(TestCase):
src = 'from threading import Thread; Thread(group=1)' src = 'from threading import Thread; Thread(group=1)'
n = names(src, references=True)[-1] n = names(src, references=True)[-1]
assert n.name == 'group' assert n.name == 'group'
assert n.goto_assignments() param_def = n.goto_assignments()[0]
assert param_def.name == 'group'
assert param_def.type == 'param'