diff --git a/jedi/evaluate/__init__.py b/jedi/evaluate/__init__.py index 9646922c..4b27e5f6 100644 --- a/jedi/evaluate/__init__.py +++ b/jedi/evaluate/__init__.py @@ -163,19 +163,21 @@ class Evaluator(object): return result def eval_element(self, element): - if isinstance(element, (pr.Name, pr.Literal)): - return self.eval_atom(element) + if isinstance(element, (pr.Name, pr.Literal)) or pr.is_node(element, 'atom'): + return self._eval_atom(element) elif element.type == python_symbols.power: - types = self.eval_atom(element.children[0]) + types = self._eval_atom(element.children[0]) for trailer in element.children[1:]: if trailer == '**': # has a power operation. raise NotImplementedError types = self.eval_trailer(types, trailer) return types else: - raise NotImplementedError + left, operator, right = element.children + return precedence.calculate(self, self.eval_element(left), operator, + self.eval_element(right)) - def eval_atom(self, atom): + def _eval_atom(self, atom): """ Basically to process ``atom`` nodes. The parser sometimes doesn't generate the node (because it has just one child). In that case an atom diff --git a/jedi/evaluate/iterable.py b/jedi/evaluate/iterable.py index a39d2ac1..ef9dc24d 100644 --- a/jedi/evaluate/iterable.py +++ b/jedi/evaluate/iterable.py @@ -220,7 +220,8 @@ class Array(use_metaclass(CachedMetaClass, IterableWrapper)): def _items(self): if pr.is_node(self._array_node, 'testlist_comp'): return self._array_node.children[::2] - raise NotImplementedError + else: + return [self._array_node] def __iter__(self): return iter(self._items())