From eadfa724808258224fce207f19d6fe1c8fdb7aa1 Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Wed, 27 May 2015 12:33:50 +0300 Subject: [PATCH] Fixed formatter for EOL comments (via hack) --- .../idea/formatter/KotlinSpacingBuilder.kt | 24 ++++++++++++------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/idea/src/org/jetbrains/kotlin/idea/formatter/KotlinSpacingBuilder.kt b/idea/src/org/jetbrains/kotlin/idea/formatter/KotlinSpacingBuilder.kt index 0719640c89e..7574781d5b7 100644 --- a/idea/src/org/jetbrains/kotlin/idea/formatter/KotlinSpacingBuilder.kt +++ b/idea/src/org/jetbrains/kotlin/idea/formatter/KotlinSpacingBuilder.kt @@ -17,16 +17,17 @@ package org.jetbrains.kotlin.idea.formatter import com.intellij.formatting.* - -import com.intellij.psi.codeStyle.CodeStyleSettings -import java.util.ArrayList -import com.intellij.psi.tree.IElementType -import org.jetbrains.kotlin.idea.JetLanguage -import com.intellij.psi.formatter.common.AbstractBlock -import com.intellij.lang.ASTNode -import com.intellij.formatting.DependentSpacingRule.Trigger import com.intellij.formatting.DependentSpacingRule.Anchor +import com.intellij.formatting.DependentSpacingRule.Trigger +import com.intellij.lang.ASTNode import com.intellij.openapi.util.TextRange +import com.intellij.psi.codeStyle.CodeStyleSettings +import com.intellij.psi.formatter.common.AbstractBlock +import com.intellij.psi.tree.IElementType +import org.jetbrains.kotlin.JetNodeTypes +import org.jetbrains.kotlin.idea.JetLanguage +import org.jetbrains.kotlin.lexer.JetTokens +import java.util.ArrayList class KotlinSpacingBuilder(val codeStyleSettings: CodeStyleSettings) { class SpacingNodeBlock(node: ASTNode): AbstractBlock(node, null, null) { @@ -114,7 +115,14 @@ class KotlinSpacingBuilder(val codeStyleSettings: CodeStyleSettings) { for (builder in builders) { val spacing = builder.getSpacing(parent, child1, child2) + if (spacing != null) { + // TODO: it's a severe hack but I don't know how to implement it in other way + if (child1.getNode().getElementType() == JetTokens.EOL_COMMENT && spacing.toString().contains("minLineFeeds=0")) { + val isBeforeBlock = child2.getNode().getElementType() == JetNodeTypes.BLOCK || child2.getNode().getFirstChildNode()?.getElementType() == JetNodeTypes.BLOCK + val keepBlankLines = if (isBeforeBlock) 0 else codeStyleSettings.KEEP_BLANK_LINES_IN_CODE + return Spacing.createSpacing(0, 0, 1, true, keepBlankLines) + } return spacing } }