in src/main/kotlin/org/arend/psi/ext/ArendCompositeElement.kt [92:113]
fun getTopmostEquivalentSourceNode(sourceNode: ArendSourceNode): ArendSourceNode {
var current = sourceNode
while (true) {
val parent = current.parent
if (parent == null || current is Abstract.Expression != parent is Abstract.Expression) {
return current
}
current = when {
parent is ArendLiteral -> parent
parent is ArendAtom -> parent
parent is ArendTuple && parent.tupleExprList.let { it.size == 1 && it[0].type == null } -> parent
parent is ArendNewExpr && parent.appPrefix == null && parent.lbrace == null && parent.argumentList.isEmpty() -> parent
parent is ArendAtomFieldsAcc && parent.numberList.isEmpty() -> parent
parent is ArendArgumentAppExpr && parent.argumentList.isEmpty() -> parent
parent is ArendLongName && parent.refIdentifierList.size == 1 -> parent
parent is ArendAtomLevelExpr && parent.lparen != null -> parent
parent is ArendOnlyLevelExpr && current is ArendOnlyLevelExpr -> parent
//parent is ArendIPName -> parent
else -> return current
}
}
}