From b86253fff9b261e236b6b396b77819d679dcf43d Mon Sep 17 00:00:00 2001 From: Ekaterina Tuzova Date: Thu, 7 Apr 2011 20:19:02 +0400 Subject: [PATCH] fixed PY-3197 Quck fix doesn't work for string with string formatting symbols --- .../python/actions/AugmentedAssignmentQuickFix.java | 12 +++++++++--- python/testData/inspections/AugmentAssignmentPerc.py | 1 + .../inspections/AugmentAssignmentPerc_after.py | 1 + .../testSrc/com/jetbrains/python/PyQuickFixTest.java | 5 +++++ 4 files changed, 16 insertions(+), 3 deletions(-) create mode 100644 python/testData/inspections/AugmentAssignmentPerc.py create mode 100644 python/testData/inspections/AugmentAssignmentPerc_after.py diff --git a/python/src/com/jetbrains/python/actions/AugmentedAssignmentQuickFix.java b/python/src/com/jetbrains/python/actions/AugmentedAssignmentQuickFix.java index 37a8d38ec04c..4fc6de258900 100644 --- a/python/src/com/jetbrains/python/actions/AugmentedAssignmentQuickFix.java +++ b/python/src/com/jetbrains/python/actions/AugmentedAssignmentQuickFix.java @@ -5,6 +5,7 @@ import com.intellij.codeInspection.ProblemDescriptor; import com.intellij.openapi.project.Project; import com.intellij.psi.PsiElement; import com.jetbrains.python.PyBundle; +import com.jetbrains.python.PyTokenTypes; import com.jetbrains.python.psi.*; import com.jetbrains.python.psi.impl.PyAugAssignmentStatementImpl; import org.jetbrains.annotations.NotNull; @@ -48,9 +49,8 @@ public class AugmentedAssignmentQuickFix implements LocalQuickFix { if (leftExpression != null && (leftExpression instanceof PyReferenceExpression || leftExpression instanceof PySubscriptionExpression)) { if (leftExpression.getText().equals(target.getText())) { - if (rightExpression instanceof PyNumericLiteralExpression || - rightExpression instanceof PyStringLiteralExpression - || rightExpression instanceof PyReferenceExpression) { + if (rightExpression instanceof PyNumericLiteralExpression || rightExpression instanceof PyStringLiteralExpression + || rightExpression instanceof PyReferenceExpression || isPercentage(rightExpression) ) { PyElementGenerator elementGenerator = PyElementGenerator.getInstance(project); StringBuilder stringBuilder = new StringBuilder(); @@ -64,4 +64,10 @@ public class AugmentedAssignmentQuickFix implements LocalQuickFix { } } } + + private boolean isPercentage(PyExpression rightExpression) { + return (rightExpression instanceof PyBinaryExpression && + ((PyBinaryExpression)rightExpression).getLeftExpression() instanceof PyStringLiteralExpression && + ((PyBinaryExpression)rightExpression).getOperator() == PyTokenTypes.PERC); + } } diff --git a/python/testData/inspections/AugmentAssignmentPerc.py b/python/testData/inspections/AugmentAssignmentPerc.py new file mode 100644 index 000000000000..2d51fb6777a7 --- /dev/null +++ b/python/testData/inspections/AugmentAssignmentPerc.py @@ -0,0 +1 @@ +request = request + " FROM bugs WHERE bug_id = %s" % (str(bug_id)) \ No newline at end of file diff --git a/python/testData/inspections/AugmentAssignmentPerc_after.py b/python/testData/inspections/AugmentAssignmentPerc_after.py new file mode 100644 index 000000000000..be03fda4a336 --- /dev/null +++ b/python/testData/inspections/AugmentAssignmentPerc_after.py @@ -0,0 +1 @@ +request += " FROM bugs WHERE bug_id = %s" % (str(bug_id)) \ 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 f46e379ccf97..f2e894fbd6f1 100644 --- a/python/testSrc/com/jetbrains/python/PyQuickFixTest.java +++ b/python/testSrc/com/jetbrains/python/PyQuickFixTest.java @@ -189,6 +189,11 @@ public class PyQuickFixTest extends PyLightFixtureTestCase { PyBundle.message("QFIX.augment.assignment"), true, true); } + public void testAugmentAssignmentPerc() { // PY-3197 + doInspectionTest("AugmentAssignmentPerc.py", PyAugmentAssignmentInspection.class, + PyBundle.message("QFIX.augment.assignment"), true, true); + } + public void testChainedComparisons() { // PY-1020 doInspectionTest("ChainedComparisons.py", PyChainedComparisonsInspection.class, PyBundle.message("QFIX.chained.comparison"), true, true);