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 0c58c2acea08..07da8c0f61da 100644 --- a/python/src/com/jetbrains/python/codeInsight/editorActions/moveUpDown/StatementMover.java +++ b/python/src/com/jetbrains/python/codeInsight/editorActions/moveUpDown/StatementMover.java @@ -339,8 +339,13 @@ public class StatementMover extends LineMover { getCurrentSettings().getIndentOptions(PythonFileType.INSTANCE); assert indentOptions != null; final Document document = editor.getDocument(); - TextRange textRange = myStatementToDecreaseIndent.getTextRange(); - document.deleteString(textRange.getStartOffset()-indentOptions.INDENT_SIZE, textRange.getStartOffset()); + final int startLine = editor.offsetToLogicalPosition(myStatementToDecreaseIndent.getTextRange().getStartOffset()).line; + final int endLine = editor.offsetToLogicalPosition(myStatementToDecreaseIndent.getTextRange().getEndOffset()).line; + for (int line = startLine; line <= endLine; ++line) { + final int offset = document.getLineStartOffset(line); + document.deleteString(offset, offset + indentOptions.INDENT_SIZE); + } + myStatementToDecreaseIndent = null; } diff --git a/python/testData/mover/oneLineCompoundOutside.py b/python/testData/mover/oneLineCompoundOutside.py new file mode 100644 index 000000000000..3f17b74d0fbb --- /dev/null +++ b/python/testData/mover/oneLineCompoundOutside.py @@ -0,0 +1,6 @@ +if condition: + pass +elif other_condition: + if another_one: + if True: a = 1 # <- move statement up here + else: b = 2 \ No newline at end of file diff --git a/python/testData/mover/oneLineCompoundOutside_afterDown.py b/python/testData/mover/oneLineCompoundOutside_afterDown.py new file mode 100644 index 000000000000..3f17b74d0fbb --- /dev/null +++ b/python/testData/mover/oneLineCompoundOutside_afterDown.py @@ -0,0 +1,6 @@ +if condition: + pass +elif other_condition: + if another_one: + if True: a = 1 # <- move statement up here + else: b = 2 \ No newline at end of file diff --git a/python/testData/mover/oneLineCompoundOutside_afterUp.py b/python/testData/mover/oneLineCompoundOutside_afterUp.py new file mode 100644 index 000000000000..21f27987a762 --- /dev/null +++ b/python/testData/mover/oneLineCompoundOutside_afterUp.py @@ -0,0 +1,7 @@ +if condition: + pass +elif other_condition: + if True: a = 1 # <- move statement up here + else: b = 2 + if another_one: + pass \ No newline at end of file diff --git a/python/testSrc/com/jetbrains/python/PyStatementMoverTest.java b/python/testSrc/com/jetbrains/python/PyStatementMoverTest.java index 6e0ff188e4e7..611784401ae7 100644 --- a/python/testSrc/com/jetbrains/python/PyStatementMoverTest.java +++ b/python/testSrc/com/jetbrains/python/PyStatementMoverTest.java @@ -121,6 +121,10 @@ public class PyStatementMoverTest extends PyTestCase { doTest(); } + public void testOneLineCompoundOutside() { // PY-5201 + doTest(); + } + public void testWith() { // PY-5202 try { setLanguageLevel(LanguageLevel.PYTHON27);