From e54471abbc30bd30331b17d684677ea02a14609f Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Wed, 13 Jan 2016 13:36:17 +0300 Subject: [PATCH] Formatting rule: new line before when entry --- .../kotlin/parsing/KotlinParserDefinition.kt | 24 +++++++++++++++---- .../quickfix/AddWhenRemainingBranchesFix.kt | 3 +-- 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/kotlin/parsing/KotlinParserDefinition.kt b/compiler/frontend/src/org/jetbrains/kotlin/parsing/KotlinParserDefinition.kt index 281c9b40781..3ee303eafa0 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/parsing/KotlinParserDefinition.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/parsing/KotlinParserDefinition.kt @@ -20,6 +20,7 @@ import com.intellij.extapi.psi.ASTWrapperPsiElement import com.intellij.lang.ASTNode import com.intellij.lang.LanguageParserDefinitions import com.intellij.lang.ParserDefinition +import com.intellij.lang.ParserDefinition.SpaceRequirements.* import com.intellij.lang.PsiParser import com.intellij.lexer.Lexer import com.intellij.openapi.project.Project @@ -37,6 +38,8 @@ import org.jetbrains.kotlin.kdoc.psi.impl.KDocLink import org.jetbrains.kotlin.lexer.KotlinLexer import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.psi.KtFile +import org.jetbrains.kotlin.psi.KtWhenEntry +import org.jetbrains.kotlin.psi.psiUtil.getNonStrictParentOfType import org.jetbrains.kotlin.psi.stubs.elements.KtStubElementType import org.jetbrains.kotlin.psi.stubs.elements.KtStubElementTypes @@ -68,12 +71,23 @@ class KotlinParserDefinition : ParserDefinition { override fun createFile(fileViewProvider: FileViewProvider): PsiFile = KtFile(fileViewProvider, false) - override fun spaceExistanceTypeBetweenTokens(astNode: ASTNode, astNode1: ASTNode): ParserDefinition.SpaceRequirements { - val rightTokenType = astNode1.elementType - if (rightTokenType === KtTokens.GET_KEYWORD || rightTokenType === KtTokens.SET_KEYWORD) { - return ParserDefinition.SpaceRequirements.MUST_LINE_BREAK + override fun spaceExistanceTypeBetweenTokens(left: ASTNode, right: ASTNode): ParserDefinition.SpaceRequirements { + val rightTokenType = right.elementType + // get/set from a new line + if (rightTokenType == KtTokens.GET_KEYWORD || rightTokenType == KtTokens.SET_KEYWORD) { + return MUST_LINE_BREAK } - return ParserDefinition.SpaceRequirements.MAY + val leftTokenType = left.elementType + // When entry from a new line + val rightWhenEntry = right.psi.getNonStrictParentOfType() + if (rightWhenEntry != null) { + val leftWhenEntry = left.psi.getNonStrictParentOfType() + if (leftWhenEntry != null && leftWhenEntry != rightWhenEntry && leftTokenType != KtTokens.SEMICOLON) { + return MUST_LINE_BREAK + } + } + // Default + return MAY } companion object { diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/AddWhenRemainingBranchesFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/AddWhenRemainingBranchesFix.kt index acb85ab29e0..0509c8c9c85 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/AddWhenRemainingBranchesFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/AddWhenRemainingBranchesFix.kt @@ -50,8 +50,7 @@ class AddWhenRemainingBranchesFix(expression: KtWhenExpression) : KotlinQuickFix for (case in necessaryCases) { val entry = psiFactory.createWhenEntry("${case.branchConditionText} -> TODO()") - val insertedBranch = element.addBefore(entry, whenCloseBrace) - element.addAfter(psiFactory.createNewLine(), insertedBranch) + element.addBefore(entry, whenCloseBrace) } }