mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
PY-41312 Fix moving selected lines with different folding level
(cherry picked from commit a099d7b13c66615bf54aa7bdd5273770de3afaba) IJ-MR-4314 GitOrigin-RevId: dffaccd88d13ca77cd281a28c46e9d43513a43c6
This commit is contained in:
committed by
intellij-monorepo-bot
parent
72f751f5a4
commit
43f00d7705
+10
-4
@@ -18,10 +18,7 @@ package com.jetbrains.python.codeInsight.editorActions.moveUpDown;
|
||||
import com.intellij.codeInsight.editorActions.moveUpDown.LineMover;
|
||||
import com.intellij.codeInsight.editorActions.moveUpDown.LineRange;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.editor.CaretModel;
|
||||
import com.intellij.openapi.editor.Document;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.openapi.editor.SelectionModel;
|
||||
import com.intellij.openapi.editor.*;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.Pair;
|
||||
import com.intellij.openapi.util.TextRange;
|
||||
@@ -31,6 +28,7 @@ import com.intellij.psi.codeStyle.CodeStyleManager;
|
||||
import com.intellij.psi.impl.source.PostprocessReformattingAspect;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.jetbrains.python.psi.*;
|
||||
import com.jetbrains.python.psi.impl.PyPsiUtils;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
@@ -69,6 +67,14 @@ public class PyStatementMover extends LineMover {
|
||||
else if (PsiTreeUtil.isAncestor(elementToMove2, elementToMove1, false)) {
|
||||
elementToMove1 = elementToMove2;
|
||||
}
|
||||
else {
|
||||
PsiElement commonParent = PsiTreeUtil.findCommonParent(elementToMove1, elementToMove2);
|
||||
if (commonParent == null) return false;
|
||||
elementToMove1 = PyPsiUtils.getParentRightBefore(elementToMove1, commonParent);
|
||||
elementToMove2 = PyPsiUtils.getParentRightBefore(elementToMove2, commonParent);
|
||||
assert elementToMove1 != null && elementToMove2 != null;
|
||||
}
|
||||
|
||||
info.toMove = new MyLineRange(elementToMove1, elementToMove2);
|
||||
info.toMove2 = getDestinationScope(file, editor, down ? elementToMove2 : elementToMove1, down);
|
||||
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
pass
|
||||
<caret><selection>n = 0
|
||||
while n:
|
||||
print("spam")</selection>
|
||||
pass
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
pass
|
||||
pass
|
||||
<caret><selection>n = 0
|
||||
while n:
|
||||
print("spam")</selection>
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
<caret><selection>n = 0
|
||||
while n:
|
||||
print("spam")</selection>
|
||||
pass
|
||||
pass
|
||||
@@ -0,0 +1,7 @@
|
||||
pass
|
||||
|
||||
<caret><selection>n = 0
|
||||
while n:
|
||||
print("spam")</selection>
|
||||
|
||||
pass
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
pass
|
||||
|
||||
|
||||
<caret><selection>n = 0
|
||||
while n:
|
||||
print("spam")</selection>
|
||||
pass
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
pass
|
||||
<caret><selection>n = 0
|
||||
while n:
|
||||
print("spam")</selection>
|
||||
|
||||
|
||||
pass
|
||||
@@ -238,6 +238,16 @@ public class PyStatementMoverTest extends PyTestCase {
|
||||
doTest();
|
||||
}
|
||||
|
||||
// PY-41312
|
||||
public void testMultiLineSelectionDifferentIndentLevelsMoveToEmptyLine() {
|
||||
doTest();
|
||||
}
|
||||
|
||||
// PY-41312
|
||||
public void testMultiLineSelectionDifferentIndentLevelsMoveThroughPass() {
|
||||
doTest();
|
||||
}
|
||||
|
||||
public void testTheSameLevelMultiple() { //PY-10947
|
||||
doTest();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user