Make it possible for users to infer annotations/defaults

Fixes #1039
This commit is contained in:
Dave Halter
2019-08-01 18:27:37 +02:00
parent 7988c1d11b
commit c2e50e1d0d
2 changed files with 22 additions and 2 deletions

View File

@@ -618,7 +618,7 @@ class Signature(Definition):
@property @property
def params(self): def params(self):
return [Definition(self._evaluator, n) return [ParamDefinition(self._evaluator, n)
for n in self._signature.get_param_names(resolve_stars=True)] 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): def _format_signatures(context):
return '\n'.join( return '\n'.join(
signature.to_string() signature.to_string()

View File

@@ -3,7 +3,7 @@ from abc import abstractmethod
from parso.tree import search_ancestor from parso.tree import search_ancestor
from jedi._compatibility import Parameter 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 from jedi.cache import memoize_method
@@ -220,6 +220,18 @@ class ParamName(BaseTreeParamName):
def annotation_node(self): def annotation_node(self):
return self._get_param_node().annotation 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 @property
def default_node(self): def default_node(self):
return self._get_param_node().default return self._get_param_node().default