diff --git a/parso/python/grammar310.txt b/parso/python/grammar310.txt index fce8753..f092050 100644 --- a/parso/python/grammar310.txt +++ b/parso/python/grammar310.txt @@ -97,9 +97,7 @@ suite: simple_stmt | NEWLINE INDENT stmt+ DEDENT namedexpr_test: test [':=' test] test: or_test ['if' or_test 'else' test] | lambdef -test_nocond: or_test | lambdef_nocond lambdef: 'lambda' [varargslist] ':' test -lambdef_nocond: 'lambda' [varargslist] ':' test_nocond or_test: and_test ('or' and_test)* and_test: not_test ('and' not_test)* not_test: 'not' not_test | comparison @@ -155,7 +153,7 @@ argument: ( test [comp_for] | comp_iter: comp_for | comp_if sync_comp_for: 'for' exprlist 'in' or_test [comp_iter] comp_for: ['async'] sync_comp_for -comp_if: 'if' test_nocond [comp_iter] +comp_if: 'if' or_test [comp_iter] # not used in grammar, but may appear in "node" passed from Parser to Compiler encoding_decl: NAME diff --git a/parso/python/grammar39.txt b/parso/python/grammar39.txt index f17eba5..ae46033 100644 --- a/parso/python/grammar39.txt +++ b/parso/python/grammar39.txt @@ -97,9 +97,7 @@ suite: simple_stmt | NEWLINE INDENT stmt+ DEDENT namedexpr_test: test [':=' test] test: or_test ['if' or_test 'else' test] | lambdef -test_nocond: or_test | lambdef_nocond lambdef: 'lambda' [varargslist] ':' test -lambdef_nocond: 'lambda' [varargslist] ':' test_nocond or_test: and_test ('or' and_test)* and_test: not_test ('and' not_test)* not_test: 'not' not_test | comparison @@ -155,7 +153,7 @@ argument: ( test [comp_for] | comp_iter: comp_for | comp_if sync_comp_for: 'for' exprlist 'in' or_test [comp_iter] comp_for: ['async'] sync_comp_for -comp_if: 'if' test_nocond [comp_iter] +comp_if: 'if' or_test [comp_iter] # not used in grammar, but may appear in "node" passed from Parser to Compiler encoding_decl: NAME diff --git a/test/test_python_errors.py b/test/test_python_errors.py index 270cd44..cda9bd2 100644 --- a/test/test_python_errors.py +++ b/test/test_python_errors.py @@ -494,3 +494,14 @@ def test_valid_empty_assignment(code): ) def test_valid_del(code): assert not _get_error_list(code) + + +@pytest.mark.parametrize( + ('source', 'version', 'no_errors'), [ + ('[x for x in range(10) if lambda: 1]', '3.8', True), + ('[x for x in range(10) if lambda: 1]', '3.9', False), + ('[x for x in range(10) if (lambda: 1)]', '3.9', True), + ] +) +def test_lambda_in_comp_if(source, version, no_errors): + assert bool(_get_error_list(source, version=version)) ^ no_errors