From 9d6ea3c0734dee439e90a65d702f1368008e4996 Mon Sep 17 00:00:00 2001 From: Dmitry Gridin Date: Wed, 10 Jun 2020 19:06:58 +0700 Subject: [PATCH] KotlinLikeLangLineIndentProvider: fix options for parentheses Part of #KT-22211 Part of #KT-39353 --- .../KotlinLikeLangLineIndentProvider.kt | 8 +++++++- ...ormanceTypingIndentationTestGenerated.java | 15 ++++++++++++++ .../HigherOrderFunction.after.kt | 9 +++++++++ .../HigherOrderFunction.kt | 7 +++++++ .../HigherOrderFunction2.after.inv.kt | 9 +++++++++ .../HigherOrderFunction2.after.kt | 9 +++++++++ .../HigherOrderFunction2.kt | 7 +++++++ .../HigherOrderFunction3.after.kt | 10 ++++++++++ .../HigherOrderFunction3.kt | 8 ++++++++ .../TypingIndentationTestBaseGenerated.java | 20 +++++++++++++++++++ 10 files changed, 101 insertions(+), 1 deletion(-) create mode 100644 idea/testData/indentationOnNewline/HigherOrderFunction.after.kt create mode 100644 idea/testData/indentationOnNewline/HigherOrderFunction.kt create mode 100644 idea/testData/indentationOnNewline/HigherOrderFunction2.after.inv.kt create mode 100644 idea/testData/indentationOnNewline/HigherOrderFunction2.after.kt create mode 100644 idea/testData/indentationOnNewline/HigherOrderFunction2.kt create mode 100644 idea/testData/indentationOnNewline/HigherOrderFunction3.after.kt create mode 100644 idea/testData/indentationOnNewline/HigherOrderFunction3.kt diff --git a/idea/line-indent-provider/src/org/jetbrains/kotlin/idea/formatter/lineIndent/KotlinLikeLangLineIndentProvider.kt b/idea/line-indent-provider/src/org/jetbrains/kotlin/idea/formatter/lineIndent/KotlinLikeLangLineIndentProvider.kt index 97bc11dda22..af1847aa8e4 100644 --- a/idea/line-indent-provider/src/org/jetbrains/kotlin/idea/formatter/lineIndent/KotlinLikeLangLineIndentProvider.kt +++ b/idea/line-indent-provider/src/org/jetbrains/kotlin/idea/formatter/lineIndent/KotlinLikeLangLineIndentProvider.kt @@ -274,8 +274,14 @@ abstract class KotlinLikeLangLineIndentProvider : JavaLikeLangLineIndentProvider private fun isSimilarToFunctionInvocation(leftParenthesis: SemanticEditorPosition): Boolean = with(leftParenthesis.copy()) { assert(isAt(LeftParenthesis)) - moveBeforeIgnoringWhiteSpaceOrComment() + + // `a()()()` + // ^ + while (moveBeforeParenthesesIfPossible()) { + // loop + } + // calls with types e.g. `test()` moveBeforeTypeParametersIfPossible() diff --git a/idea/performanceTests/test/org/jetbrains/kotlin/idea/perf/PerformanceTypingIndentationTestGenerated.java b/idea/performanceTests/test/org/jetbrains/kotlin/idea/perf/PerformanceTypingIndentationTestGenerated.java index 61e9f91fb4f..60234463b25 100644 --- a/idea/performanceTests/test/org/jetbrains/kotlin/idea/perf/PerformanceTypingIndentationTestGenerated.java +++ b/idea/performanceTests/test/org/jetbrains/kotlin/idea/perf/PerformanceTypingIndentationTestGenerated.java @@ -93,6 +93,21 @@ public class PerformanceTypingIndentationTestGenerated extends AbstractPerforman runTest("idea/testData/indentationOnNewline/FunctionBlock2.kt"); } + @TestMetadata("HigherOrderFunction.kt") + public void testHigherOrderFunction() throws Exception { + runTest("idea/testData/indentationOnNewline/HigherOrderFunction.kt"); + } + + @TestMetadata("HigherOrderFunction2.kt") + public void testHigherOrderFunction2() throws Exception { + runTest("idea/testData/indentationOnNewline/HigherOrderFunction2.kt"); + } + + @TestMetadata("HigherOrderFunction3.kt") + public void testHigherOrderFunction3() throws Exception { + runTest("idea/testData/indentationOnNewline/HigherOrderFunction3.kt"); + } + @TestMetadata("InDelegationListAfterColon.kt") public void testInDelegationListAfterColon() throws Exception { runTest("idea/testData/indentationOnNewline/InDelegationListAfterColon.kt"); diff --git a/idea/testData/indentationOnNewline/HigherOrderFunction.after.kt b/idea/testData/indentationOnNewline/HigherOrderFunction.after.kt new file mode 100644 index 00000000000..7461eae5115 --- /dev/null +++ b/idea/testData/indentationOnNewline/HigherOrderFunction.after.kt @@ -0,0 +1,9 @@ +fun a(): () -> () -> Unit = { { } } + +fun t() { + a()()( + + ) +} + +// SET_FALSE: ALIGN_MULTILINE_METHOD_BRACKETS \ No newline at end of file diff --git a/idea/testData/indentationOnNewline/HigherOrderFunction.kt b/idea/testData/indentationOnNewline/HigherOrderFunction.kt new file mode 100644 index 00000000000..e3d33b54cc6 --- /dev/null +++ b/idea/testData/indentationOnNewline/HigherOrderFunction.kt @@ -0,0 +1,7 @@ +fun a(): () -> () -> Unit = { { } } + +fun t() { + a()()() +} + +// SET_FALSE: ALIGN_MULTILINE_METHOD_BRACKETS \ No newline at end of file diff --git a/idea/testData/indentationOnNewline/HigherOrderFunction2.after.inv.kt b/idea/testData/indentationOnNewline/HigherOrderFunction2.after.inv.kt new file mode 100644 index 00000000000..b05a9bb6872 --- /dev/null +++ b/idea/testData/indentationOnNewline/HigherOrderFunction2.after.inv.kt @@ -0,0 +1,9 @@ +fun a(): () -> () -> Unit = { { } } + +fun t() { + a()()( + + ) +} + +// SET_FALSE: ALIGN_MULTILINE_BINARY_OPERATION diff --git a/idea/testData/indentationOnNewline/HigherOrderFunction2.after.kt b/idea/testData/indentationOnNewline/HigherOrderFunction2.after.kt new file mode 100644 index 00000000000..b05a9bb6872 --- /dev/null +++ b/idea/testData/indentationOnNewline/HigherOrderFunction2.after.kt @@ -0,0 +1,9 @@ +fun a(): () -> () -> Unit = { { } } + +fun t() { + a()()( + + ) +} + +// SET_FALSE: ALIGN_MULTILINE_BINARY_OPERATION diff --git a/idea/testData/indentationOnNewline/HigherOrderFunction2.kt b/idea/testData/indentationOnNewline/HigherOrderFunction2.kt new file mode 100644 index 00000000000..0e751133613 --- /dev/null +++ b/idea/testData/indentationOnNewline/HigherOrderFunction2.kt @@ -0,0 +1,7 @@ +fun a(): () -> () -> Unit = { { } } + +fun t() { + a()()() +} + +// SET_FALSE: ALIGN_MULTILINE_BINARY_OPERATION diff --git a/idea/testData/indentationOnNewline/HigherOrderFunction3.after.kt b/idea/testData/indentationOnNewline/HigherOrderFunction3.after.kt new file mode 100644 index 00000000000..1eb4b0c2d8d --- /dev/null +++ b/idea/testData/indentationOnNewline/HigherOrderFunction3.after.kt @@ -0,0 +1,10 @@ +fun a(): () -> () -> Unit = { { } } + +fun t() { + a()()( + + ) +} + +// SET_TRUE: ALIGN_MULTILINE_METHOD_BRACKETS +// IGNORE_FORMATTER \ No newline at end of file diff --git a/idea/testData/indentationOnNewline/HigherOrderFunction3.kt b/idea/testData/indentationOnNewline/HigherOrderFunction3.kt new file mode 100644 index 00000000000..27496e51298 --- /dev/null +++ b/idea/testData/indentationOnNewline/HigherOrderFunction3.kt @@ -0,0 +1,8 @@ +fun a(): () -> () -> Unit = { { } } + +fun t() { + a()()() +} + +// SET_TRUE: ALIGN_MULTILINE_METHOD_BRACKETS +// IGNORE_FORMATTER \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/formatter/TypingIndentationTestBaseGenerated.java b/idea/tests/org/jetbrains/kotlin/formatter/TypingIndentationTestBaseGenerated.java index 2a7465c07a2..a70c6daa18b 100644 --- a/idea/tests/org/jetbrains/kotlin/formatter/TypingIndentationTestBaseGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/formatter/TypingIndentationTestBaseGenerated.java @@ -95,6 +95,21 @@ public class TypingIndentationTestBaseGenerated extends AbstractTypingIndentatio runTest("idea/testData/indentationOnNewline/FunctionBlock2.after.kt"); } + @TestMetadata("HigherOrderFunction.after.kt") + public void testHigherOrderFunction() throws Exception { + runTest("idea/testData/indentationOnNewline/HigherOrderFunction.after.kt"); + } + + @TestMetadata("HigherOrderFunction2.after.kt") + public void testHigherOrderFunction2() throws Exception { + runTest("idea/testData/indentationOnNewline/HigherOrderFunction2.after.kt"); + } + + @TestMetadata("HigherOrderFunction3.after.kt") + public void testHigherOrderFunction3() throws Exception { + runTest("idea/testData/indentationOnNewline/HigherOrderFunction3.after.kt"); + } + @TestMetadata("InDelegationListAfterColon.after.kt") public void testInDelegationListAfterColon() throws Exception { runTest("idea/testData/indentationOnNewline/InDelegationListAfterColon.after.kt"); @@ -1157,6 +1172,11 @@ public class TypingIndentationTestBaseGenerated extends AbstractTypingIndentatio runTest("idea/testData/indentationOnNewline/ArgumentListNormalIndent.after.inv.kt"); } + @TestMetadata("HigherOrderFunction2.after.inv.kt") + public void testHigherOrderFunction2() throws Exception { + runTest("idea/testData/indentationOnNewline/HigherOrderFunction2.after.inv.kt"); + } + @TestMetadata("InDelegationListAfterColon.after.inv.kt") public void testInDelegationListAfterColon() throws Exception { runTest("idea/testData/indentationOnNewline/InDelegationListAfterColon.after.inv.kt");