int (@NotNull final MyLineRange toMove, @NotNull final Editor editor, @NotNull final MoveInfo info) { boolean removePass = false; final ScopeRange toMove2 = (ScopeRange)info.toMove2; final PsiElement scope = toMove2.getScope(); final PsiElement anchor = toMove2.getAnchor(); final Project project = scope.getProject(); final PsiElement startElement = toMove.myStartElement; final PsiElement endElement = toMove.myEndElement; PsiElement parent = startElement.getParent(); if (scope instanceof PyStatementList && !(startElement == endElement && startElement instanceof PsiComment)) { final PyStatement[] statements = ((PyStatementList)scope).getStatements(); if (statements.length == 1 && statements[0] == anchor && statements[0] instanceof PyPassStatement) { removePass = true; } } final PsiElement addedElement; PsiElement nextSibling = startElement.getNextSibling(); if (toMove2.isAddBefore()) { PsiElement tmp = endElement.getPrevSibling(); if (startElement != endElement && tmp != null) { addedElement = scope.addRangeBefore(startElement, tmp, anchor); scope.addBefore(endElement, anchor); } else { addedElement = scope.addBefore(endElement, anchor); } } else { if (startElement != endElement && nextSibling != null) { scope.addRangeAfter(nextSibling, endElement, anchor); } addedElement = scope.addAfter(startElement, anchor); } addPassStatement(toMove, project); if (startElement != endElement && nextSibling != null) { parent.deleteChildRange(nextSibling, endElement); } startElement.delete(); final int addedElementLine = editor.getDocument().getLineNumber(addedElement.getTextOffset()); final PsiFile file = scope.getContainingFile(); adjustLineIndents(editor, scope, project, addedElement, toMove.size); if (removePass) { ApplicationManager.getApplication().runWriteAction(() -> { final Document document = editor.getDocument(); final int lineNumber = document.getLineNumber(anchor.getTextOffset()); final int endOffset = document.getLineCount() <= lineNumber + 1 ? document.getLineEndOffset(lineNumber) : document.getLineStartOffset(lineNumber + 1); document.deleteString(document.getLineStartOffset(lineNumber), endOffset); PsiDocumentManager.getInstance(startElement.getProject()).commitAllDocuments(); }); } int offset = addedElement.getTextRange().getStartOffset(); int newLine = editor.getDocument().getLineNumber(offset); if (newLine != addedElementLine && !removePass) { // PsiComment gets broken after adjust indent PsiElement psiElement = PyUtil.findNonWhitespaceAtOffset(file, editor.getDocument().getLineEndOffset(addedElementLine) - 1); if (psiElement != null) { psiElement = getCommentOrStatement(editor.getDocument(), psiElement); offset = psiElement.getTextRange().getStartOffset(); } } return offset; }