diff --git a/jedi/api/strings.py b/jedi/api/strings.py index f91da25b..7850142c 100644 --- a/jedi/api/strings.py +++ b/jedi/api/strings.py @@ -36,8 +36,11 @@ def complete_dict(module_context, code_lines, leaf, position, string, fuzzy): string = cut_value_at_position(leaf, position) context = module_context.create_context(bracket_leaf) - before_bracket_leaf = bracket_leaf.get_previous_leaf() - if before_bracket_leaf.type in ('atom', 'trailer', 'name'): + + before_node = before_bracket_leaf = bracket_leaf.get_previous_leaf() + if before_node in (')', ']', '}'): + before_node = before_node.parent + if before_node.type in ('atom', 'trailer', 'name'): values = infer_call_of_leaf(context, before_bracket_leaf) return list(_completions_for_dicts( module_context.inference_state, diff --git a/test/test_api/test_interpreter.py b/test/test_api/test_interpreter.py index 3182b506..43042210 100644 --- a/test/test_api/test_interpreter.py +++ b/test/test_api/test_interpreter.py @@ -830,3 +830,11 @@ def test_try_to_use_return_annotation_for_property(class_is_findable): # This is a fallback, if the annotations don't help _assert_interpreter_complete('p.with_annotation_garbage1.its', namespace, ['its_me']) _assert_interpreter_complete('p.with_annotation_garbage2.its', namespace, ['its_me']) + + +def test_nested__getitem__(): + d = {'foo': {'bar': 1}} + _assert_interpreter_complete('d["fo', locals(), ['"foo"']) + _assert_interpreter_complete('d["foo"]["ba', locals(), ['"bar"']) + _assert_interpreter_complete('(d["foo"])["ba', locals(), ['"bar"']) + _assert_interpreter_complete('((d["foo"]))["ba', locals(), ['"bar"'])