diff --git a/python/src/com/jetbrains/python/codeInsight/intentions/PyStringConcatenationToFormatIntention.java b/python/src/com/jetbrains/python/codeInsight/intentions/PyStringConcatenationToFormatIntention.java index fe8b9d740f83..b309e5636758 100644 --- a/python/src/com/jetbrains/python/codeInsight/intentions/PyStringConcatenationToFormatIntention.java +++ b/python/src/com/jetbrains/python/codeInsight/intentions/PyStringConcatenationToFormatIntention.java @@ -15,7 +15,9 @@ import com.jetbrains.python.PyTokenTypes; import com.jetbrains.python.PythonStringUtil; import com.jetbrains.python.psi.*; import com.jetbrains.python.psi.impl.PyBuiltinCache; -import com.jetbrains.python.psi.types.*; +import com.jetbrains.python.psi.types.PyType; +import com.jetbrains.python.psi.types.PyTypeChecker; +import com.jetbrains.python.psi.types.TypeEvalContext; import org.jetbrains.annotations.NotNull; import java.util.ArrayList; @@ -108,7 +110,7 @@ public class PyStringConcatenationToFormatIntention extends BaseIntentionAction } final LanguageLevel languageLevel = LanguageLevel.forElement(element); - NotNullFunction escaper = StringUtil.escaper(false, null); + NotNullFunction escaper = StringUtil.escaper(false, "\"\'\\"); StringBuilder stringLiteral = new StringBuilder(); List parameters = new ArrayList(); Pair quotes = new Pair("\"", "\""); diff --git a/python/testData/intentions/afterStringConcatToFormatEscapingPy3.py b/python/testData/intentions/afterStringConcatToFormatEscapingPy3.py new file mode 100644 index 000000000000..63227807f88a --- /dev/null +++ b/python/testData/intentions/afterStringConcatToFormatEscapingPy3.py @@ -0,0 +1,2 @@ +string = "string" +some_string = "some \\ \" escaping {0}".format(string) diff --git a/python/testData/intentions/beforeStringConcatToFormatEscapingPy3.py b/python/testData/intentions/beforeStringConcatToFormatEscapingPy3.py new file mode 100644 index 000000000000..806f9271ce89 --- /dev/null +++ b/python/testData/intentions/beforeStringConcatToFormatEscapingPy3.py @@ -0,0 +1,2 @@ +string = "string" +some_string = "some \\ \" escaping " + string diff --git a/python/testSrc/com/jetbrains/python/PyIntentionTest.java b/python/testSrc/com/jetbrains/python/PyIntentionTest.java index 6dc0a3cfda75..4ae80397e92d 100644 --- a/python/testSrc/com/jetbrains/python/PyIntentionTest.java +++ b/python/testSrc/com/jetbrains/python/PyIntentionTest.java @@ -353,6 +353,11 @@ public class PyIntentionTest extends PyTestCase { doTest(PyBundle.message("INTN.replace.plus.with.format.operator")); } + // PY-8366 + public void testStringConcatToFormatEscapingPy3() { + doTest(PyBundle.message("INTN.replace.plus.with.str.format"), LanguageLevel.PYTHON33); + } + private void doDocStubTest(LanguageLevel languageLevel) { PythonLanguageLevelPusher.setForcedLanguageLevel(myFixture.getProject(), languageLevel); try {