mirror of
https://gitflic.ru/project/openide/openide.git
synced 2025-12-15 02:59:33 +07:00
fixed PY-6271 Move statement: breaks code in case of empty line between parts of compound statement
This commit is contained in:
@@ -18,6 +18,7 @@ import com.intellij.psi.codeStyle.CodeStyleSettingsManager;
|
||||
import com.intellij.psi.codeStyle.CommonCodeStyleSettings;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.jetbrains.python.PyNames;
|
||||
import com.jetbrains.python.PyTokenTypes;
|
||||
import com.jetbrains.python.PythonFileType;
|
||||
import com.jetbrains.python.PythonLanguage;
|
||||
import com.jetbrains.python.psi.*;
|
||||
@@ -129,7 +130,8 @@ public class StatementMover extends LineMover {
|
||||
PyElement statementPart = getStatementParts(info, editor, file, down).first;
|
||||
if (statementPart instanceof PyStatementPart) {
|
||||
PyStatementList statementList = ((PyStatementPart)statementPart).getStatementList();
|
||||
if (statementList != null && statementList.getStatements().length == 1 && !(myStatementToMove instanceof PsiComment)) {
|
||||
if (statementList != null && statementList.getStatements().length == 1 && !(myStatementToMove instanceof PsiComment) &&
|
||||
!isMoveToEmptyLine(editor, info, down)) {
|
||||
if (theSameLevel) {
|
||||
myStatementListToAddPassAfter = statementList;
|
||||
}
|
||||
@@ -274,13 +276,13 @@ public class StatementMover extends LineMover {
|
||||
PsiElement element2 = file.findElementAt(offset2-1);
|
||||
if (element2 instanceof PsiWhiteSpace) {
|
||||
if (down) {
|
||||
PsiElement tmp = PyPsiUtils.getSignificantToTheRight(element2, false);
|
||||
final PsiElement tmp = PyPsiUtils.getSignificantToTheRight(element2, false);
|
||||
if (tmp != null &&
|
||||
editor.offsetToLogicalPosition(tmp.getTextRange().getStartOffset()).line == info.toMove2.startLine)
|
||||
(editor.offsetToLogicalPosition(tmp.getTextRange().getStartOffset()).line == info.toMove2.startLine ||
|
||||
tmp.getNode().getElementType() == PyTokenTypes.ELSE_KEYWORD))
|
||||
element2 = tmp;
|
||||
|
||||
} else {
|
||||
PsiElement tmp = PyPsiUtils.getSignificantToTheRight(element2, false);
|
||||
final 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
python/testData/mover/emptyLineInIf.py
Normal file
5
python/testData/mover/emptyLineInIf.py
Normal file
@@ -0,0 +1,5 @@
|
||||
if True:
|
||||
a = 1<caret> # <- move statement down here
|
||||
|
||||
else:
|
||||
b = 2
|
||||
5
python/testData/mover/emptyLineInIf_afterDown.py
Normal file
5
python/testData/mover/emptyLineInIf_afterDown.py
Normal file
@@ -0,0 +1,5 @@
|
||||
if True:
|
||||
|
||||
a = 1<caret> # <- move statement down here
|
||||
else:
|
||||
b = 2
|
||||
6
python/testData/mover/emptyLineInIf_afterUp.py
Normal file
6
python/testData/mover/emptyLineInIf_afterUp.py
Normal file
@@ -0,0 +1,6 @@
|
||||
a = 1<caret> # <- move statement down here
|
||||
if True:
|
||||
pass
|
||||
|
||||
else:
|
||||
b = 2
|
||||
@@ -165,6 +165,10 @@ public class PyStatementMoverTest extends PyTestCase {
|
||||
doTest();
|
||||
}
|
||||
|
||||
public void testEmptyLineInIf() { // PY-6271
|
||||
doTest();
|
||||
}
|
||||
|
||||
public void testWith() { // PY-5202
|
||||
try {
|
||||
setLanguageLevel(LanguageLevel.PYTHON27);
|
||||
|
||||
Reference in New Issue
Block a user