fixed PY-5270 Move statement: unexpected move on trying to move one-line comment within indented block

This commit is contained in:
Ekaterina Tuzova
2012-03-22 15:50:31 +04:00
parent ab0df25b01
commit 5caf729b30
5 changed files with 29 additions and 12 deletions
@@ -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;
+5
View File
@@ -0,0 +1,5 @@
for item in lst:
#comment <caret>
c = 1
a = 1
b = 1
@@ -0,0 +1,5 @@
for item in lst:
c = 1
#comment <caret>
a = 1
b = 1
+5
View File
@@ -0,0 +1,5 @@
#comment <caret>
for item in lst:
c = 1
a = 1
b = 1
@@ -45,6 +45,10 @@ public class PyStatementMoverTest extends PyTestCase {
doTest();
}
public void testComment() {
doTest();
}
public void testOneStatementInFunction() {
doTest();
}