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:
Ekaterina Tuzova
2012-07-10 19:08:10 +04:00
parent 326ac10754
commit 9d28280928
8 changed files with 46 additions and 1 deletions

View File

@@ -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;
}

View File

@@ -0,0 +1,6 @@
try:
return dct[key]
except KeyError:
pass
a = 1

View File

@@ -0,0 +1,3 @@
try:
<caret>
a = 1

View File

@@ -0,0 +1,7 @@
class A:
def foo(self, dct, key):
try:
<selection> return dct[key]
except KeyError:
pass
</selection>

View File

@@ -0,0 +1,8 @@
class C:
def foo(self):
x = 1
y = 2
x = 1
def foo():
pass

View File

@@ -0,0 +1,8 @@
class C:
def foo(self):
x = 1
y = 2
<caret>
def foo():
pass

View File

@@ -0,0 +1,4 @@
class C:
def foo(self):
<selection> x = 1</selection>
y = 2

View File

@@ -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);