diff --git a/python/src/com/jetbrains/python/inspections/PyChainedComparisonsInspection.java b/python/src/com/jetbrains/python/inspections/PyChainedComparisonsInspection.java index 634d91c6bec5..fe051edba49c 100644 --- a/python/src/com/jetbrains/python/inspections/PyChainedComparisonsInspection.java +++ b/python/src/com/jetbrains/python/inspections/PyChainedComparisonsInspection.java @@ -121,11 +121,20 @@ public class PyChainedComparisonsInspection extends PyInspection { private boolean isRightSimplified(@NotNull final PyBinaryExpression leftExpression, @NotNull final PyBinaryExpression rightExpression) { + final PyExpression leftLeft = leftExpression.getLeftExpression(); final PyExpression leftRight = leftExpression.getRightExpression(); - if (leftRight instanceof PyBinaryExpression && PyTokenTypes.AND_KEYWORD == leftExpression.getOperator()) { - if (isRightSimplified((PyBinaryExpression)leftRight, rightExpression)) { - getInnerRight = true; - return true; + if (PyTokenTypes.AND_KEYWORD == leftExpression.getOperator()) { + if (leftRight instanceof PyBinaryExpression) { + if (isRightSimplified((PyBinaryExpression)leftRight, rightExpression)) { + getInnerRight = true; + return true; + } + } + if (leftLeft instanceof PyBinaryExpression && + PyTokenTypes.RELATIONAL_OPERATIONS.contains(((PyBinaryExpression)leftLeft).getOperator())) { + if (isRightSimplified(((PyBinaryExpression)leftLeft), rightExpression)) { + return true; + } } } diff --git a/python/testData/inspections/ChainedComparison9.py b/python/testData/inspections/ChainedComparison9.py new file mode 100644 index 000000000000..b9dfa664cb71 --- /dev/null +++ b/python/testData/inspections/ChainedComparison9.py @@ -0,0 +1 @@ +0 < x and True and x < 2 \ No newline at end of file diff --git a/python/testData/inspections/ChainedComparison9_after.py b/python/testData/inspections/ChainedComparison9_after.py new file mode 100644 index 000000000000..c105dbc420a2 --- /dev/null +++ b/python/testData/inspections/ChainedComparison9_after.py @@ -0,0 +1 @@ +0 < x < 2 and True \ No newline at end of file diff --git a/python/testSrc/com/jetbrains/python/PyQuickFixTest.java b/python/testSrc/com/jetbrains/python/PyQuickFixTest.java index de6b66bcbd50..6ca11277d7ec 100644 --- a/python/testSrc/com/jetbrains/python/PyQuickFixTest.java +++ b/python/testSrc/com/jetbrains/python/PyQuickFixTest.java @@ -306,6 +306,11 @@ public class PyQuickFixTest extends PyTestCase { doInspectionTest(PyChainedComparisonsInspection.class, "Simplify chained comparison", true, true); } + // PY-29121 + public void testChainedComparison9() { + doInspectionTest(PyChainedComparisonsInspection.class, "Simplify chained comparison", true, true); + } + // PY-1362, PY-2585 public void testStatementEffect() { doInspectionTest(PyStatementEffectInspection.class, PyBundle.message("QFIX.statement.effect"), true, true);