forked from VimPlug/jedi
better separation pep0484 code and py__annotation__() function
This commit is contained in:
@@ -21,12 +21,22 @@ from itertools import chain
|
|||||||
from jedi.evaluate.cache import memoize_default
|
from jedi.evaluate.cache import memoize_default
|
||||||
|
|
||||||
|
|
||||||
@memoize_default(None, evaluator_is_first_arg=True)
|
def _evaluate_for_annotation(evaluator, annotation):
|
||||||
def follow_param(evaluator, param):
|
if annotation is not None:
|
||||||
annotation = param.annotation()
|
|
||||||
if annotation:
|
|
||||||
definitions = evaluator.eval_element(annotation)
|
definitions = evaluator.eval_element(annotation)
|
||||||
return list(chain.from_iterable(
|
return list(chain.from_iterable(
|
||||||
evaluator.execute(d) for d in definitions))
|
evaluator.execute(d) for d in definitions))
|
||||||
else:
|
else:
|
||||||
return []
|
return []
|
||||||
|
|
||||||
|
|
||||||
|
@memoize_default(None, evaluator_is_first_arg=True)
|
||||||
|
def follow_param(evaluator, param):
|
||||||
|
annotation = param.annotation()
|
||||||
|
return _evaluate_for_annotation(evaluator, annotation)
|
||||||
|
|
||||||
|
|
||||||
|
@memoize_default(None, evaluator_is_first_arg=True)
|
||||||
|
def find_return_types(evaluator, func):
|
||||||
|
annotation = func.py__annotations__().get("return", None)
|
||||||
|
return _evaluate_for_annotation(evaluator, annotation)
|
||||||
|
|||||||
@@ -49,6 +49,7 @@ from jedi.evaluate import compiled
|
|||||||
from jedi.evaluate import recursion
|
from jedi.evaluate import recursion
|
||||||
from jedi.evaluate import iterable
|
from jedi.evaluate import iterable
|
||||||
from jedi.evaluate import docstrings
|
from jedi.evaluate import docstrings
|
||||||
|
from jedi.evaluate import pep0484
|
||||||
from jedi.evaluate import helpers
|
from jedi.evaluate import helpers
|
||||||
from jedi.evaluate import param
|
from jedi.evaluate import param
|
||||||
from jedi.evaluate import flow_analysis
|
from jedi.evaluate import flow_analysis
|
||||||
@@ -585,14 +586,13 @@ class Function(use_metaclass(CachedMetaClass, Wrapper)):
|
|||||||
parser_func = self.base
|
parser_func = self.base
|
||||||
return_annotation = parser_func.annotation()
|
return_annotation = parser_func.annotation()
|
||||||
if return_annotation:
|
if return_annotation:
|
||||||
dct = {'return': self._evaluator.eval_element(return_annotation)}
|
dct = {'return': return_annotation}
|
||||||
else:
|
else:
|
||||||
dct = {}
|
dct = {}
|
||||||
for function_param in parser_func.params:
|
for function_param in parser_func.params:
|
||||||
param_annotation = function_param.annotation()
|
param_annotation = function_param.annotation()
|
||||||
if param_annotation:
|
if param_annotation is not None:
|
||||||
dct[function_param.name.value] = \
|
dct[function_param.name.value] = param_annotation
|
||||||
self._evaluator.eval_element(param_annotation)
|
|
||||||
return dct
|
return dct
|
||||||
|
|
||||||
def py__class__(self):
|
def py__class__(self):
|
||||||
@@ -654,9 +654,7 @@ class FunctionExecution(Executed):
|
|||||||
else:
|
else:
|
||||||
returns = self.returns
|
returns = self.returns
|
||||||
types = set(docstrings.find_return_types(self._evaluator, func))
|
types = set(docstrings.find_return_types(self._evaluator, func))
|
||||||
annotations = func.py__annotations__().get("return", [])
|
types |= set(pep0484.find_return_types(self._evaluator, func))
|
||||||
types |= set(chain.from_iterable(
|
|
||||||
self._evaluator.execute(d) for d in annotations))
|
|
||||||
|
|
||||||
for r in returns:
|
for r in returns:
|
||||||
check = flow_analysis.break_check(self._evaluator, self, r)
|
check = flow_analysis.break_check(self._evaluator, self, r)
|
||||||
|
|||||||
Reference in New Issue
Block a user