fun doUnwrapParens()

in src/main/kotlin/org/arend/inspection/RedundantParensInspection.kt [181:229]


fun doUnwrapParens(startElement: PsiElement) {
    var parent: PsiElement? = startElement
    var spaceLeft = ""
    var parenLeft = false
    var spaceRight = ""
    var parenRight = false
    var contents: String

    while (parent?.textRange?.startOffset == startElement.startOffset) {
        parenLeft = parenLeft || parent.findPrevSibling()?.elementType in listOf(LPAREN, LBRACE)
        val w = parent.getWhitespace(SpaceDirection.LeadingSpace)
        if (w != null && w != "") {
            spaceLeft = w
            break
        }
        parent = parent.parent
    }

    parent = startElement

    while (parent?.textRange?.endOffset == startElement.endOffset) {
        parenRight = parenRight || parent.findNextSibling()?.elementType in listOf(RPAREN, RBRACE)
        val v = parent.getWhitespace(SpaceDirection.TrailingSpace)
        if (v != null && v != "") {
            spaceRight = v
            break
        }
        parent = parent.parent
    }

    when (startElement) {
        is ArendTuple -> {
            spaceLeft += startElement.tupleExprList.first().getWhitespace(SpaceDirection.LeadingSpace)
            spaceRight = startElement.tupleExprList.last().getWhitespace(SpaceDirection.TrailingSpace) + spaceRight
            contents = startElement.containingFile.text.substring(startElement.tupleExprList.first().startOffset, startElement.tupleExprList.last().endOffset)
        }
        is ArendMaybeAtomLevelExprs -> {
            contents = startElement.childOfType<ArendAtomLevelExpr>()?.text ?: ""
        }
        else -> {
            contents = unwrapParens(startElement)?.text ?: ""
        }
    }

    if (spaceLeft == "" && !parenLeft) contents = " $contents"
    if (spaceRight == "" && !parenRight) contents += " "

    performTextModification(startElement, contents)
}