From 5caf729b300087671fa56b15a3a72d97e910aa61 Mon Sep 17 00:00:00 2001 From: Ekaterina Tuzova Date: Thu, 22 Mar 2012 15:50:31 +0400 Subject: [PATCH] fixed PY-5270 Move statement: unexpected move on trying to move one-line comment within indented block --- .../moveUpDown/StatementMover.java | 22 +++++++++---------- python/testData/mover/comment.py | 5 +++++ python/testData/mover/comment_afterDown.py | 5 +++++ python/testData/mover/comment_afterUp.py | 5 +++++ .../python/PyStatementMoverTest.java | 4 ++++ 5 files changed, 29 insertions(+), 12 deletions(-) create mode 100644 python/testData/mover/comment.py create mode 100644 python/testData/mover/comment_afterDown.py create mode 100644 python/testData/mover/comment_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 0ce7fbb26125..2d5f5715b2ab 100644 --- a/python/src/com/jetbrains/python/codeInsight/editorActions/moveUpDown/StatementMover.java +++ b/python/src/com/jetbrains/python/codeInsight/editorActions/moveUpDown/StatementMover.java @@ -78,11 +78,9 @@ public class StatementMover extends LineMover { } if ( myStatementToMove instanceof PyBreakStatement || myStatementToMove instanceof PyContinueStatement) { - //info.toMove2 = info.toMove; - //return true; - PyLoopStatement parent = PsiTreeUtil.getParentOfType(myStatementToMove, PyLoopStatement.class); + final PyLoopStatement parent = PsiTreeUtil.getParentOfType(myStatementToMove, PyLoopStatement.class); if (parent != null) { - PyStatementPart part = PsiTreeUtil.getChildOfType(parent, PyStatementPart.class); + final PyStatementPart part = PsiTreeUtil.getChildOfType(parent, PyStatementPart.class); if (part != null && part.getStatementList() != null) { PyStatementList statementList = part.getStatementList(); if (myStatementToMove.getParent() instanceof PyStatementList) { @@ -168,15 +166,15 @@ public class StatementMover extends LineMover { @Nullable private PsiElement findStatement(Editor editor, PsiFile file, MoveInfo info) { - Document doc = editor.getDocument(); - int offset1 = getLineStartSafeOffset(doc, info.toMove.startLine); + final Document doc = editor.getDocument(); + final int offset1 = getLineStartSafeOffset(doc, info.toMove.startLine); PsiElement element1 = file.findElementAt(offset1); if (element1 != null) { if (element1 instanceof PsiWhiteSpace) { - element1 = PyPsiUtils.getSignificantToTheRight(element1, true); + element1 = PyPsiUtils.getSignificantToTheRight(element1, false); } - PyStatement statement = PsiTreeUtil.getParentOfType(element1, PyStatement.class, false); - if (statement == null && element1 instanceof PsiComment) return element1; + final PyStatement statement = PsiTreeUtil.getParentOfType(element1, PyStatement.class, false); + if (element1 instanceof PsiComment) return element1; return statement; } return null; @@ -201,7 +199,7 @@ public class StatementMover extends LineMover { PsiElement element2 = file.findElementAt(offset2); if (element2 != null) { if (element2 instanceof PsiWhiteSpace) { - PsiElement tmp = PyPsiUtils.getSignificantToTheRight(element2, true); + PsiElement tmp = PyPsiUtils.getSignificantToTheRight(element2, false); if (tmp != null && editor.offsetToLogicalPosition(tmp.getTextRange().getStartOffset()).line == info.toMove2.startLine) { @@ -255,13 +253,13 @@ public class StatementMover extends LineMover { PsiElement element2 = file.findElementAt(offset2-1); if (element2 instanceof PsiWhiteSpace) { if (down) { - PsiElement tmp = PyPsiUtils.getSignificantToTheRight(element2, true); + PsiElement tmp = PyPsiUtils.getSignificantToTheRight(element2, false); if (tmp != null && editor.offsetToLogicalPosition(tmp.getTextRange().getStartOffset()).line == info.toMove2.startLine) element2 = tmp; } else { - PsiElement tmp = PyPsiUtils.getSignificantToTheRight(element2, true); + PsiElement tmp = PyPsiUtils.getSignificantToTheRight(element2, false); if (tmp != null) { int start = editor.offsetToLogicalPosition(tmp.getParent().getTextRange().getStartOffset()).line; int end = editor.offsetToLogicalPosition(tmp.getParent().getTextRange().getEndOffset()).line; diff --git a/python/testData/mover/comment.py b/python/testData/mover/comment.py new file mode 100644 index 000000000000..7b738c7c058c --- /dev/null +++ b/python/testData/mover/comment.py @@ -0,0 +1,5 @@ +for item in lst: + #comment + c = 1 + a = 1 + b = 1 \ No newline at end of file diff --git a/python/testData/mover/comment_afterDown.py b/python/testData/mover/comment_afterDown.py new file mode 100644 index 000000000000..d1a81cb5f2b3 --- /dev/null +++ b/python/testData/mover/comment_afterDown.py @@ -0,0 +1,5 @@ +for item in lst: + c = 1 + #comment + a = 1 + b = 1 \ No newline at end of file diff --git a/python/testData/mover/comment_afterUp.py b/python/testData/mover/comment_afterUp.py new file mode 100644 index 000000000000..31277963bdbb --- /dev/null +++ b/python/testData/mover/comment_afterUp.py @@ -0,0 +1,5 @@ +#comment +for item in lst: + c = 1 + a = 1 + b = 1 \ 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 86703abe215f..39a524e74cad 100644 --- a/python/testSrc/com/jetbrains/python/PyStatementMoverTest.java +++ b/python/testSrc/com/jetbrains/python/PyStatementMoverTest.java @@ -45,6 +45,10 @@ public class PyStatementMoverTest extends PyTestCase { doTest(); } + public void testComment() { + doTest(); + } + public void testOneStatementInFunction() { doTest(); }