From 1e22104473022eeaf9c357b8a4750555da5af465 Mon Sep 17 00:00:00 2001 From: Ekaterina Tuzova Date: Tue, 19 Feb 2013 14:21:47 +0400 Subject: [PATCH] fix a PY-8926 Python: Conversion of docsting into recommended triple double-quoted form keeps doublequote at last position --- .../inspections/quickfix/ConvertDocstringQuickFix.java | 5 ++++- .../inspections/ConvertSingleQuotedDocstringEscape.py | 3 +++ .../inspections/ConvertSingleQuotedDocstringEscape_after.py | 3 +++ python/testSrc/com/jetbrains/python/PyQuickFixTest.java | 5 +++++ 4 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 python/testData/inspections/ConvertSingleQuotedDocstringEscape.py create mode 100644 python/testData/inspections/ConvertSingleQuotedDocstringEscape_after.py 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);