mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-01-08 15:09:39 +07:00
fixed PY-6928 Paste inserts code one line after caret and messes up code in case for as the last compound statement in function
PY-6907 Paste leads to syntactically incorrect code in case of dedent in copied text
This commit is contained in:
@@ -47,6 +47,7 @@ public class PythonCopyPasteProcessor implements CopyPastePreProcessor {
|
||||
StringUtil.splitByLines(text).length > 1)) {
|
||||
if (text.endsWith("\n")) text = text.substring(0, text.length() - 1);
|
||||
final int caretOffset = caretModel.getOffset();
|
||||
int caretColumn = caretModel.getLogicalPosition().column;
|
||||
final PsiElement element = PsiUtilCore.getElementAtOffset(file, caretOffset-1);
|
||||
final int lineNumber = document.getLineNumber(caretOffset);
|
||||
final int offset = getLineStartSafeOffset(document, lineNumber);
|
||||
@@ -69,7 +70,7 @@ public class PythonCopyPasteProcessor implements CopyPastePreProcessor {
|
||||
if (whiteSpace instanceof PsiWhiteSpace) {
|
||||
int relatedOffset = whiteSpace.getTextRange().getEndOffset();
|
||||
final int indent = relatedOffset - getLineStartSafeOffset(document, document.getLineNumber(relatedOffset));
|
||||
if (caretOffset > indent && document.getTextLength() > offset + indent) {
|
||||
if (caretColumn > indent && document.getTextLength() > offset + indent) {
|
||||
caretModel.moveToOffset(offset + indent);
|
||||
moved = true;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
try:
|
||||
return dct[key]
|
||||
except KeyError:
|
||||
pass
|
||||
|
||||
a = 1
|
||||
@@ -0,0 +1,3 @@
|
||||
try:
|
||||
<caret>
|
||||
a = 1
|
||||
@@ -0,0 +1,7 @@
|
||||
class A:
|
||||
def foo(self, dct, key):
|
||||
try:
|
||||
<selection> return dct[key]
|
||||
except KeyError:
|
||||
pass
|
||||
</selection>
|
||||
@@ -0,0 +1,8 @@
|
||||
class C:
|
||||
def foo(self):
|
||||
x = 1
|
||||
y = 2
|
||||
|
||||
x = 1
|
||||
def foo():
|
||||
pass
|
||||
@@ -0,0 +1,8 @@
|
||||
class C:
|
||||
def foo(self):
|
||||
x = 1
|
||||
y = 2
|
||||
|
||||
<caret>
|
||||
def foo():
|
||||
pass
|
||||
@@ -0,0 +1,4 @@
|
||||
class C:
|
||||
def foo(self):
|
||||
<selection> x = 1</selection>
|
||||
y = 2
|
||||
@@ -163,6 +163,14 @@ public class PyCopyPasteTest extends PyTestCase {
|
||||
doTestMultiLine();
|
||||
}
|
||||
|
||||
public void testIndentTryExcept() { //PY-6907
|
||||
doTestMultiLine();
|
||||
}
|
||||
|
||||
public void testIndentOnTopLevel() { //PY-6928
|
||||
doTestSingleLine();
|
||||
}
|
||||
|
||||
private void doTest() {
|
||||
String name = getTestName(false);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user