From 8bc9c8cda2d5937e4922c2cfce0d9b4091dc5867 Mon Sep 17 00:00:00 2001 From: Dave Halter Date: Wed, 17 Nov 2021 00:14:59 +0100 Subject: [PATCH] Fix an issue where a slice is indexed, fixes #1748 --- jedi/inference/value/iterable.py | 22 ++++++++++++---------- test/completion/arrays.py | 16 ++++++++++++++++ 2 files changed, 28 insertions(+), 10 deletions(-) diff --git a/jedi/inference/value/iterable.py b/jedi/inference/value/iterable.py index 2f970fe8..7cc37173 100644 --- a/jedi/inference/value/iterable.py +++ b/jedi/inference/value/iterable.py @@ -342,6 +342,8 @@ class SequenceLiteralValue(Sequence): else: with reraise_getitem_errors(TypeError, KeyError, IndexError): node = self.get_tree_entries()[index] + if node == ':' or node.type == 'subscript': + return NO_VALUES return self._defining_context.infer_node(node) def py__iter__(self, contextualized_node=None): @@ -407,16 +409,6 @@ class SequenceLiteralValue(Sequence): else: return [array_node] - def exact_key_items(self): - """ - Returns a generator of tuples like dict.items(), where the key is - resolved (as a string) and the values are still lazy values. - """ - for key_node, value in self.get_tree_entries(): - for key in self._defining_context.infer_node(key_node): - if is_string(key): - yield key.get_safe_value(), LazyTreeValue(self._defining_context, value) - def __repr__(self): return "<%s of %s>" % (self.__class__.__name__, self.atom) @@ -472,6 +464,16 @@ class DictLiteralValue(_DictMixin, SequenceLiteralValue, _DictKeyMixin): return ValueSet([FakeList(self.inference_state, lazy_values)]) + def exact_key_items(self): + """ + Returns a generator of tuples like dict.items(), where the key is + resolved (as a string) and the values are still lazy values. + """ + for key_node, value in self.get_tree_entries(): + for key in self._defining_context.infer_node(key_node): + if is_string(key): + yield key.get_safe_value(), LazyTreeValue(self._defining_context, value) + def _dict_values(self): return ValueSet.from_sets( self._defining_context.infer_node(v) diff --git a/test/completion/arrays.py b/test/completion/arrays.py index 59b8f2fe..21437bce 100644 --- a/test/completion/arrays.py +++ b/test/completion/arrays.py @@ -44,6 +44,8 @@ b[int():] #? list() b[:] +#? int() +b[:, :-1] #? 3 b[:] @@ -67,6 +69,20 @@ class _StrangeSlice(): #? slice() _StrangeSlice()[1:2] +for x in b[:]: + #? int() + x + +for x in b[:, :-1]: + #? + x + +class Foo: + def __getitem__(self, item): + return item + +#? +Foo()[:, :-1][0] # ----------------- # iterable multiplication