1
0
forked from VimPlug/jedi

better separation pep0484 code and py__annotation__() function

This commit is contained in:
Claude
2015-12-14 12:10:00 +01:00
parent be399c81c3
commit 576fdf8106
2 changed files with 19 additions and 11 deletions

View File

@@ -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)

View File

@@ -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)