diff options
author | Tomer Chachamu <tomer.chachamu@gmail.com> | 2018-09-20 08:15:35 +0100 |
---|---|---|
committer | Claudiu Popa <pcmanticore@gmail.com> | 2018-09-20 09:15:35 +0200 |
commit | 9c35a56906221b7f766f8a160f4fdd0f286232e2 (patch) | |
tree | 174b87e3256a5018e044bbd0d682d17553bd2ed3 /pylint/checkers | |
parent | 66f71dbd6411b66eac95ff8e41ccb54b8bb8d396 (diff) | |
download | pylint-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.py | 34 |
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" ) |