diff --git a/jedi/evaluate/__init__.py b/jedi/evaluate/__init__.py index 3feb4491..365609f9 100644 --- a/jedi/evaluate/__init__.py +++ b/jedi/evaluate/__init__.py @@ -109,7 +109,7 @@ class Evaluator(object): return f.filter_name(scopes) return f.find(scopes, resolve_decorator) - @memoize_default(default=(), evaluator_is_first_arg=True) + @memoize_default(default=[], evaluator_is_first_arg=True) @recursion.recursion_decorator @debug.increase_indent def eval_statement(self, stmt, seek_name=None): diff --git a/jedi/evaluate/finder.py b/jedi/evaluate/finder.py index f9e4e6bf..0638aa28 100644 --- a/jedi/evaluate/finder.py +++ b/jedi/evaluate/finder.py @@ -11,7 +11,6 @@ would check whether a flow has the form of ``if isinstance(a, type_or_tuple)``. Unfortunately every other thing is being ignored (e.g. a == '' would be easy to check for -> a is a string). There's big potential in these checks. """ -import copy import sys from jedi._compatibility import hasattr, unicode, u, reraise diff --git a/jedi/evaluate/representation.py b/jedi/evaluate/representation.py index 93445e76..070e502f 100644 --- a/jedi/evaluate/representation.py +++ b/jedi/evaluate/representation.py @@ -169,6 +169,12 @@ class Instance(use_metaclass(CachedMetaClass, Executable)): return False def get_index_types(self, indexes=[]): + 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 = [] + try: return self.execute_subscope_by_name('__getitem__', indexes) except KeyError: diff --git a/test/completion/arrays.py b/test/completion/arrays.py index ea3cbcf8..1d4d0e1d 100644 --- a/test/completion/arrays.py +++ b/test/completion/arrays.py @@ -30,6 +30,9 @@ b = [6,7] #? int() b[8-7] +# ----------------- +# Slices +# ----------------- #? list() b[8:] @@ -37,6 +40,14 @@ b[8:] b[int():] +class _StrangeSlice(): + def __getitem__(self, slice): + return slice + +#? [] +_StrangeSlice()[1:2] + + # ----------------- # iterable multiplication # -----------------