TrailingCommaPostFormatProcessor: add language feature check
#KT-34744
This commit is contained in:
@@ -120,6 +120,10 @@
|
|||||||
description="Use IDEA project import mechanics to load Kotlin Gradle scripts configuration"
|
description="Use IDEA project import mechanics to load Kotlin Gradle scripts configuration"
|
||||||
defaultValue="false"
|
defaultValue="false"
|
||||||
restartRequired="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"/>
|
<fileEditorProvider implementation="org.jetbrains.kotlin.idea.scratch.ui.KtScratchFileEditorProvider"/>
|
||||||
|
|
||||||
<registryKey key="kotlin.experimental.project.wizard"
|
<registryKey key="kotlin.experimental.project.wizard"
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.idea.formatter
|
|||||||
import com.intellij.lang.ASTNode
|
import com.intellij.lang.ASTNode
|
||||||
import com.intellij.openapi.diagnostic.Logger
|
import com.intellij.openapi.diagnostic.Logger
|
||||||
import com.intellij.openapi.util.TextRange
|
import com.intellij.openapi.util.TextRange
|
||||||
|
import com.intellij.openapi.util.registry.Registry
|
||||||
import com.intellij.psi.PsiComment
|
import com.intellij.psi.PsiComment
|
||||||
import com.intellij.psi.PsiElement
|
import com.intellij.psi.PsiElement
|
||||||
import com.intellij.psi.PsiFile
|
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.PostFormatProcessor
|
||||||
import com.intellij.psi.impl.source.codeStyle.PostFormatProcessorHelper
|
import com.intellij.psi.impl.source.codeStyle.PostFormatProcessorHelper
|
||||||
import com.intellij.psi.tree.TokenSet
|
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.isMultiline
|
||||||
|
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.*
|
||||||
@@ -32,12 +36,22 @@ 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 =
|
||||||
TrailingCommaVisitor(settings).process(source)
|
if (trailingCommaIsAllowedInModule(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 =
|
||||||
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 fun postFormatIsEnable(source: PsiElement): Boolean = !PostprocessReformattingAspect.getInstance(source.project).isDisabled
|
||||||
|
|
||||||
private class TrailingCommaVisitor(val settings: CodeStyleSettings) : KtTreeVisitorVoid() {
|
private class TrailingCommaVisitor(val settings: CodeStyleSettings) : KtTreeVisitorVoid() {
|
||||||
|
|||||||
Reference in New Issue
Block a user