TrailingCommaPostFormatProcessor: add language feature check

#KT-34744
This commit is contained in:
Dmitry Gridin
2020-01-10 15:23:51 +07:00
parent 9511348497
commit c27bf051d5
2 changed files with 20 additions and 2 deletions
@@ -120,6 +120,10 @@
description="Use IDEA project import mechanics to load Kotlin Gradle scripts configuration"
defaultValue="false"
restartRequired="false"/>
<registryKey key="kotlin.formatter.allowTrailingCommaInAnyProject"
description="Allow a trailing comma regardless of plugin version"
defaultValue="false"
restartRequired="false"/>
<fileEditorProvider implementation="org.jetbrains.kotlin.idea.scratch.ui.KtScratchFileEditorProvider"/>
<registryKey key="kotlin.experimental.project.wizard"
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.idea.formatter
import com.intellij.lang.ASTNode
import com.intellij.openapi.diagnostic.Logger
import com.intellij.openapi.util.TextRange
import com.intellij.openapi.util.registry.Registry
import com.intellij.psi.PsiComment
import com.intellij.psi.PsiElement
import com.intellij.psi.PsiFile
@@ -18,7 +19,10 @@ import com.intellij.psi.impl.source.PostprocessReformattingAspect
import com.intellij.psi.impl.source.codeStyle.PostFormatProcessor
import com.intellij.psi.impl.source.codeStyle.PostFormatProcessorHelper
import com.intellij.psi.tree.TokenSet
import org.jetbrains.kotlin.config.LanguageFeature
import org.jetbrains.kotlin.idea.project.languageVersionSettings
import org.jetbrains.kotlin.idea.util.isMultiline
import org.jetbrains.kotlin.idea.util.module
import org.jetbrains.kotlin.idea.util.needTrailingComma
import org.jetbrains.kotlin.lexer.KtTokens
import org.jetbrains.kotlin.psi.*
@@ -32,12 +36,22 @@ import org.jetbrains.kotlin.utils.ifEmpty
class TrailingCommaPostFormatProcessor : PostFormatProcessor {
override fun processElement(source: PsiElement, settings: CodeStyleSettings): PsiElement =
TrailingCommaVisitor(settings).process(source)
if (trailingCommaIsAllowedInModule(source))
TrailingCommaVisitor(settings).process(source)
else
source
override fun processText(source: PsiFile, rangeToReformat: TextRange, settings: CodeStyleSettings): TextRange =
TrailingCommaVisitor(settings).processText(source, rangeToReformat)
if (trailingCommaIsAllowedInModule(source))
TrailingCommaVisitor(settings).processText(source, rangeToReformat)
else
rangeToReformat
}
private fun trailingCommaIsAllowedInModule(source: PsiElement): Boolean =
Registry.`is`("kotlin.formatter.allowTrailingCommaInAnyProject", false) ||
source.module?.languageVersionSettings?.supportsFeature(LanguageFeature.TrailingCommas) == true
private fun postFormatIsEnable(source: PsiElement): Boolean = !PostprocessReformattingAspect.getInstance(source.project).isDisabled
private class TrailingCommaVisitor(val settings: CodeStyleSettings) : KtTreeVisitorVoid() {