mirror of
https://github.com/davidhalter/jedi.git
synced 2026-02-21 18:28:27 +08:00
Separate class for Generator and List Comprehensions.
This commit is contained in:
@@ -212,8 +212,8 @@ class Evaluator(object):
|
|||||||
else:
|
else:
|
||||||
c = atom.children
|
c = atom.children
|
||||||
# Parentheses without commas are not tuples.
|
# Parentheses without commas are not tuples.
|
||||||
if c[0] == '(' and (not pr.is_node(c[1], 'testlist_comp')
|
if c[0] == '(' and not (pr.is_node(c[1], 'testlist_comp')
|
||||||
or c[1].children[1] != ','):
|
and len(c[1].children) > 1):
|
||||||
return self.eval_element(c[1])
|
return self.eval_element(c[1])
|
||||||
try:
|
try:
|
||||||
comp_for = c[1].children[1]
|
comp_for = c[1].children[1]
|
||||||
@@ -221,7 +221,7 @@ class Evaluator(object):
|
|||||||
pass
|
pass
|
||||||
else:
|
else:
|
||||||
if isinstance(comp_for, pr.CompFor):
|
if isinstance(comp_for, pr.CompFor):
|
||||||
return [iterable.Comprehension(self, atom)]
|
return [iterable.Comprehension.from_atom(self, atom)]
|
||||||
return [iterable.Array(self, atom)]
|
return [iterable.Array(self, atom)]
|
||||||
|
|
||||||
def _eval_trailer(self, types, trailer):
|
def _eval_trailer(self, types, trailer):
|
||||||
|
|||||||
@@ -110,23 +110,19 @@ class GeneratorMethod(IterableWrapper):
|
|||||||
return getattr(self._builtin_func, name)
|
return getattr(self._builtin_func, name)
|
||||||
|
|
||||||
|
|
||||||
class GeneratorComprehension(Generator):
|
|
||||||
def __init__(self, evaluator, comprehension):
|
|
||||||
super(GeneratorComprehension, self).__init__(evaluator, comprehension, None)
|
|
||||||
self.comprehension = comprehension
|
|
||||||
|
|
||||||
def iter_content(self):
|
|
||||||
return self._evaluator.eval_statement_element(self.comprehension)
|
|
||||||
|
|
||||||
|
|
||||||
class Comprehension(IterableWrapper):
|
class Comprehension(IterableWrapper):
|
||||||
|
@staticmethod
|
||||||
|
def from_atom(evaluator, atom):
|
||||||
|
mapping = {
|
||||||
|
'(': GeneratorComprehension,
|
||||||
|
'[': ListComprehension
|
||||||
|
}
|
||||||
|
return mapping[atom.children[0]](evaluator, atom)
|
||||||
|
|
||||||
def __init__(self, evaluator, atom):
|
def __init__(self, evaluator, atom):
|
||||||
self._evaluator = evaluator
|
self._evaluator = evaluator
|
||||||
self._atom = atom
|
self._atom = atom
|
||||||
|
|
||||||
def get_index_types(self, evaluator, index):
|
|
||||||
return self._evaluator.eval_element(self.eval_node())
|
|
||||||
|
|
||||||
@memoize_default()
|
@memoize_default()
|
||||||
def eval_node(self):
|
def eval_node(self):
|
||||||
"""
|
"""
|
||||||
@@ -151,6 +147,17 @@ class Comprehension(IterableWrapper):
|
|||||||
return "<e%s of %s>" % (type(self).__name__, self._atom)
|
return "<e%s of %s>" % (type(self).__name__, self._atom)
|
||||||
|
|
||||||
|
|
||||||
|
class ListComprehension(Comprehension):
|
||||||
|
def get_index_types(self, evaluator, index):
|
||||||
|
return self._evaluator.eval_element(self.eval_node())
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class GeneratorComprehension(Comprehension):
|
||||||
|
def iter_content(self):
|
||||||
|
return self._evaluator.eval_statement_element(self.comprehension)
|
||||||
|
|
||||||
|
|
||||||
class Array(IterableWrapper):
|
class Array(IterableWrapper):
|
||||||
"""
|
"""
|
||||||
Used as a mirror to pr.Array, if needed. It defines some getter
|
Used as a mirror to pr.Array, if needed. It defines some getter
|
||||||
|
|||||||
Reference in New Issue
Block a user