diff --git a/jedi/evaluate/context/function.py b/jedi/evaluate/context/function.py index 12df343b..203dcf0d 100644 --- a/jedi/evaluate/context/function.py +++ b/jedi/evaluate/context/function.py @@ -101,7 +101,7 @@ class FunctionMixin(object): return FunctionExecutionContext(self.evaluator, self.parent_context, self, arguments) def get_signatures(self): - return [TreeSignature(self)] + return [TreeSignature(f) for f in self.get_signature_functions()] class FunctionContext(use_metaclass(CachedMetaClass, FunctionMixin, FunctionAndClassBase)): @@ -150,6 +150,9 @@ class FunctionContext(use_metaclass(CachedMetaClass, FunctionMixin, FunctionAndC def get_default_param_context(self): return self.parent_context + def get_signature_functions(self): + return [self] + class MethodContext(FunctionContext): def __init__(self, evaluator, class_context, *args, **kwargs): @@ -393,8 +396,8 @@ class OverloadedFunctionContext(FunctionMixin, ContextWrapper): return NO_CONTEXTS return ContextSet.from_sets(fe.infer() for fe in function_executions) - def get_signatures(self): - return [s for f in self._overloaded_functions for s in f.get_signatures()] + def get_signature_functions(self): + return self._overloaded_functions def _find_overload_functions(context, tree_node): diff --git a/jedi/evaluate/context/instance.py b/jedi/evaluate/context/instance.py index 91bc3184..e00ff031 100644 --- a/jedi/evaluate/context/instance.py +++ b/jedi/evaluate/context/instance.py @@ -399,8 +399,14 @@ class BoundMethod(FunctionMixin, ContextWrapper): function_execution = self.get_function_execution(arguments) return function_execution.infer() + def get_signature_functions(self): + return [ + BoundMethod(self.instance, f) + for f in self._wrapped_context.get_signature_functions() + ] + def get_signatures(self): - return [sig.bind(self, self) for sig in self._wrapped_context.get_signatures()] + return [sig.bind(self) for sig in super(BoundMethod, self).get_signatures()] def __repr__(self): return '<%s: %s>' % (self.__class__.__name__, self._wrapped_context) diff --git a/jedi/evaluate/signature.py b/jedi/evaluate/signature.py index d225ae13..ee832dcc 100644 --- a/jedi/evaluate/signature.py +++ b/jedi/evaluate/signature.py @@ -50,7 +50,7 @@ class AbstractSignature(_SignatureMixin): return param_names[1:] return param_names - def bind(self, context, function_context=None): + def bind(self, context): raise NotImplementedError def __repr__(self): @@ -62,8 +62,8 @@ class TreeSignature(AbstractSignature): super(TreeSignature, self).__init__(context, is_bound) self._function_context = function_context or context - def bind(self, context, function_context=None): - return TreeSignature(context, function_context or self._function_context, is_bound=True) + def bind(self, context): + return TreeSignature(context, self._function_context, is_bound=True) @property def _annotation(self): @@ -101,7 +101,7 @@ class BuiltinSignature(AbstractSignature): def _function_context(self): return self.context - def bind(self, context, function_context=None): + def bind(self, context): assert not self.is_bound return BuiltinSignature(context, self._return_string, is_bound=True) diff --git a/jedi/plugins/stdlib.py b/jedi/plugins/stdlib.py index 9019d83d..4c3d9ccb 100644 --- a/jedi/plugins/stdlib.py +++ b/jedi/plugins/stdlib.py @@ -666,6 +666,9 @@ class Wrapped(ContextWrapper, FunctionMixin): def name(self): return self._original_function.name + def get_signature_functions(self): + return [self] + class ReplacedNameSignature(SignatureWrapper): def __init__(self, signature, name):