Skip to content

Commit 4a0c2d4

Browse files
nreid260facebook-github-bot
authored andcommitted
Prevent adjacent unary operators from merging (#328)
Summary: Pull Request resolved: #328 Reviewed By: strulovich Differential Revision: D37003050 Pulled By: cgrushko fbshipit-source-id: 010cd6a400d88aed8e253718658ec93464dd0b5f
1 parent d71487b commit 4a0c2d4

File tree

2 files changed

+53
-7
lines changed

2 files changed

+53
-7
lines changed

core/src/main/java/com/facebook/ktfmt/format/KotlinInputAstVisitor.kt

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,6 @@ import org.jetbrains.kotlin.psi.KtTypeParameter
111111
import org.jetbrains.kotlin.psi.KtTypeParameterList
112112
import org.jetbrains.kotlin.psi.KtTypeProjection
113113
import org.jetbrains.kotlin.psi.KtTypeReference
114-
import org.jetbrains.kotlin.psi.KtUnaryExpression
115114
import org.jetbrains.kotlin.psi.KtUserType
116115
import org.jetbrains.kotlin.psi.KtValueArgument
117116
import org.jetbrains.kotlin.psi.KtValueArgumentList
@@ -1137,19 +1136,33 @@ class KotlinInputAstVisitor(
11371136
builder.close()
11381137
}
11391138

1140-
override fun visitUnaryExpression(expression: KtUnaryExpression) {
1139+
override fun visitPostfixExpression(expression: KtPostfixExpression) {
11411140
builder.sync(expression)
11421141
builder.block(ZERO) {
1143-
visit(expression.baseExpression)
1144-
builder.token(expression.operationReference.text)
1142+
val baseExpression = expression.baseExpression
1143+
val operator = expression.operationReference.text
1144+
1145+
visit(baseExpression)
1146+
if (baseExpression is KtPostfixExpression &&
1147+
baseExpression.operationReference.text.last() == operator.first()) {
1148+
builder.space()
1149+
}
1150+
builder.token(operator)
11451151
}
11461152
}
11471153

11481154
override fun visitPrefixExpression(expression: KtPrefixExpression) {
11491155
builder.sync(expression)
11501156
builder.block(ZERO) {
1151-
builder.token(expression.operationReference.text)
1152-
visit(expression.baseExpression)
1157+
val baseExpression = expression.baseExpression
1158+
val operator = expression.operationReference.text
1159+
1160+
builder.token(operator)
1161+
if (baseExpression is KtPrefixExpression &&
1162+
operator.last() == baseExpression.operationReference.text.first()) {
1163+
builder.space()
1164+
}
1165+
visit(baseExpression)
11531166
}
11541167
}
11551168

core/src/test/java/com/facebook/ktfmt/format/FormatterTest.kt

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2904,7 +2904,7 @@ class FormatterTest {
29042904
|""".trimMargin())
29052905

29062906
@Test
2907-
fun `Unary expressions`() =
2907+
fun `Unary prefix expressions`() =
29082908
assertFormatted(
29092909
"""
29102910
|fun f() {
@@ -2914,6 +2914,39 @@ class FormatterTest {
29142914
| +4
29152915
| ++a
29162916
| --a
2917+
|
2918+
| + +a
2919+
| +-a
2920+
| +!a
2921+
| -+a
2922+
| - -a
2923+
| -!a
2924+
| !+a
2925+
| !a
2926+
| ! !a
2927+
|
2928+
| + ++a
2929+
| +--a
2930+
| -++a
2931+
| - --a
2932+
| !++a
2933+
| !--a
2934+
|}
2935+
|""".trimMargin())
2936+
2937+
@Test
2938+
fun `Unary postfix expressions`() =
2939+
assertFormatted(
2940+
"""
2941+
|fun f() {
2942+
| a!!
2943+
| a++
2944+
| a--
2945+
|
2946+
| a--!!
2947+
| a++!!
2948+
|
2949+
| a!! !!
29172950
|}
29182951
|""".trimMargin())
29192952

0 commit comments

Comments
 (0)