From a492fe77570d63d7d4f8fc734975177ee3c277a5 Mon Sep 17 00:00:00 2001 From: Toshiaki Kameyama Date: Fri, 29 Nov 2019 10:09:53 +0900 Subject: [PATCH] "Put arguments/parameters on separate lines": respect code style settings #KT-20420 Fixed --- .../intentions/ChopParameterListIntention.kt | 36 +++++++++++++++++-- .../chop/argumentList/leftParOnSameLine.kt | 7 ++++ .../argumentList/leftParOnSameLine.kt.after | 10 ++++++ .../chop/argumentList/parOnSameLine.kt | 7 ++++ .../chop/argumentList/parOnSameLine.kt.after | 9 +++++ .../chop/argumentList/rightParOnSameLine.kt | 7 ++++ .../argumentList/rightParOnSameLine.kt.after | 10 ++++++ .../intentions/chop/argumentList/threeArgs.kt | 2 ++ .../chop/argumentList/threeArgs.kt.after | 2 ++ .../chop/parameterList/hasSomeLineBreaks1.kt | 2 ++ .../parameterList/hasSomeLineBreaks1.kt.after | 2 ++ .../chop/parameterList/leftParOnSameLine.kt | 4 +++ .../parameterList/leftParOnSameLine.kt.after | 7 ++++ .../chop/parameterList/parOnSameLine.kt | 4 +++ .../chop/parameterList/parOnSameLine.kt.after | 6 ++++ .../chop/parameterList/rightParOnSameLine.kt | 4 +++ .../parameterList/rightParOnSameLine.kt.after | 7 ++++ .../chop/parameterList/threeParameters.kt | 2 ++ .../parameterList/threeParameters.kt.after | 2 ++ .../chop/parameterList/twoParameters.kt | 2 ++ .../chop/parameterList/twoParameters.kt.after | 2 ++ .../intentions/IntentionTestGenerated.java | 30 ++++++++++++++++ 22 files changed, 161 insertions(+), 3 deletions(-) create mode 100644 idea/testData/intentions/chop/argumentList/leftParOnSameLine.kt create mode 100644 idea/testData/intentions/chop/argumentList/leftParOnSameLine.kt.after create mode 100644 idea/testData/intentions/chop/argumentList/parOnSameLine.kt create mode 100644 idea/testData/intentions/chop/argumentList/parOnSameLine.kt.after create mode 100644 idea/testData/intentions/chop/argumentList/rightParOnSameLine.kt create mode 100644 idea/testData/intentions/chop/argumentList/rightParOnSameLine.kt.after create mode 100644 idea/testData/intentions/chop/parameterList/leftParOnSameLine.kt create mode 100644 idea/testData/intentions/chop/parameterList/leftParOnSameLine.kt.after create mode 100644 idea/testData/intentions/chop/parameterList/parOnSameLine.kt create mode 100644 idea/testData/intentions/chop/parameterList/parOnSameLine.kt.after create mode 100644 idea/testData/intentions/chop/parameterList/rightParOnSameLine.kt create mode 100644 idea/testData/intentions/chop/parameterList/rightParOnSameLine.kt.after diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/ChopParameterListIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/ChopParameterListIntention.kt index 6cdb7ccab50..0dd9ad699c1 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/ChopParameterListIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/ChopParameterListIntention.kt @@ -5,11 +5,14 @@ package org.jetbrains.kotlin.idea.intentions +import com.intellij.application.options.CodeStyle import com.intellij.openapi.editor.Editor import com.intellij.psi.PsiDocumentManager import com.intellij.psi.PsiWhiteSpace import com.intellij.psi.codeStyle.CodeStyleManager +import com.intellij.psi.codeStyle.CommonCodeStyleSettings import org.jetbrains.kotlin.idea.KotlinBundle +import org.jetbrains.kotlin.idea.formatter.kotlinCommonSettings import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.allChildren @@ -22,6 +25,11 @@ abstract class AbstractChopListIntention, textGetter: () -> String ) : SelfTargetingOffsetIndependentIntention(listClass, textGetter) { + + open fun leftParOnNewLine(commonCodeStyleSettings: CommonCodeStyleSettings): Boolean = false + + open fun rightParOnNewLine(commonCodeStyleSettings: CommonCodeStyleSettings): Boolean = false + override fun isApplicableTo(element: TList): Boolean { val elements = element.elements() if (elements.size <= 1) return false @@ -34,12 +42,18 @@ abstract class AbstractChopListIntention( KtValueArgumentList::class.java, KtValueArgument::class.java, KotlinBundle.lazyMessage("put.arguments.on.separate.lines") -) \ No newline at end of file +) { + override fun leftParOnNewLine(commonCodeStyleSettings: CommonCodeStyleSettings): Boolean { + return commonCodeStyleSettings.CALL_PARAMETERS_LPAREN_ON_NEXT_LINE + } + + override fun rightParOnNewLine(commonCodeStyleSettings: CommonCodeStyleSettings): Boolean { + return commonCodeStyleSettings.CALL_PARAMETERS_RPAREN_ON_NEXT_LINE + } +} diff --git a/idea/testData/intentions/chop/argumentList/leftParOnSameLine.kt b/idea/testData/intentions/chop/argumentList/leftParOnSameLine.kt new file mode 100644 index 00000000000..f9866453501 --- /dev/null +++ b/idea/testData/intentions/chop/argumentList/leftParOnSameLine.kt @@ -0,0 +1,7 @@ +// SET_FALSE: CALL_PARAMETERS_LPAREN_ON_NEXT_LINE +// SET_TRUE: CALL_PARAMETERS_RPAREN_ON_NEXT_LINE +fun f() { + foo(1, "a", 2) +} + +fun foo(p1: Int, p2: String, p3: Int){} \ No newline at end of file diff --git a/idea/testData/intentions/chop/argumentList/leftParOnSameLine.kt.after b/idea/testData/intentions/chop/argumentList/leftParOnSameLine.kt.after new file mode 100644 index 00000000000..cfc116556e2 --- /dev/null +++ b/idea/testData/intentions/chop/argumentList/leftParOnSameLine.kt.after @@ -0,0 +1,10 @@ +// SET_FALSE: CALL_PARAMETERS_LPAREN_ON_NEXT_LINE +// SET_TRUE: CALL_PARAMETERS_RPAREN_ON_NEXT_LINE +fun f() { + foo(1, + "a", + 2 + ) +} + +fun foo(p1: Int, p2: String, p3: Int){} \ No newline at end of file diff --git a/idea/testData/intentions/chop/argumentList/parOnSameLine.kt b/idea/testData/intentions/chop/argumentList/parOnSameLine.kt new file mode 100644 index 00000000000..efe8933b8f2 --- /dev/null +++ b/idea/testData/intentions/chop/argumentList/parOnSameLine.kt @@ -0,0 +1,7 @@ +// SET_FALSE: CALL_PARAMETERS_LPAREN_ON_NEXT_LINE +// SET_FALSE: CALL_PARAMETERS_RPAREN_ON_NEXT_LINE +fun f() { + foo(1, "a", 2) +} + +fun foo(p1: Int, p2: String, p3: Int){} \ No newline at end of file diff --git a/idea/testData/intentions/chop/argumentList/parOnSameLine.kt.after b/idea/testData/intentions/chop/argumentList/parOnSameLine.kt.after new file mode 100644 index 00000000000..81476c61fb9 --- /dev/null +++ b/idea/testData/intentions/chop/argumentList/parOnSameLine.kt.after @@ -0,0 +1,9 @@ +// SET_FALSE: CALL_PARAMETERS_LPAREN_ON_NEXT_LINE +// SET_FALSE: CALL_PARAMETERS_RPAREN_ON_NEXT_LINE +fun f() { + foo(1, + "a", + 2) +} + +fun foo(p1: Int, p2: String, p3: Int){} \ No newline at end of file diff --git a/idea/testData/intentions/chop/argumentList/rightParOnSameLine.kt b/idea/testData/intentions/chop/argumentList/rightParOnSameLine.kt new file mode 100644 index 00000000000..83731ae8f2b --- /dev/null +++ b/idea/testData/intentions/chop/argumentList/rightParOnSameLine.kt @@ -0,0 +1,7 @@ +// SET_TRUE: CALL_PARAMETERS_LPAREN_ON_NEXT_LINE +// SET_FALSE: CALL_PARAMETERS_RPAREN_ON_NEXT_LINE +fun f() { + foo(1, "a", 2) +} + +fun foo(p1: Int, p2: String, p3: Int){} \ No newline at end of file diff --git a/idea/testData/intentions/chop/argumentList/rightParOnSameLine.kt.after b/idea/testData/intentions/chop/argumentList/rightParOnSameLine.kt.after new file mode 100644 index 00000000000..346ce5d6136 --- /dev/null +++ b/idea/testData/intentions/chop/argumentList/rightParOnSameLine.kt.after @@ -0,0 +1,10 @@ +// SET_TRUE: CALL_PARAMETERS_LPAREN_ON_NEXT_LINE +// SET_FALSE: CALL_PARAMETERS_RPAREN_ON_NEXT_LINE +fun f() { + foo( + 1, + "a", + 2) +} + +fun foo(p1: Int, p2: String, p3: Int){} \ No newline at end of file diff --git a/idea/testData/intentions/chop/argumentList/threeArgs.kt b/idea/testData/intentions/chop/argumentList/threeArgs.kt index 1c14efec0ed..be493b8da2e 100644 --- a/idea/testData/intentions/chop/argumentList/threeArgs.kt +++ b/idea/testData/intentions/chop/argumentList/threeArgs.kt @@ -1,3 +1,5 @@ +// SET_TRUE: CALL_PARAMETERS_LPAREN_ON_NEXT_LINE +// SET_TRUE: CALL_PARAMETERS_RPAREN_ON_NEXT_LINE fun f() { foo(1, "a", 2) } diff --git a/idea/testData/intentions/chop/argumentList/threeArgs.kt.after b/idea/testData/intentions/chop/argumentList/threeArgs.kt.after index 489cbdf0b98..04ea3a2ff63 100644 --- a/idea/testData/intentions/chop/argumentList/threeArgs.kt.after +++ b/idea/testData/intentions/chop/argumentList/threeArgs.kt.after @@ -1,3 +1,5 @@ +// SET_TRUE: CALL_PARAMETERS_LPAREN_ON_NEXT_LINE +// SET_TRUE: CALL_PARAMETERS_RPAREN_ON_NEXT_LINE fun f() { foo( 1, diff --git a/idea/testData/intentions/chop/parameterList/hasSomeLineBreaks1.kt b/idea/testData/intentions/chop/parameterList/hasSomeLineBreaks1.kt index 3c52da5252f..23b2da00508 100644 --- a/idea/testData/intentions/chop/parameterList/hasSomeLineBreaks1.kt +++ b/idea/testData/intentions/chop/parameterList/hasSomeLineBreaks1.kt @@ -1,3 +1,5 @@ +// SET_TRUE: METHOD_PARAMETERS_LPAREN_ON_NEXT_LINE +// SET_TRUE: METHOD_PARAMETERS_RPAREN_ON_NEXT_LINE fun foo(p: Int, c: Char, b: Boolean) { } \ No newline at end of file diff --git a/idea/testData/intentions/chop/parameterList/hasSomeLineBreaks1.kt.after b/idea/testData/intentions/chop/parameterList/hasSomeLineBreaks1.kt.after index 036da90597e..c2f447676f8 100644 --- a/idea/testData/intentions/chop/parameterList/hasSomeLineBreaks1.kt.after +++ b/idea/testData/intentions/chop/parameterList/hasSomeLineBreaks1.kt.after @@ -1,3 +1,5 @@ +// SET_TRUE: METHOD_PARAMETERS_LPAREN_ON_NEXT_LINE +// SET_TRUE: METHOD_PARAMETERS_RPAREN_ON_NEXT_LINE fun foo( p: Int, c: Char, diff --git a/idea/testData/intentions/chop/parameterList/leftParOnSameLine.kt b/idea/testData/intentions/chop/parameterList/leftParOnSameLine.kt new file mode 100644 index 00000000000..62c4b944aed --- /dev/null +++ b/idea/testData/intentions/chop/parameterList/leftParOnSameLine.kt @@ -0,0 +1,4 @@ +// SET_FALSE: METHOD_PARAMETERS_LPAREN_ON_NEXT_LINE +// SET_TRUE: METHOD_PARAMETERS_RPAREN_ON_NEXT_LINE +fun foo(p: Int, c: Char, b: Boolean) { +} \ No newline at end of file diff --git a/idea/testData/intentions/chop/parameterList/leftParOnSameLine.kt.after b/idea/testData/intentions/chop/parameterList/leftParOnSameLine.kt.after new file mode 100644 index 00000000000..bb9d91a767d --- /dev/null +++ b/idea/testData/intentions/chop/parameterList/leftParOnSameLine.kt.after @@ -0,0 +1,7 @@ +// SET_FALSE: METHOD_PARAMETERS_LPAREN_ON_NEXT_LINE +// SET_TRUE: METHOD_PARAMETERS_RPAREN_ON_NEXT_LINE +fun foo(p: Int, + c: Char, + b: Boolean +) { +} \ No newline at end of file diff --git a/idea/testData/intentions/chop/parameterList/parOnSameLine.kt b/idea/testData/intentions/chop/parameterList/parOnSameLine.kt new file mode 100644 index 00000000000..62de1356b8c --- /dev/null +++ b/idea/testData/intentions/chop/parameterList/parOnSameLine.kt @@ -0,0 +1,4 @@ +// SET_FALSE: METHOD_PARAMETERS_LPAREN_ON_NEXT_LINE +// SET_FALSE: METHOD_PARAMETERS_RPAREN_ON_NEXT_LINE +fun foo(p: Int, c: Char, b: Boolean) { +} \ No newline at end of file diff --git a/idea/testData/intentions/chop/parameterList/parOnSameLine.kt.after b/idea/testData/intentions/chop/parameterList/parOnSameLine.kt.after new file mode 100644 index 00000000000..34aaf0c23b7 --- /dev/null +++ b/idea/testData/intentions/chop/parameterList/parOnSameLine.kt.after @@ -0,0 +1,6 @@ +// SET_FALSE: METHOD_PARAMETERS_LPAREN_ON_NEXT_LINE +// SET_FALSE: METHOD_PARAMETERS_RPAREN_ON_NEXT_LINE +fun foo(p: Int, + c: Char, + b: Boolean) { +} \ No newline at end of file diff --git a/idea/testData/intentions/chop/parameterList/rightParOnSameLine.kt b/idea/testData/intentions/chop/parameterList/rightParOnSameLine.kt new file mode 100644 index 00000000000..92c15bb4798 --- /dev/null +++ b/idea/testData/intentions/chop/parameterList/rightParOnSameLine.kt @@ -0,0 +1,4 @@ +// SET_TRUE: METHOD_PARAMETERS_LPAREN_ON_NEXT_LINE +// SET_FALSE: METHOD_PARAMETERS_RPAREN_ON_NEXT_LINE +fun foo(p: Int, c: Char, b: Boolean) { +} \ No newline at end of file diff --git a/idea/testData/intentions/chop/parameterList/rightParOnSameLine.kt.after b/idea/testData/intentions/chop/parameterList/rightParOnSameLine.kt.after new file mode 100644 index 00000000000..f262efbcda6 --- /dev/null +++ b/idea/testData/intentions/chop/parameterList/rightParOnSameLine.kt.after @@ -0,0 +1,7 @@ +// SET_TRUE: METHOD_PARAMETERS_LPAREN_ON_NEXT_LINE +// SET_FALSE: METHOD_PARAMETERS_RPAREN_ON_NEXT_LINE +fun foo( + p: Int, + c: Char, + b: Boolean) { +} \ No newline at end of file diff --git a/idea/testData/intentions/chop/parameterList/threeParameters.kt b/idea/testData/intentions/chop/parameterList/threeParameters.kt index 230344b216e..89ea3b7a6a0 100644 --- a/idea/testData/intentions/chop/parameterList/threeParameters.kt +++ b/idea/testData/intentions/chop/parameterList/threeParameters.kt @@ -1,2 +1,4 @@ +// SET_TRUE: METHOD_PARAMETERS_LPAREN_ON_NEXT_LINE +// SET_TRUE: METHOD_PARAMETERS_RPAREN_ON_NEXT_LINE fun foo(p: Int, c: Char, b: Boolean) { } \ No newline at end of file diff --git a/idea/testData/intentions/chop/parameterList/threeParameters.kt.after b/idea/testData/intentions/chop/parameterList/threeParameters.kt.after index 036da90597e..c2f447676f8 100644 --- a/idea/testData/intentions/chop/parameterList/threeParameters.kt.after +++ b/idea/testData/intentions/chop/parameterList/threeParameters.kt.after @@ -1,3 +1,5 @@ +// SET_TRUE: METHOD_PARAMETERS_LPAREN_ON_NEXT_LINE +// SET_TRUE: METHOD_PARAMETERS_RPAREN_ON_NEXT_LINE fun foo( p: Int, c: Char, diff --git a/idea/testData/intentions/chop/parameterList/twoParameters.kt b/idea/testData/intentions/chop/parameterList/twoParameters.kt index caf2a4172e4..7b59c9d447a 100644 --- a/idea/testData/intentions/chop/parameterList/twoParameters.kt +++ b/idea/testData/intentions/chop/parameterList/twoParameters.kt @@ -1,2 +1,4 @@ +// SET_TRUE: METHOD_PARAMETERS_LPAREN_ON_NEXT_LINE +// SET_TRUE: METHOD_PARAMETERS_RPAREN_ON_NEXT_LINE fun foo(p: Int, c: Char) { } \ No newline at end of file diff --git a/idea/testData/intentions/chop/parameterList/twoParameters.kt.after b/idea/testData/intentions/chop/parameterList/twoParameters.kt.after index d35cc3b2f12..74a34b3bd85 100644 --- a/idea/testData/intentions/chop/parameterList/twoParameters.kt.after +++ b/idea/testData/intentions/chop/parameterList/twoParameters.kt.after @@ -1,3 +1,5 @@ +// SET_TRUE: METHOD_PARAMETERS_LPAREN_ON_NEXT_LINE +// SET_TRUE: METHOD_PARAMETERS_RPAREN_ON_NEXT_LINE fun foo( p: Int, c: Char diff --git a/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java index 3023cd5673f..e85a46f0d9b 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java @@ -3743,6 +3743,21 @@ public class IntentionTestGenerated extends AbstractIntentionTest { KotlinTestUtils.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("idea/testData/intentions/chop/argumentList"), Pattern.compile("^([\\w\\-_]+)\\.(kt|kts)$"), null, true); } + @TestMetadata("leftParOnSameLine.kt") + public void testLeftParOnSameLine() throws Exception { + runTest("idea/testData/intentions/chop/argumentList/leftParOnSameLine.kt"); + } + + @TestMetadata("parOnSameLine.kt") + public void testParOnSameLine() throws Exception { + runTest("idea/testData/intentions/chop/argumentList/parOnSameLine.kt"); + } + + @TestMetadata("rightParOnSameLine.kt") + public void testRightParOnSameLine() throws Exception { + runTest("idea/testData/intentions/chop/argumentList/rightParOnSameLine.kt"); + } + @TestMetadata("threeArgs.kt") public void testThreeArgs() throws Exception { runTest("idea/testData/intentions/chop/argumentList/threeArgs.kt"); @@ -3786,11 +3801,26 @@ public class IntentionTestGenerated extends AbstractIntentionTest { runTest("idea/testData/intentions/chop/parameterList/hasSomeLineBreaks2.kt"); } + @TestMetadata("leftParOnSameLine.kt") + public void testLeftParOnSameLine() throws Exception { + runTest("idea/testData/intentions/chop/parameterList/leftParOnSameLine.kt"); + } + @TestMetadata("oneParameter.kt") public void testOneParameter() throws Exception { runTest("idea/testData/intentions/chop/parameterList/oneParameter.kt"); } + @TestMetadata("parOnSameLine.kt") + public void testParOnSameLine() throws Exception { + runTest("idea/testData/intentions/chop/parameterList/parOnSameLine.kt"); + } + + @TestMetadata("rightParOnSameLine.kt") + public void testRightParOnSameLine() throws Exception { + runTest("idea/testData/intentions/chop/parameterList/rightParOnSameLine.kt"); + } + @TestMetadata("threeParameters.kt") public void testThreeParameters() throws Exception { runTest("idea/testData/intentions/chop/parameterList/threeParameters.kt");