Formatting rule: new line before when entry

This commit is contained in:
Mikhail Glukhikh
2016-01-13 13:36:17 +03:00
parent b7790177e0
commit e54471abbc
2 changed files with 20 additions and 7 deletions
@@ -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<KtWhenEntry>()
if (rightWhenEntry != null) {
val leftWhenEntry = left.psi.getNonStrictParentOfType<KtWhenEntry>()
if (leftWhenEntry != null && leftWhenEntry != rightWhenEntry && leftTokenType != KtTokens.SEMICOLON) {
return MUST_LINE_BREAK
}
}
// Default
return MAY
}
companion object {
@@ -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)
}
}