Fix __call__ param completion. Fixes #613.

This commit is contained in:
Dave Halter
2016-07-31 21:37:01 +02:00
parent 5f064a2a0a
commit 62e184134b
3 changed files with 24 additions and 4 deletions

View File

@@ -345,12 +345,20 @@ class BaseDefinition(object):
params = followed.params
elif followed.isinstance(er.compiled.CompiledObject):
params = followed.params
else:
elif isinstance(followed, er.Class):
try:
sub = followed.get_subscope_by_name('__init__')
params = sub.params[1:] # ignore self
except KeyError:
return []
elif isinstance(followed, er.Instance):
try:
sub = followed.get_subscope_by_name('__call__')
params = sub.params[1:] # ignore self
except KeyError:
return []
else:
return []
return [_Param(self._evaluator, p.name) for p in params]
def parent(self):

View File

@@ -3,12 +3,11 @@ Helpers for the API
"""
import re
from collections import namedtuple
from textwrap import dedent
from jedi._compatibility import u
from jedi.evaluate.helpers import call_of_leaf
from jedi import parser
from jedi.parser import tokenize, token
from jedi.parser import tokenize
from jedi.cache import time_cache
from jedi import common
@@ -279,7 +278,7 @@ def get_call_signature_details(module, position):
# makes it feel strange to have a call signature.
return None
for n in node.children:
for n in node.children[::-1]:
if n.start_pos < position and n.type == 'error_node':
result = _get_call_signature_details_from_error_node(n, position)
if result is not None:

View File

@@ -33,3 +33,16 @@ multiple(foo, bar
my_lambda = lambda lambda_param: lambda_param + 1
#? 22 ['lambda_param']
my_lambda(lambda_param)
# __call__
class Test(object):
def __init__(self, hello_other):
pass
def __call__(self, hello):
pass
#? 12 ['hello']
Test()(hello=)
#? 11 []
Test()(self=)