From 7555bb6c3cdb299b4c46697029b3edca374ba013 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Tue, 18 Jul 2017 18:49:36 +0200 Subject: [PATCH] Support formatting of 'where' clauses #KT-14083 Fixed --- .../kotlin/idea/formatter/KotlinCommonBlock.kt | 10 +++++++++- idea/testData/formatter/WhereClause.after.kt | 12 ++++++++++++ idea/testData/formatter/WhereClause.kt | 12 ++++++++++++ .../kotlin/formatter/FormatterTestGenerated.java | 6 ++++++ 4 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 idea/testData/formatter/WhereClause.after.kt create mode 100644 idea/testData/formatter/WhereClause.kt diff --git a/idea/formatter/src/org/jetbrains/kotlin/idea/formatter/KotlinCommonBlock.kt b/idea/formatter/src/org/jetbrains/kotlin/idea/formatter/KotlinCommonBlock.kt index 8eded2bce7a..d39a0432bf9 100644 --- a/idea/formatter/src/org/jetbrains/kotlin/idea/formatter/KotlinCommonBlock.kt +++ b/idea/formatter/src/org/jetbrains/kotlin/idea/formatter/KotlinCommonBlock.kt @@ -263,6 +263,9 @@ abstract class KotlinCommonBlock( } } + parentType == KtNodeTypes.TYPE_CONSTRAINT_LIST -> + createAlignmentStrategy(true, getAlignment()) + else -> getNullAlignmentStrategy() } @@ -505,7 +508,12 @@ private val INDENT_RULES = arrayOf( Indent.getContinuationIndent() else Indent.getNormalIndent() - }) + }, + + strategy("Where clause") + .within(KtNodeTypes.CLASS, KtNodeTypes.FUN, KtNodeTypes.PROPERTY) + .forType(KtTokens.WHERE_KEYWORD) + .set(Indent.getContinuationIndent())) private fun getOperationType(node: ASTNode): IElementType? = node.findChildByType(KtNodeTypes.OPERATION_REFERENCE)?.firstChildNode?.elementType diff --git a/idea/testData/formatter/WhereClause.after.kt b/idea/testData/formatter/WhereClause.after.kt new file mode 100644 index 00000000000..09a8c621338 --- /dev/null +++ b/idea/testData/formatter/WhereClause.after.kt @@ -0,0 +1,12 @@ +abstract class RustNavigationContributorBase protected constructor( + private val indexKey: StubIndexKey, + private val clazz: Class +) : ChooseByNameContributor, GotoClassContributor + where T : NavigationItem, + T : RustNamedElement { +} + +fun foo() + where T : NavigationItem, + T : RustNamedElement { +} diff --git a/idea/testData/formatter/WhereClause.kt b/idea/testData/formatter/WhereClause.kt new file mode 100644 index 00000000000..e26bc36a92a --- /dev/null +++ b/idea/testData/formatter/WhereClause.kt @@ -0,0 +1,12 @@ +abstract class RustNavigationContributorBase protected constructor( + private val indexKey: StubIndexKey, + private val clazz: Class +) : ChooseByNameContributor, GotoClassContributor +where T : NavigationItem, +T : RustNamedElement { +} + +fun foo() +where T : NavigationItem, +T : RustNamedElement { +} diff --git a/idea/tests/org/jetbrains/kotlin/formatter/FormatterTestGenerated.java b/idea/tests/org/jetbrains/kotlin/formatter/FormatterTestGenerated.java index 722ca585a57..f9686696099 100644 --- a/idea/tests/org/jetbrains/kotlin/formatter/FormatterTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/formatter/FormatterTestGenerated.java @@ -842,6 +842,12 @@ public class FormatterTestGenerated extends AbstractFormatterTest { doTest(fileName); } + @TestMetadata("WhereClause.after.kt") + public void testWhereClause() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/formatter/WhereClause.after.kt"); + doTest(fileName); + } + @TestMetadata("WhileLineBreak.after.kt") public void testWhileLineBreak() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/formatter/WhileLineBreak.after.kt");