summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog4
-rw-r--r--doc/whatsnew/2.12.rst4
-rw-r--r--pylint/checkers/refactoring/refactoring_checker.py4
-rw-r--r--tests/functional/t/ternary.py6
-rw-r--r--tests/functional/t/ternary.txt1
5 files changed, 17 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index c9c0880ef..90810665f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -11,6 +11,10 @@ Release date: TBA
..
Put new features here and also in 'doc/whatsnew/2.12.rst'
+* Fix ``simplify-boolean-expression`` when condition can be inferred as False.
+
+ Closes #5200
+
* Fix exception when pyreverse parses ``property function`` of a class.
* Add an optional extension ``consider-using-any-or-all`` : Emitted when a ``for`` loop only
diff --git a/doc/whatsnew/2.12.rst b/doc/whatsnew/2.12.rst
index e4bb8ac47..0f16e4bdd 100644
--- a/doc/whatsnew/2.12.rst
+++ b/doc/whatsnew/2.12.rst
@@ -64,6 +64,10 @@ Extensions
Other Changes
=============
+* Fix ``simplify-boolean-expression`` when condition can be inferred as False.
+
+ Closes #5200
+
* Fix exception when pyreverse parses ``property function`` of a class.
* Improve and flatten ``unused-wildcard-import`` message
diff --git a/pylint/checkers/refactoring/refactoring_checker.py b/pylint/checkers/refactoring/refactoring_checker.py
index e8e403e1b..7929d77e0 100644
--- a/pylint/checkers/refactoring/refactoring_checker.py
+++ b/pylint/checkers/refactoring/refactoring_checker.py
@@ -1393,10 +1393,10 @@ class RefactoringChecker(checkers.BaseTokenChecker):
return
inferred_truth_value = utils.safe_infer(truth_value)
- if inferred_truth_value in (None, astroid.Uninferable):
+ if inferred_truth_value is None or inferred_truth_value == astroid.Uninferable:
truth_boolean_value = True
else:
- truth_boolean_value = truth_value.bool_value()
+ truth_boolean_value = inferred_truth_value.bool_value()
if truth_boolean_value is False:
message = "simplify-boolean-expression"
diff --git a/tests/functional/t/ternary.py b/tests/functional/t/ternary.py
index deac01e3c..58171942f 100644
--- a/tests/functional/t/ternary.py
+++ b/tests/functional/t/ternary.py
@@ -31,3 +31,9 @@ def func4():
""""Using a Name as a condition but still emits"""
truth_value = 42
return condition and truth_value or false_value # [consider-using-ternary]
+
+
+def func5():
+ """"Using a Name that infers to False as a condition does not emit"""
+ falsy_value = False
+ return condition and falsy_value or false_value # [simplify-boolean-expression]
diff --git a/tests/functional/t/ternary.txt b/tests/functional/t/ternary.txt
index d78aa45a6..1df60e2f7 100644
--- a/tests/functional/t/ternary.txt
+++ b/tests/functional/t/ternary.txt
@@ -5,3 +5,4 @@ consider-using-ternary:19:0::Consider using ternary ('greater' if SOME_VALUE1 >
consider-using-ternary:20:0::Consider using ternary ('both' if SOME_VALUE2 > 4 and SOME_VALUE3 else 'not')
simplify-boolean-expression:23:0::Boolean expression may be simplified to SOME_VALUE2
consider-using-ternary:33:4:func4:Consider using ternary (truth_value if condition else false_value)
+simplify-boolean-expression:39:4:func5:Boolean expression may be simplified to false_value