diff --git a/python/src/com/jetbrains/python/inspections/quickfix/ConvertDocstringQuickFix.java b/python/src/com/jetbrains/python/inspections/quickfix/ConvertDocstringQuickFix.java
index a9fa719417da..f47e077b8570 100644
--- a/python/src/com/jetbrains/python/inspections/quickfix/ConvertDocstringQuickFix.java
+++ b/python/src/com/jetbrains/python/inspections/quickfix/ConvertDocstringQuickFix.java
@@ -3,6 +3,7 @@ package com.jetbrains.python.inspections.quickfix;
import com.intellij.codeInspection.LocalQuickFix;
import com.intellij.codeInspection.ProblemDescriptor;
import com.intellij.openapi.project.Project;
+import com.intellij.openapi.util.text.StringUtil;
import com.intellij.psi.PsiElement;
import com.jetbrains.python.PyBundle;
import com.jetbrains.python.psi.PyElementGenerator;
@@ -37,7 +38,7 @@ public class ConvertDocstringQuickFix implements LocalQuickFix {
int prefixLength = PyStringLiteralExpressionImpl
.getPrefixLength(stringText);
String prefix = stringText.substring(0, prefixLength);
- String content = expression.getText().substring(prefixLength);
+ String content = stringText.substring(prefixLength);
if (content.startsWith("'''") ) {
content = content.substring(3, content.length()-3);
} else if (content.startsWith("\"\"\""))
@@ -46,6 +47,8 @@ public class ConvertDocstringQuickFix implements LocalQuickFix {
content = content.length() == 1 ? "" : content.substring(1, content.length()-1);
}
+ content = StringUtil.escapeQuotes(content);
+
PyExpression newString = elementGenerator.createDocstring(prefix+"\"\"\"" + content + "\"\"\"").getExpression();
expression.replace(newString);
}
diff --git a/python/testData/inspections/ConvertSingleQuotedDocstringEscape.py b/python/testData/inspections/ConvertSingleQuotedDocstringEscape.py
new file mode 100644
index 000000000000..9d28bfcd98f9
--- /dev/null
+++ b/python/testData/inspections/ConvertSingleQuotedDocstringEscape.py
@@ -0,0 +1,3 @@
+def foo():
+ 'bla "blub"'
+ pass
\ No newline at end of file
diff --git a/python/testData/inspections/ConvertSingleQuotedDocstringEscape_after.py b/python/testData/inspections/ConvertSingleQuotedDocstringEscape_after.py
new file mode 100644
index 000000000000..4cbb3f3a8cda
--- /dev/null
+++ b/python/testData/inspections/ConvertSingleQuotedDocstringEscape_after.py
@@ -0,0 +1,3 @@
+def foo():
+ """bla \"blub\""""
+ 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 eb1de039cc3a..cfbd3557c10e 100644
--- a/python/testSrc/com/jetbrains/python/PyQuickFixTest.java
+++ b/python/testSrc/com/jetbrains/python/PyQuickFixTest.java
@@ -312,6 +312,11 @@ public class PyQuickFixTest extends PyTestCase {
PyBundle.message("QFIX.convert.single.quoted.docstring"), true, true);
}
+ public void testConvertSingleQuotedDocstringEscape() { //PY-8926
+ doInspectionTest("ConvertSingleQuotedDocstringEscape.py", PySingleQuotedDocstringInspection.class,
+ PyBundle.message("QFIX.convert.single.quoted.docstring"), true, true);
+ }
+
public void testDefaultArgument() { //PY-3127
doInspectionTest("DefaultArgument.py", PyDefaultArgumentInspection.class,
PyBundle.message("QFIX.default.argument"), true, true);