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)
}