diff --git a/jedi/parser/representation.py b/jedi/parser/representation.py index c0fe1d3d..37c60526 100644 --- a/jedi/parser/representation.py +++ b/jedi/parser/representation.py @@ -1008,18 +1008,19 @@ isinstance(c, (tokenize.Token, Operator)) else unicode(c) if isinstance(tok, Base): # the token is a Name, which has already been parsed - if isinstance(tok, ListComprehension): - # it's not possible to set it earlier - tok.parent = self - elif tok == 'lambda': - lambd, tok = parse_lambda(token_iterator) - if lambd is not None: - token_list.append(lambd) - elif tok == 'for': - list_comp, tok = parse_list_comp(token_iterator, token_list, - start_pos, tok.end_pos) - if list_comp is not None: - token_list = [list_comp] + if not level: + if isinstance(tok, ListComprehension): + # it's not possible to set it earlier + tok.parent = self + elif tok == 'lambda': + lambd, tok = parse_lambda(token_iterator) + if lambd is not None: + token_list.append(lambd) + elif tok == 'for': + list_comp, tok = parse_list_comp(token_iterator, token_list, + start_pos, tok.end_pos) + if list_comp is not None: + token_list = [list_comp] if tok in closing_brackets: level -= 1 diff --git a/test/completion/basic.py b/test/completion/basic.py index f12c7800..0f6d2773 100644 --- a/test/completion/basic.py +++ b/test/completion/basic.py @@ -144,6 +144,13 @@ left ##? str() {a-1:b for a,b in {1:'a', 3:1.0}.items()}[0] +# list comprehensions should also work in combination with functions +def listen(arg): + for x in arg: + #? str() + x + +listen(['' for x in [1]]) # ----------------- # nested list comprehensions # -----------------