diff --git a/jedi/api/classes.py b/jedi/api/classes.py index 8847ef2d..130b492c 100644 --- a/jedi/api/classes.py +++ b/jedi/api/classes.py @@ -618,7 +618,7 @@ class Signature(Definition): @property def params(self): - return [Definition(self._evaluator, n) + return [ParamDefinition(self._evaluator, n) for n in self._signature.get_param_names(resolve_stars=True)] @@ -660,6 +660,14 @@ class CallSignature(Signature): ) +class ParamDefinition(Definition): + def infer_default(self): + return [Definition(self._evaluator, d.name) for d in self._name.infer_default()] + + def infer_annotation(self): + return [Definition(self._evaluator, d.name) for d in self._name.infer_annotation()] + + def _format_signatures(context): return '\n'.join( signature.to_string() diff --git a/jedi/evaluate/names.py b/jedi/evaluate/names.py index 563506b3..86537d10 100644 --- a/jedi/evaluate/names.py +++ b/jedi/evaluate/names.py @@ -3,7 +3,7 @@ from abc import abstractmethod from parso.tree import search_ancestor from jedi._compatibility import Parameter -from jedi.evaluate.base_context import ContextSet +from jedi.evaluate.base_context import ContextSet, NO_CONTEXTS from jedi.cache import memoize_method @@ -220,6 +220,18 @@ class ParamName(BaseTreeParamName): def annotation_node(self): return self._get_param_node().annotation + def infer_annotation(self): + node = self.annotation_node + if node is None: + return NO_CONTEXTS + return self.parent_context.parent_context.eval_node(node) + + def infer_default(self): + node = self.default_node + if node is None: + return NO_CONTEXTS + return self.parent_context.parent_context.eval_node(node) + @property def default_node(self): return self._get_param_node().default