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 committed 2020-05-23 16:57:34 +03:00
1 parent 6ecd975516
commit fe54800cdd
2 files changed
+15 -6

No files matched your search

+3 -6
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:
+12
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)