1
0
forked from VimPlug/jedi

Fix comprehensions type issues.

This commit is contained in:
Dave Halter
2015-09-22 02:13:20 +02:00
parent 4ffc24a919
commit 3a306a4f25
5 changed files with 47 additions and 26 deletions

View File

@@ -89,6 +89,7 @@ class Evaluator(object):
self.execution_recursion_detector = recursion.ExecutionRecursionDetector()
self.analysis = []
self.predefined_if_name_dict_dict = {}
self.is_analysis = False
def wrap(self, element):
if isinstance(element, tree.Class):
@@ -343,6 +344,9 @@ class Evaluator(object):
if not isinstance(arguments, param.Arguments):
arguments = param.Arguments(self, arguments, trailer)
if self.is_analysis:
arguments.eval_all()
if obj.isinstance(er.Function):
obj = obj.get_decorated_func()

View File

@@ -148,7 +148,7 @@ class Comprehension(IterableWrapper):
return [self._evaluator.eval_element(self.eval_node())[index]]
def __repr__(self):
return "<e%s of %s>" % (type(self).__name__, self._atom)
return "<%s of %s>" % (type(self).__name__, self._atom)
class ArrayMixin(object):

View File

@@ -12,6 +12,17 @@ from jedi.evaluate.helpers import FakeName
from jedi.cache import underscore_memoization
def try_iter_content(types):
"""Helper method for static analysis."""
for typ in types:
try:
f = typ.iter_content
except AttributeError:
pass
else:
try_iter_content(f())
class Arguments(tree.Base):
def __init__(self, evaluator, argument_node, trailer=None):
"""
@@ -160,6 +171,16 @@ class Arguments(tree.Base):
else:
return None
def eval_all(self, func=None):
"""
Evaluates all arguments as a support for static analysis
(normally Jedi).
"""
for key, element_values in self.unpack():
for element in element_values:
types = self._evaluator.eval_element(element)
try_iter_content(types)
class ExecutedParam(tree.Param):
"""Fake a param and give it values."""