diff --git a/jedi/evaluate/iterable.py b/jedi/evaluate/iterable.py index 3847a31f..32a185ea 100644 --- a/jedi/evaluate/iterable.py +++ b/jedi/evaluate/iterable.py @@ -519,10 +519,10 @@ def py__getitem__(evaluator, types, index, node): try: result |= getitem(index) except IndexError: - return py__iter__types(evaluator, set([typ])) + result |= py__iter__types(evaluator, set([typ])) except KeyError: # Must be a dict. Lists don't raise IndexErrors. - return typ.values() + result |= typ.values() return result diff --git a/jedi/evaluate/representation.py b/jedi/evaluate/representation.py index ff0626ba..3b58ef2a 100644 --- a/jedi/evaluate/representation.py +++ b/jedi/evaluate/representation.py @@ -198,21 +198,15 @@ class Instance(use_metaclass(CachedMetaClass, Executed)): for names_dict in self.base.names_dicts(search_global=False, is_instance=True): yield LazyInstanceDict(self._evaluator, self, names_dict) - def get_index_types(self, evaluator, index_array): - indexes = iterable.create_indexes_or_slices(self._evaluator, index_array) - if any([isinstance(i, iterable.Slice) for i in indexes]): - # Slice support in Jedi is very marginal, at the moment, so just - # ignore them in case of __getitem__. - # TODO support slices in a more general way. - indexes = [] - + def py__getitem__(self, index): try: method = self.get_subscope_by_name('__getitem__') except KeyError: debug.warning('No __getitem__, cannot access the array.') return set() else: - return self._evaluator.execute(method, [iterable.AlreadyEvaluated(indexes)]) + index_obj = compiled.create(self._evaluator, index) + return self._evaluator.execute_evaluated(method, index_obj) def py__iter__(self): try: diff --git a/test/completion/arrays.py b/test/completion/arrays.py index 14ef990b..8cb9f3a1 100644 --- a/test/completion/arrays.py +++ b/test/completion/arrays.py @@ -41,11 +41,11 @@ b[int():] class _StrangeSlice(): - def __getitem__(self, slice): - return slice + def __getitem__(self, sliced): + return sliced # Should not result in an error, just because the slice itself is returned. -#? [] +#? slice() _StrangeSlice()[1:2]