Skip to content

Commit

Permalink
Fix false positive superfluous-parens for tuples
Browse files Browse the repository at this point in the history
Tuples can be created with inner tuples. This creates double parenthesis
which we flagged incorrectly.
This closes pylint-dev#4907
  • Loading branch information
DanielNoord committed Sep 1, 2021
1 parent 832db06 commit 3e148b5
Show file tree
Hide file tree
Showing 5 changed files with 18 additions and 8 deletions.
4 changes: 4 additions & 0 deletions ChangeLog
Expand Up @@ -57,6 +57,10 @@ Release date: TBA

Closes #4945

* Fix false positive ``superfluous-parens`` for tuples created with inner tuples

Closes #4907


What's New in Pylint 2.10.3?
============================
Expand Down
4 changes: 4 additions & 0 deletions doc/whatsnew/2.11.rst
Expand Up @@ -65,3 +65,7 @@ Other Changes
and ``pathlib.Path().write_text()``

Closes #4945

* Fix false positive ``superfluous-parens`` for tuples created with inner tuples

Closes #4907
12 changes: 8 additions & 4 deletions pylint/checkers/format.py
Expand Up @@ -401,11 +401,15 @@ def _check_keyword_parentheses(
depth -= 1
if depth:
if contains_double_parens and tokens[i + 1].string == ")":
self.add_message(
"superfluous-parens", line=line_num, args=keyword_token
)
if keyword_token == "in":
self.add_message(
"superfluous-parens", line=line_num, args=keyword_token
)
# For walrus operators in `if (not)` conditions
elif keyword_token in {"if", "not"}:
continue
return
contains_double_parens = 0
contains_double_parens -= 1
continue
# ')' can't happen after if (foo), since it would be a syntax error.
if tokens[i + 1].string in (":", ")", "]", "}", "in") or tokens[
Expand Down
4 changes: 2 additions & 2 deletions tests/functional/s/super/superfluous_parens.py
Expand Up @@ -20,8 +20,8 @@

B = [x for x in ((3, 4))] # [superfluous-parens]
C = [x for x in ((3, 4) if 1 > 0 else (5, 6))]
D = [x for x in ((3, 4) if 1 > 0 else ((5, 6)))] # [superfluous-parens]
E = [x for x in ((3, 4) if 1 > 0 else ((((5, 6)))))] # [superfluous-parens]
D = [x for x in ((3, 4) if 1 > 0 else ((5, 6)))]
E = [x for x in ((3, 4) if 1 > 0 else ((((5, 6)))))]

# Test assertions
F = "Version 1.0"
Expand Down
2 changes: 0 additions & 2 deletions tests/functional/s/super/superfluous_parens.txt
Expand Up @@ -4,7 +4,5 @@ superfluous-parens:11:0::Unnecessary parens after 'for' keyword:HIGH
superfluous-parens:13:0::Unnecessary parens after 'if' keyword:HIGH
superfluous-parens:18:0::Unnecessary parens after 'del' keyword:HIGH
superfluous-parens:21:0::Unnecessary parens after 'in' keyword:HIGH
superfluous-parens:23:0::Unnecessary parens after 'else' keyword:HIGH
superfluous-parens:24:0::Unnecessary parens after 'else' keyword:HIGH
superfluous-parens:30:0::Unnecessary parens after 'assert' keyword:HIGH
superfluous-parens:40:0::Unnecessary parens after 'in' keyword:HIGH

0 comments on commit 3e148b5

Please sign in to comment.