From a5a774f33bf26367b50d0ca6a9e02431074915de Mon Sep 17 00:00:00 2001 From: Ekaterina Tuzova Date: Fri, 2 Dec 2011 15:32:14 +0100 Subject: [PATCH] fixed PY-5203 Move statement: statement should not jump into docstring --- .../editorActions/moveUpDown/StatementMover.java | 13 ++++++++++++- python/testData/mover/docstring.py | 4 ++++ python/testData/mover/docstring_afterDown.py | 5 +++++ python/testData/mover/docstring_afterUp.py | 4 ++++ .../com/jetbrains/python/PyStatementMoverTest.java | 4 ++++ 5 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 python/testData/mover/docstring.py create mode 100644 python/testData/mover/docstring_afterDown.py create mode 100644 python/testData/mover/docstring_afterUp.py diff --git a/python/src/com/jetbrains/python/codeInsight/editorActions/moveUpDown/StatementMover.java b/python/src/com/jetbrains/python/codeInsight/editorActions/moveUpDown/StatementMover.java index c7bc7be2a576..0c58c2acea08 100644 --- a/python/src/com/jetbrains/python/codeInsight/editorActions/moveUpDown/StatementMover.java +++ b/python/src/com/jetbrains/python/codeInsight/editorActions/moveUpDown/StatementMover.java @@ -183,7 +183,18 @@ public class StatementMover extends LineMover { element2 = tmp; } } - PyElement parent2 = PsiTreeUtil.getParentOfType(element2, PyFunction.class); + //in case of multiline docstring + PyElement parent2 = PsiTreeUtil.getParentOfType(element2, PyStringLiteralExpression.class); + if (parent2 != null) { + PyDocStringOwner docStringOwner = PsiTreeUtil.getParentOfType(element2, PyDocStringOwner.class); + if (docStringOwner != null && docStringOwner.getDocStringExpression() == parent2) { + TextRange textRange2 = parent2.getTextRange(); + info.toMove2 = new LineRange(doc.getLineNumber(textRange2.getStartOffset()), + doc.getLineNumber(textRange2.getEndOffset())+1); + } + } + + parent2 = PsiTreeUtil.getParentOfType(element2, PyFunction.class); PyElement parent1 = PsiTreeUtil.getParentOfType(myStatementToMove, PyFunction.class); if (parent2 != null && parent2 != parent1) { TextRange textRange2 = parent2.getTextRange(); diff --git a/python/testData/mover/docstring.py b/python/testData/mover/docstring.py new file mode 100644 index 000000000000..2c36adf5783e --- /dev/null +++ b/python/testData/mover/docstring.py @@ -0,0 +1,4 @@ +""" +docstring +""" +a = 1 diff --git a/python/testData/mover/docstring_afterDown.py b/python/testData/mover/docstring_afterDown.py new file mode 100644 index 000000000000..2b6a76e32a4d --- /dev/null +++ b/python/testData/mover/docstring_afterDown.py @@ -0,0 +1,5 @@ +""" +docstring +""" + +a = 1 diff --git a/python/testData/mover/docstring_afterUp.py b/python/testData/mover/docstring_afterUp.py new file mode 100644 index 000000000000..473433403188 --- /dev/null +++ b/python/testData/mover/docstring_afterUp.py @@ -0,0 +1,4 @@ +a = 1 +""" +docstring +""" diff --git a/python/testSrc/com/jetbrains/python/PyStatementMoverTest.java b/python/testSrc/com/jetbrains/python/PyStatementMoverTest.java index 1bcb2940283a..6e0ff188e4e7 100644 --- a/python/testSrc/com/jetbrains/python/PyStatementMoverTest.java +++ b/python/testSrc/com/jetbrains/python/PyStatementMoverTest.java @@ -117,6 +117,10 @@ public class PyStatementMoverTest extends PyTestCase { doTest(); } + public void testDocstring() { // PY-5203 + doTest(); + } + public void testWith() { // PY-5202 try { setLanguageLevel(LanguageLevel.PYTHON27);