boolean (ASTNode nodeAtCaret, boolean autoWrapInProgress) { if (PsiTreeUtil.getParentOfType(nodeAtCaret.getPsi(), PyFStringFragment.class) != null) { return false; } PsiElement statementBefore = findStatementBeforeCaret(nodeAtCaret); PsiElement statementAfter = findStatementAfterCaret(nodeAtCaret); if (statementBefore != statementAfter) { // Enter pressed at statement break return false; } if (statementBefore == null) { // empty file return false; } if (PsiTreeUtil.hasErrorElements(statementBefore)) { if (!autoWrapInProgress) { // code is already bad, don't mess it up even further return false; } // if we're in middle of typing, it's expected that we will have error elements } final int offset = nodeAtCaret.getTextRange().getStartOffset(); if (inFromImportParentheses(statementBefore, offset) || inWithItemsParentheses(statementBefore, offset) || inCaseClauseParentheses(statementBefore, offset)) { return false; } PsiElement wrappableBefore = findWrappable(nodeAtCaret, true); PsiElement wrappableAfter = findWrappable(nodeAtCaret, false); if (!(wrappableBefore instanceof PsiComment)) { while (wrappableBefore != null) { PsiElement next = PsiTreeUtil.getParentOfType(wrappableBefore, PyEditorHandlerConfig.WRAPPABLE_CLASSES); if (next == null) { break; } wrappableBefore = next; } } if (!(wrappableAfter instanceof PsiComment)) { while (wrappableAfter != null) { PsiElement next = PsiTreeUtil.getParentOfType(wrappableAfter, PyEditorHandlerConfig.WRAPPABLE_CLASSES); if (next == null) { break; } wrappableAfter = next; } } if (wrappableBefore instanceof PsiComment || wrappableAfter instanceof PsiComment) { return false; } if (wrappableAfter == null) { return !(wrappableBefore instanceof PyDecoratorList); } return wrappableBefore != wrappableAfter; }