summaryrefslogtreecommitdiff
path: root/pylint/checkers
diff options
context:
space:
mode:
authorTomer Chachamu <tomer.chachamu@gmail.com>2018-09-20 08:15:35 +0100
committerClaudiu Popa <pcmanticore@gmail.com>2018-09-20 09:15:35 +0200
commit9c35a56906221b7f766f8a160f4fdd0f286232e2 (patch)
tree174b87e3256a5018e044bbd0d682d17553bd2ed3 /pylint/checkers
parent66f71dbd6411b66eac95ff8e41ccb54b8bb8d396 (diff)
downloadpylint-git-9c35a56906221b7f766f8a160f4fdd0f286232e2.tar.gz
Added check simplifiable-if-expression (#2502)
Similar to simplifiable-if-statement, it finds trivial ternary statements and suggested replacing them. Paired-with: Richard Goodman <richardg@brandwatch.com>
Diffstat (limited to 'pylint/checkers')
-rw-r--r--pylint/checkers/refactoring.py34
1 files changed, 34 insertions, 0 deletions
diff --git a/pylint/checkers/refactoring.py b/pylint/checkers/refactoring.py
index caadd791e..dd19dfbe5 100644
--- a/pylint/checkers/refactoring.py
+++ b/pylint/checkers/refactoring.py
@@ -200,6 +200,11 @@ class RefactoringChecker(checkers.BaseTokenChecker):
"Also it is faster since you don't need to create another "
"transient list",
),
+ "R1719": (
+ "The if expression can be replaced with %s",
+ "simplifiable-if-expression",
+ "Used when an if expression can be replaced with " "'bool(test)'. ",
+ ),
}
options = (
(
@@ -465,6 +470,35 @@ class RefactoringChecker(checkers.BaseTokenChecker):
self._check_superfluous_else_return(node)
self._check_consider_get(node)
+ @utils.check_messages("simplifiable-if-expression")
+ def visit_ifexp(self, node):
+ self._check_simplifiable_ifexp(node)
+
+ def _check_simplifiable_ifexp(self, node):
+ if not isinstance(node.body, astroid.Const) or not isinstance(
+ node.orelse, astroid.Const
+ ):
+ return
+
+ if not isinstance(node.body.value, bool) or not isinstance(
+ node.orelse.value, bool
+ ):
+ return
+
+ if isinstance(node.test, astroid.Compare):
+ test_reduced_to = "test"
+ else:
+ test_reduced_to = "bool(test)"
+
+ if (node.body.value, node.orelse.value) == (True, False):
+ reduced_to = "'{}'".format(test_reduced_to)
+ elif (node.body.value, node.orelse.value) == (False, True):
+ reduced_to = "'not test'"
+ else:
+ return
+
+ self.add_message("simplifiable-if-expression", node=node, args=(reduced_to,))
+
@utils.check_messages(
"too-many-nested-blocks", "inconsistent-return-statements", "useless-return"
)