Check all arguments for unparenthesized generator expressions

Previously only the first argument on the argument list checked
against the generator expressions, now all argumnets are controlled.
This commit is contained in:
Batuhan Taskaya
2020-05-23 16:44:24 +03:00
parent 6ecd975516
commit fe54800cdd
2 changed files with 62 additions and 53 deletions

View File

@@ -779,12 +779,6 @@ class _ArglistRule(SyntaxRule):
return "Generator expression must be parenthesized"
def is_issue(self, node):
first_arg = node.children[0]
if first_arg.type == 'argument' \
and first_arg.children[1].type in _COMP_FOR_TYPES:
# e.g. foo(x for x in [], b)
return len(node.children) >= 2
else:
arg_set = set()
kw_only = False
kw_unpacking_only = False
@@ -806,6 +800,9 @@ class _ArglistRule(SyntaxRule):
if argument.type == 'argument':
first = argument.children[0]
if argument.children[1].type in _COMP_FOR_TYPES and len(node.children) >= 2:
# a(a, b for b in c)
return True
if first in ('*', '**'):
if first == '*':
if kw_unpacking_only:

View File

@@ -375,3 +375,15 @@ def test_repeated_kwarg():
_get_error_list("f(q=1, q=2)", version="3.9")[0].message
== "SyntaxError: keyword argument repeated: q"
)
@pytest.mark.parametrize(
'source', [
'a(a for a in b,)'
'a(a for a in b, a)',
'a(a, a for a in b)',
'a(a, b, a for a in b, c, d)',
]
)
def test_unparenthesized_genexp(source):
assert _get_error_list(source)