Fix a call signature issue.

This commit is contained in:
Dave Halter
2017-02-01 19:21:07 +01:00
parent 68a3a9cf41
commit a5a54fbc85
2 changed files with 38 additions and 1 deletions

View File

@@ -347,7 +347,10 @@ class BaseDefinition(object):
# Just take the first one here, not optimal, but currently
# there's no better solution.
inferred = names[0].infer()
return get_param_names(next(iter(inferred)))
param_names = get_param_names(next(iter(inferred)))
if isinstance(context, er.ClassContext):
param_names = param_names[1:]
return param_names
elif isinstance(context, compiled.CompiledObject):
return context.get_param_names()
return param_names

View File

@@ -386,3 +386,37 @@ def test_lambda_params():
assert sig.index == 0
assert sig.name == '<lambda>'
assert [p.name for p in sig.params] == ['x']
def test_class_creation():
code = dedent('''\
class X():
def __init__(self, foo, bar):
self.foo = foo
''')
sig, = Script(code + 'X(').call_signatures()
assert sig.index == 0
assert sig.name == 'X'
assert [p.name for p in sig.params] == ['foo', 'bar']
sig, = Script(code + 'X.__init__(').call_signatures()
assert [p.name for p in sig.params] == ['self', 'foo', 'bar']
sig, = Script(code + 'X().__init__(').call_signatures()
assert [p.name for p in sig.params] == ['foo', 'bar']
def test_call_magic_method():
code = dedent('''\
class X():
def __call__(self, baz):
pass
''')
sig, = Script(code + 'X()(').call_signatures()
assert sig.index == 0
assert sig.name == 'X'
assert [p.name for p in sig.params] == ['baz']
sig, = Script(code + 'X.__call__(').call_signatures()
assert [p.name for p in sig.params] == ['self', 'baz']
sig, = Script(code + 'X().__call__(').call_signatures()
assert [p.name for p in sig.params] == ['baz']