From d34338e85dbca5ecc551f657f6fc881e040928b7 Mon Sep 17 00:00:00 2001 From: Mikhail Khorkov Date: Wed, 4 Dec 2019 16:01:50 +0300 Subject: [PATCH] PY-39406 Make multiline string with prefix be folded with the prefix GitOrigin-RevId: e1fa6861d85916a0862fefc7342a34d3b0905281 --- python/src/com/jetbrains/python/PythonFoldingBuilder.java | 7 ++++--- python/testData/folding/stringPrefixFolding.py | 8 ++++++++ python/testSrc/com/jetbrains/python/PyFoldingTest.java | 5 +++++ 3 files changed, 17 insertions(+), 3 deletions(-) create mode 100644 python/testData/folding/stringPrefixFolding.py diff --git a/python/src/com/jetbrains/python/PythonFoldingBuilder.java b/python/src/com/jetbrains/python/PythonFoldingBuilder.java index e89182cd1bcc..934df7061dc6 100644 --- a/python/src/com/jetbrains/python/PythonFoldingBuilder.java +++ b/python/src/com/jetbrains/python/PythonFoldingBuilder.java @@ -207,15 +207,16 @@ public class PythonFoldingBuilder extends CustomFoldingBuilder implements DumbAw } if (node.getElementType() == PyElementTypes.STRING_LITERAL_EXPRESSION) { PyStringLiteralExpression stringLiteralExpression = (PyStringLiteralExpression)node.getPsi(); + String prefix = stringLiteralExpression.getStringElements().get(0).getPrefix(); if (stringLiteralExpression.isDocString()) { final String stringValue = stringLiteralExpression.getStringValue().trim(); final String[] lines = LineTokenizer.tokenize(stringValue, true); if (lines.length > 2 && lines[1].trim().length() == 0) { - return "\"\"\"" + lines[0].trim() + "...\"\"\""; + return prefix + "\"\"\"" + lines[0].trim() + "...\"\"\""; } - return "\"\"\"...\"\"\""; + return prefix + "\"\"\"...\"\"\""; } else { - return getLanguagePlaceholderForString(stringLiteralExpression); + return prefix + getLanguagePlaceholderForString(stringLiteralExpression); } } return "..."; diff --git a/python/testData/folding/stringPrefixFolding.py b/python/testData/folding/stringPrefixFolding.py new file mode 100644 index 000000000000..fccaa92251ab --- /dev/null +++ b/python/testData/folding/stringPrefixFolding.py @@ -0,0 +1,8 @@ +def foo(): + r""" + foo/bar + """ + pass + +mline = u"\n\n\n\n\n\n\n\n" \ + "\n\n\n\n\n\n\n\" \ No newline at end of file diff --git a/python/testSrc/com/jetbrains/python/PyFoldingTest.java b/python/testSrc/com/jetbrains/python/PyFoldingTest.java index 149130b9aab1..698045ce4a70 100644 --- a/python/testSrc/com/jetbrains/python/PyFoldingTest.java +++ b/python/testSrc/com/jetbrains/python/PyFoldingTest.java @@ -112,4 +112,9 @@ public class PyFoldingTest extends PyTestCase { } } } + + // PY-39406 + public void testStringPrefixFolding() { + doTest(); + } }