From 1de2fbaba1b8e96a98a87b9516e5b1bd48c2108b Mon Sep 17 00:00:00 2001 From: Ekaterina Tuzova Date: Fri, 2 Dec 2011 15:57:17 +0100 Subject: [PATCH] fixed PY-5201 Move statement: changes code logic on moving one-line compound statement outside nested one --- .../editorActions/moveUpDown/StatementMover.java | 9 +++++++-- python/testData/mover/oneLineCompoundOutside.py | 6 ++++++ .../testData/mover/oneLineCompoundOutside_afterDown.py | 6 ++++++ python/testData/mover/oneLineCompoundOutside_afterUp.py | 7 +++++++ .../com/jetbrains/python/PyStatementMoverTest.java | 4 ++++ 5 files changed, 30 insertions(+), 2 deletions(-) create mode 100644 python/testData/mover/oneLineCompoundOutside.py create mode 100644 python/testData/mover/oneLineCompoundOutside_afterDown.py create mode 100644 python/testData/mover/oneLineCompoundOutside_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 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);