diff --git a/python/src/com/jetbrains/python/inspections/quickfix/ChainedComparisonsQuickFix.java b/python/src/com/jetbrains/python/inspections/quickfix/ChainedComparisonsQuickFix.java index 30a411d23e1b..d1fe95e49f98 100644 --- a/python/src/com/jetbrains/python/inspections/quickfix/ChainedComparisonsQuickFix.java +++ b/python/src/com/jetbrains/python/inspections/quickfix/ChainedComparisonsQuickFix.java @@ -145,14 +145,18 @@ public class ChainedComparisonsQuickFix implements LocalQuickFix { @NotNull private static PyExpression invertExpression(@NotNull PyBinaryExpression expression, @NotNull PyElementGenerator elementGenerator) { - final PsiElement operator = expression.getPsiOperator(); - final PyExpression right = expression.getRightExpression(); - PyExpression left = expression.getLeftExpression(); - if (isComparisonExpression(left)) { - left = invertExpression((PyBinaryExpression)left, elementGenerator); + if (isComparisonExpression(expression)) { + final PyExpression left = expression.getLeftExpression(); + final PyExpression right = expression.getRightExpression(); + + final String newOperator = invertOperator(assertNotNull(expression.getPsiOperator())); + final PyExpression newRight = isComparisonExpression(left) ? invertExpression((PyBinaryExpression)left, elementGenerator) : left; + + return elementGenerator.createBinaryExpression(newOperator, right, newRight); + } + else { + return expression; } - final String newOperator = invertOperator(assertNotNull(operator)); - return elementGenerator.createBinaryExpression(newOperator, right, left); } @NotNull diff --git a/python/testData/inspections/ChainedComparison6.py b/python/testData/inspections/ChainedComparison6.py new file mode 100644 index 000000000000..677629f4b362 --- /dev/null +++ b/python/testData/inspections/ChainedComparison6.py @@ -0,0 +1,4 @@ +class A: + def foo(self): + if index >= self.current and index - self.history_length < self.current: + pass \ No newline at end of file diff --git a/python/testData/inspections/ChainedComparison6_after.py b/python/testData/inspections/ChainedComparison6_after.py new file mode 100644 index 000000000000..2466807efa2f --- /dev/null +++ b/python/testData/inspections/ChainedComparison6_after.py @@ -0,0 +1,4 @@ +class A: + def foo(self): + if index >= self.current > index - self.history_length: + pass \ 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 1be6df897014..948875b36031 100644 --- a/python/testSrc/com/jetbrains/python/PyQuickFixTest.java +++ b/python/testSrc/com/jetbrains/python/PyQuickFixTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2013 JetBrains s.r.o. + * Copyright 2000-2016 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -284,6 +284,11 @@ public class PyQuickFixTest extends PyTestCase { doInspectionTest(PyChainedComparisonsInspection.class, PyBundle.message("QFIX.chained.comparison"), true, true); } + // PY-19583 + public void testChainedComparison6() { + 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);