override fun preprocessEnter()

in src/main/kotlin/org/arend/formatting/ArendEnterAtIndentHandler.kt [25:70]


    override fun preprocessEnter(origFile: PsiFile, origEditor: Editor, caretOffset: Ref<Int>, caretAdvance: Ref<Int>, dataContext: DataContext, originalHandler: EditorActionHandler?): EnterHandlerDelegate.Result {
        var file = origFile
        var editor = origEditor

        if (editor is EditorWindow) {
            file = InjectedLanguageManager.getInstance(file.project).getTopLevelFile(file)
            editor = editor.delegate
        }
        if (file !is ArendFile) return EnterHandlerDelegate.Result.Continue

        val charSeq = editor.document.charsSequence
        val currentOffset = editor.logicalPositionToOffset(editor.caretModel.logicalPosition)

        val startParenOffset = startingParenOffset(currentOffset, charSeq, origFile)
        if (startParenOffset != -1) {
            insertLineBreak(editor, startParenOffset, "")
            return EnterHandlerDelegate.Result.Stop
        }

        val comment = file.findElementAt(currentOffset)

        if (comment != null && comment.node.elementType == DOC_COMMENT) {
            val commentStart = comment.node.treePrev
            val relativeOffset = currentOffset - commentStart.startOffset
            val commentStartPortion = (commentStart.text + comment.text).substring(0, relativeOffset)
            val lastMatch = Regex("((\\n( )+-)|(\\{-))").findAll(commentStartPortion).lastOrNull()
            if (lastMatch != null) {
                val dashIndex = lastMatch.range.last + commentStart.startOffset
                insertLineBreak(editor, dashIndex, "- ")
                return EnterHandlerDelegate.Result.Stop
            }
        } else if (comment?.elementType == DOC_NEWLINE &&
                    file.findElementAt(currentOffset - 1)?.elementType == DOC_START) {
            val document = editor.document
            document.insertString(currentOffset, "\n - ")
            if (!hasDocEnd(currentOffset + 1, file) && file.findElementAt(currentOffset + 1)?.elementType == DOC_TEXT) {
                document.insertString(currentOffset + 4, "\n -}")
            }
            editor.caretModel.moveToOffset(currentOffset + 4)
            return EnterHandlerDelegate.Result.Stop
        }

        return if (BackspaceHandler.isWhitespaceBeforeCaret(editor)) {
            EnterHandlerDelegate.Result.DefaultSkipIndent
        } else EnterHandlerDelegate.Result.Continue
    }