Join lines should remove useless trailing commas

#KT-39065 Fixed
This commit is contained in:
Dmitry Gridin
2020-05-22 19:19:26 +07:00
parent e4a9679ec2
commit 10462c31d2
6 changed files with 20 additions and 11 deletions
@@ -13,8 +13,7 @@ import com.intellij.psi.codeStyle.CodeStyleManager
import org.jetbrains.kotlin.idea.core.util.containsLineBreakInRange
import org.jetbrains.kotlin.idea.formatter.trailingComma.TrailingCommaHelper
import org.jetbrains.kotlin.idea.formatter.trailingComma.TrailingCommaState
import org.jetbrains.kotlin.idea.formatter.trailingComma.canAddTrailingCommaWithRegistryCheck
import org.jetbrains.kotlin.idea.formatter.trailingComma.existsOrMissing
import org.jetbrains.kotlin.idea.formatter.trailingComma.canAddTrailingComma
import org.jetbrains.kotlin.psi.KtElement
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.psi.psiUtil.parentsWithSelf
@@ -26,12 +25,22 @@ class JoinWithTrailingCommaHandler : JoinLinesHandlerDelegate {
val commaOwner = file.findElementAt(start)
?.parentsWithSelf
?.filter { !document.containsLineBreakInRange(it.textRange) }
?.findLast { it.canAddTrailingCommaWithRegistryCheck() } as? KtElement
?.findLast { it.canAddTrailingComma() } as? KtElement
?: return CANNOT_JOIN
if (TrailingCommaState.stateForElement(commaOwner).existsOrMissing) return CANNOT_JOIN
val result = CodeStyleManager.getInstance(file.project).reformat(commaOwner) as KtElement
return TrailingCommaHelper.elementAfterLastElement(result)?.startOffset ?: end - 1
return when (TrailingCommaState.stateForElement(commaOwner)) {
TrailingCommaState.REDUNDANT, TrailingCommaState.NOT_EXISTS -> {
val oldLen = commaOwner.textLength
val result = CodeStyleManager.getInstance(file.project).reformat(commaOwner) as KtElement
if (oldLen != result.textLength)
TrailingCommaHelper.elementAfterLastElement(result)?.startOffset ?: end - 1
else
CANNOT_JOIN
}
else ->
CANNOT_JOIN
}
}
}
@@ -1,3 +1,3 @@
fun a() {
b(1, 3, 2424,<caret> awdawd,)
b(1, 3, 2424, awdawd<caret>)
}
+1 -1
View File
@@ -1,4 +1,4 @@
fun a() {
<caret>g[1, 2, 3,/**/
<caret> g[1, 2, 3,/**/
]
}
@@ -1,3 +1,3 @@
fun a() {
g[1, 2, 3,/**/<caret>]
g[1, 2, 3/**/<caret>]
}
@@ -1,2 +1,2 @@
@Anno([1, 2, 3,<caret> ])
@Anno([1, 2, 3]<caret>)
class A
@@ -1,3 +1,3 @@
fun a() {
b<Int,<caret> >()
b<Int<caret>>()
}