summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--pyflakes/checker.py11
-rw-r--r--pyflakes/messages.py7
-rw-r--r--pyflakes/test/test_other.py23
3 files changed, 39 insertions, 2 deletions
diff --git a/pyflakes/checker.py b/pyflakes/checker.py
index f886c26..f0b7c37 100644
--- a/pyflakes/checker.py
+++ b/pyflakes/checker.py
@@ -1409,14 +1409,14 @@ class Checker(object):
pass
# "stmt" type nodes
- DELETE = PRINT = FOR = ASYNCFOR = WHILE = IF = WITH = WITHITEM = \
+ DELETE = PRINT = FOR = ASYNCFOR = WHILE = WITH = WITHITEM = \
ASYNCWITH = ASYNCWITHITEM = TRYFINALLY = EXEC = \
EXPR = ASSIGN = handleChildren
PASS = ignore
# "expr" type nodes
- BOOLOP = UNARYOP = IFEXP = SET = \
+ BOOLOP = UNARYOP = SET = \
REPR = ATTRIBUTE = \
STARRED = NAMECONSTANT = NAMEDEXPR = handleChildren
@@ -1773,6 +1773,13 @@ class Checker(object):
)
self.handleChildren(node)
+ def IF(self, node):
+ if isinstance(node.test, ast.Tuple) and node.test.elts != []:
+ self.report(messages.IfTuple, node)
+ self.handleChildren(node)
+
+ IFEXP = IF
+
def ASSERT(self, node):
if isinstance(node.test, ast.Tuple) and node.test.elts != []:
self.report(messages.AssertTuple, node)
diff --git a/pyflakes/messages.py b/pyflakes/messages.py
index c8bf9c0..1bb4ab0 100644
--- a/pyflakes/messages.py
+++ b/pyflakes/messages.py
@@ -233,6 +233,13 @@ class TooManyExpressionsInStarredAssignment(Message):
message = 'too many expressions in star-unpacking assignment'
+class IfTuple(Message):
+ """
+ Conditional test is a non-empty tuple literal, which are always True.
+ """
+ message = '\'if tuple literal\' is always true, perhaps remove accidental comma?'
+
+
class AssertTuple(Message):
"""
Assertion test is a non-empty tuple literal, which are always True.
diff --git a/pyflakes/test/test_other.py b/pyflakes/test/test_other.py
index 282accb..7a02468 100644
--- a/pyflakes/test/test_other.py
+++ b/pyflakes/test/test_other.py
@@ -1433,6 +1433,29 @@ class TestUnusedAssignment(TestCase):
self.flakes("a = foo if True else 'oink'", m.UndefinedName)
self.flakes("a = 'moo' if True else bar", m.UndefinedName)
+ def test_if_tuple(self):
+ """
+ Test C{if (foo,)} conditions.
+ """
+ self.flakes("""if (): pass""")
+ self.flakes("""
+ if (
+ True
+ ):
+ pass
+ """)
+ self.flakes("""
+ if (
+ True,
+ ):
+ pass
+ """, m.IfTuple)
+ self.flakes("""
+ x = 1 if (
+ True,
+ ) else 2
+ """, m.IfTuple)
+
def test_withStatementNoNames(self):
"""
No warnings are emitted for using inside or after a nameless C{with}