TrailingCommaPostFormatProcessor: allow everything except adding before 1.4

#KT-34744
This commit is contained in:
Dmitry Gridin
2020-01-15 20:20:00 +07:00
parent c5c035b67c
commit 20836f5788
@@ -26,26 +26,23 @@ import org.jetbrains.kotlin.idea.util.module
import org.jetbrains.kotlin.idea.util.needTrailingComma import org.jetbrains.kotlin.idea.util.needTrailingComma
import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.lexer.KtTokens
import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.psi.psiUtil.* import org.jetbrains.kotlin.psi.psiUtil.createSmartPointer
import org.jetbrains.kotlin.psi.psiUtil.getPrevSiblingIgnoringWhitespaceAndComments
import org.jetbrains.kotlin.psi.psiUtil.prevLeaf
import org.jetbrains.kotlin.psi.psiUtil.siblings
import org.jetbrains.kotlin.utils.addToStdlib.cast import org.jetbrains.kotlin.utils.addToStdlib.cast
import org.jetbrains.kotlin.utils.addToStdlib.safeAs import org.jetbrains.kotlin.utils.addToStdlib.safeAs
import org.jetbrains.kotlin.utils.ifEmpty import org.jetbrains.kotlin.utils.ifEmpty
class TrailingCommaPostFormatProcessor : PostFormatProcessor { class TrailingCommaPostFormatProcessor : PostFormatProcessor {
override fun processElement(source: PsiElement, settings: CodeStyleSettings): PsiElement = override fun processElement(source: PsiElement, settings: CodeStyleSettings): PsiElement =
if (trailingCommaIsAllowedInModule(source)) TrailingCommaVisitor(settings).process(source)
TrailingCommaVisitor(settings).process(source)
else
source
override fun processText(source: PsiFile, rangeToReformat: TextRange, settings: CodeStyleSettings): TextRange = override fun processText(source: PsiFile, rangeToReformat: TextRange, settings: CodeStyleSettings): TextRange =
if (trailingCommaIsAllowedInModule(source)) TrailingCommaVisitor(settings).processText(source, rangeToReformat)
TrailingCommaVisitor(settings).processText(source, rangeToReformat)
else
rangeToReformat
} }
private fun trailingCommaIsAllowedInModule(source: PsiElement): Boolean = private fun trailingCommaAllowedInModule(source: PsiElement): Boolean =
Registry.`is`("kotlin.formatter.allowTrailingCommaInAnyProject", false) || Registry.`is`("kotlin.formatter.allowTrailingCommaInAnyProject", false) ||
source.module?.languageVersionSettings?.supportsFeature(LanguageFeature.TrailingCommas) == true source.module?.languageVersionSettings?.supportsFeature(LanguageFeature.TrailingCommas) == true
@@ -104,7 +101,7 @@ private class TrailingCommaVisitor(val settings: CodeStyleSettings) : KtTreeVisi
when { when {
parent.needComma(false) -> { parent.needComma(false) -> {
// add a missing comma // add a missing comma
if (elementType !== KtTokens.COMMA) { if (elementType !== KtTokens.COMMA && trailingCommaAllowedInModule(parent)) {
lastElement.addCommaAfter(KtPsiFactory(parent)) lastElement.addCommaAfter(KtPsiFactory(parent))
} }