fixed PY-9070 Indentation is broken when pasting code.

This commit is contained in:
Ekaterina Tuzova
2013-03-11 15:39:11 +04:00
parent 5cf73777e7
commit 5c329b2289
5 changed files with 33 additions and 1 deletions
@@ -10,7 +10,9 @@ import com.intellij.openapi.util.text.StringUtil;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.intellij.psi.codeStyle.CodeStyleSettingsManager;
import com.intellij.psi.tree.IElementType;
import com.intellij.psi.util.PsiTreeUtil;
import com.jetbrains.python.PyTokenTypes;
import com.jetbrains.python.PythonFileType;
import com.jetbrains.python.psi.PyClass;
import com.jetbrains.python.psi.PyFunction;
@@ -87,7 +89,16 @@ public class PythonCopyPasteProcessor implements CopyPastePreProcessor {
int caretOffset,
int lineNumber) {
final PsiElement nonWS = PyUtil.findNextNonWhitespaceAtOffset(file, caretOffset);
PsiElement nonWS = PyUtil.findNextNonWhitespaceAtOffset(file, caretOffset);
if (nonWS != null) {
final IElementType nonWSType = nonWS.getNode().getElementType();
if (nonWSType == PyTokenTypes.ELSE_KEYWORD || nonWSType == PyTokenTypes.ELIF_KEYWORD ||
nonWSType == PyTokenTypes.EXCEPT_KEYWORD || nonWSType == PyTokenTypes.FINALLY_KEYWORD) {
lineNumber -= 1;
nonWS = PyUtil.findNextNonWhitespaceAtOffset(file, getLineStartSafeOffset(document, lineNumber));
}
}
int lineStartOffset = getLineStartSafeOffset(document, lineNumber);
String indentText = document.getText(TextRange.create(lineStartOffset, caretOffset));
@@ -0,0 +1,7 @@
def fo():
for i in range():
if i == 1:
do()
a = 1
else:
does()
@@ -0,0 +1,6 @@
def fo():
for i in range():
if i == 1:
do()
<caret> else:
does()
@@ -0,0 +1,4 @@
<selection>a = 1
</selection>b = 1
c = 1
d = 1
@@ -289,6 +289,10 @@ public class PyCopyPasteTest extends PyTestCase {
doTest();
}
public void testIndentBeforeElse() {
doTest();
}
public void testEmpty() {
doTest();
}