From 21341283ca98e7a08afe3c3df61724caf72ee3d9 Mon Sep 17 00:00:00 2001 From: Dave Halter Date: Fri, 18 Jul 2014 15:10:10 +0200 Subject: [PATCH] another parser issue, very much related to the last one. sometimes a None element was used as a token.fixes #418 --- jedi/parser/representation.py | 3 ++- test/test_parser/test_parser.py | 6 ++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/jedi/parser/representation.py b/jedi/parser/representation.py index 2580a94b..b21dd548 100644 --- a/jedi/parser/representation.py +++ b/jedi/parser/representation.py @@ -1073,7 +1073,8 @@ isinstance(c, (tokenize.Token, Operator)) else unicode(c) end_pos = end_pos[0], end_pos[1] - 1 break - token_list.append(tok) + if tok is not None: # Can be None, because of lambda/for. + token_list.append(tok) if not token_list: return None, tok diff --git a/test/test_parser/test_parser.py b/test/test_parser/test_parser.py index 384e7777..c31e0455 100644 --- a/test/test_parser/test_parser.py +++ b/test/test_parser/test_parser.py @@ -119,3 +119,9 @@ def test_carriage_return_statements(): source = source.replace('\n', '\r\n') stmt = Parser(source).module.statements[0] assert '#' not in stmt.get_code() + + +def test_incomplete_list_comprehension(): + """ Shouldn't raise an error, same bug as #418. """ + s = Parser(u('(1 for def')).module.statements[0] + assert s.expression_list()