From b4898e4043c6b8a03ccae7bd5fb1879e2d28a1a2 Mon Sep 17 00:00:00 2001 From: Dmitry Gridin Date: Tue, 3 Mar 2020 14:47:21 +0700 Subject: [PATCH] `Put arguments/parameters on separate/one line` should update trailing comma #KT-36411 Fixed --- .../intentions/ChopParameterListIntention.kt | 9 ++++----- .../intentions/JoinParameterListIntention.kt | 17 ++++++++++++---- .../threeArgsWithTrailingComma.kt | 8 ++++++++ .../threeArgsWithTrailingComma.kt.after | 12 +++++++++++ .../hasSomeLineBreaks1WithTrailingComma.kt | 5 +++++ ...sSomeLineBreaks1WithTrailingComma.kt.after | 8 ++++++++ .../hasLineBreaksWithTrailingComma.kt | 12 +++++++++++ .../hasLineBreaksWithTrailingComma.kt.after | 8 ++++++++ .../hasLineBreaksWithTrailingComma.kt | 8 ++++++++ .../hasLineBreaksWithTrailingComma.kt.after | 4 ++++ .../intentions/IntentionTestGenerated.java | 20 +++++++++++++++++++ 11 files changed, 102 insertions(+), 9 deletions(-) create mode 100644 idea/testData/intentions/chop/argumentList/threeArgsWithTrailingComma.kt create mode 100644 idea/testData/intentions/chop/argumentList/threeArgsWithTrailingComma.kt.after create mode 100644 idea/testData/intentions/chop/parameterList/hasSomeLineBreaks1WithTrailingComma.kt create mode 100644 idea/testData/intentions/chop/parameterList/hasSomeLineBreaks1WithTrailingComma.kt.after create mode 100644 idea/testData/intentions/joinArgumentList/hasLineBreaksWithTrailingComma.kt create mode 100644 idea/testData/intentions/joinArgumentList/hasLineBreaksWithTrailingComma.kt.after create mode 100644 idea/testData/intentions/joinParameterList/hasLineBreaksWithTrailingComma.kt create mode 100644 idea/testData/intentions/joinParameterList/hasLineBreaksWithTrailingComma.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 05e3a3451bc..3c1aaf90dee 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/ChopParameterListIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/ChopParameterListIntention.kt @@ -24,6 +24,7 @@ import com.intellij.psi.util.PsiTreeUtil import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.allChildren +import org.jetbrains.kotlin.psi.psiUtil.createSmartPointer import org.jetbrains.kotlin.psi.psiUtil.siblings import org.jetbrains.kotlin.psi.psiUtil.startOffset @@ -42,8 +43,8 @@ abstract class AbstractChopListIntention + nextBreak(tElement)?.let { document.replaceString(it.startOffset, it.endOffset, " ") } } + prevBreak(elements.first())?.let { document.deleteString(it.startOffset, it.endOffset) } + + val project = element.project + val documentManager = PsiDocumentManager.getInstance(project) + documentManager.commitDocument(document) + pointer.element?.let { CodeStyleManager.getInstance(project).reformat(it) } } } diff --git a/idea/testData/intentions/chop/argumentList/threeArgsWithTrailingComma.kt b/idea/testData/intentions/chop/argumentList/threeArgsWithTrailingComma.kt new file mode 100644 index 00000000000..f023c58f376 --- /dev/null +++ b/idea/testData/intentions/chop/argumentList/threeArgsWithTrailingComma.kt @@ -0,0 +1,8 @@ +// SET_TRUE: ALLOW_TRAILING_COMMA +// REGISTRY: kotlin.formatter.allowTrailingCommaOnCallSite true + +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/threeArgsWithTrailingComma.kt.after b/idea/testData/intentions/chop/argumentList/threeArgsWithTrailingComma.kt.after new file mode 100644 index 00000000000..de596616291 --- /dev/null +++ b/idea/testData/intentions/chop/argumentList/threeArgsWithTrailingComma.kt.after @@ -0,0 +1,12 @@ +// SET_TRUE: ALLOW_TRAILING_COMMA +// REGISTRY: kotlin.formatter.allowTrailingCommaOnCallSite true + +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/parameterList/hasSomeLineBreaks1WithTrailingComma.kt b/idea/testData/intentions/chop/parameterList/hasSomeLineBreaks1WithTrailingComma.kt new file mode 100644 index 00000000000..7a80f694ce9 --- /dev/null +++ b/idea/testData/intentions/chop/parameterList/hasSomeLineBreaks1WithTrailingComma.kt @@ -0,0 +1,5 @@ +// SET_TRUE: ALLOW_TRAILING_COMMA + +fun foo(p: Int, c: Char, + b: Boolean) { +} \ No newline at end of file diff --git a/idea/testData/intentions/chop/parameterList/hasSomeLineBreaks1WithTrailingComma.kt.after b/idea/testData/intentions/chop/parameterList/hasSomeLineBreaks1WithTrailingComma.kt.after new file mode 100644 index 00000000000..3a0e640eb48 --- /dev/null +++ b/idea/testData/intentions/chop/parameterList/hasSomeLineBreaks1WithTrailingComma.kt.after @@ -0,0 +1,8 @@ +// SET_TRUE: ALLOW_TRAILING_COMMA + +fun foo( + p: Int, + c: Char, + b: Boolean, +) { +} \ No newline at end of file diff --git a/idea/testData/intentions/joinArgumentList/hasLineBreaksWithTrailingComma.kt b/idea/testData/intentions/joinArgumentList/hasLineBreaksWithTrailingComma.kt new file mode 100644 index 00000000000..6e489518a05 --- /dev/null +++ b/idea/testData/intentions/joinArgumentList/hasLineBreaksWithTrailingComma.kt @@ -0,0 +1,12 @@ +// INTENTION_TEXT: "Put arguments on one line" +// REGISTRY: kotlin.formatter.allowTrailingCommaOnCallSite true + +fun foo(a: Int = 1, b: Int = 1, c: Int = 1) {} + +fun bar(a: Int, b: Int, c: Int) { + foo( + a, + b, + c, + ) +} \ No newline at end of file diff --git a/idea/testData/intentions/joinArgumentList/hasLineBreaksWithTrailingComma.kt.after b/idea/testData/intentions/joinArgumentList/hasLineBreaksWithTrailingComma.kt.after new file mode 100644 index 00000000000..3de11a8b2a8 --- /dev/null +++ b/idea/testData/intentions/joinArgumentList/hasLineBreaksWithTrailingComma.kt.after @@ -0,0 +1,8 @@ +// INTENTION_TEXT: "Put arguments on one line" +// REGISTRY: kotlin.formatter.allowTrailingCommaOnCallSite true + +fun foo(a: Int = 1, b: Int = 1, c: Int = 1) {} + +fun bar(a: Int, b: Int, c: Int) { + foo(a, b, c) +} \ No newline at end of file diff --git a/idea/testData/intentions/joinParameterList/hasLineBreaksWithTrailingComma.kt b/idea/testData/intentions/joinParameterList/hasLineBreaksWithTrailingComma.kt new file mode 100644 index 00000000000..0b54373c4f0 --- /dev/null +++ b/idea/testData/intentions/joinParameterList/hasLineBreaksWithTrailingComma.kt @@ -0,0 +1,8 @@ +// INTENTION_TEXT: "Put parameters on one line" +// SET_TRUE: ALLOW_TRAILING_COMMA + +fun test( + a: Int, + b: Int, + c: Int, +) {} \ No newline at end of file diff --git a/idea/testData/intentions/joinParameterList/hasLineBreaksWithTrailingComma.kt.after b/idea/testData/intentions/joinParameterList/hasLineBreaksWithTrailingComma.kt.after new file mode 100644 index 00000000000..7684c2eb129 --- /dev/null +++ b/idea/testData/intentions/joinParameterList/hasLineBreaksWithTrailingComma.kt.after @@ -0,0 +1,4 @@ +// INTENTION_TEXT: "Put parameters on one line" +// SET_TRUE: ALLOW_TRAILING_COMMA + +fun test(a: Int, b: Int, c: Int) {} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java index 875627d5a1a..cdfda043ad3 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java @@ -3609,6 +3609,11 @@ public class IntentionTestGenerated extends AbstractIntentionTest { public void testThreeArgs() throws Exception { runTest("idea/testData/intentions/chop/argumentList/threeArgs.kt"); } + + @TestMetadata("threeArgsWithTrailingComma.kt") + public void testThreeArgsWithTrailingComma() throws Exception { + runTest("idea/testData/intentions/chop/argumentList/threeArgsWithTrailingComma.kt"); + } } @TestMetadata("idea/testData/intentions/chop/parameterList") @@ -3633,6 +3638,11 @@ public class IntentionTestGenerated extends AbstractIntentionTest { runTest("idea/testData/intentions/chop/parameterList/hasSomeLineBreaks1.kt"); } + @TestMetadata("hasSomeLineBreaks1WithTrailingComma.kt") + public void testHasSomeLineBreaks1WithTrailingComma() throws Exception { + runTest("idea/testData/intentions/chop/parameterList/hasSomeLineBreaks1WithTrailingComma.kt"); + } + @TestMetadata("hasSomeLineBreaks2.kt") public void testHasSomeLineBreaks2() throws Exception { runTest("idea/testData/intentions/chop/parameterList/hasSomeLineBreaks2.kt"); @@ -10001,6 +10011,11 @@ public class IntentionTestGenerated extends AbstractIntentionTest { runTest("idea/testData/intentions/joinArgumentList/hasLineBreaks.kt"); } + @TestMetadata("hasLineBreaksWithTrailingComma.kt") + public void testHasLineBreaksWithTrailingComma() throws Exception { + runTest("idea/testData/intentions/joinArgumentList/hasLineBreaksWithTrailingComma.kt"); + } + @TestMetadata("noArg.kt") public void testNoArg() throws Exception { runTest("idea/testData/intentions/joinArgumentList/noArg.kt"); @@ -10197,6 +10212,11 @@ public class IntentionTestGenerated extends AbstractIntentionTest { runTest("idea/testData/intentions/joinParameterList/hasLineBreaks.kt"); } + @TestMetadata("hasLineBreaksWithTrailingComma.kt") + public void testHasLineBreaksWithTrailingComma() throws Exception { + runTest("idea/testData/intentions/joinParameterList/hasLineBreaksWithTrailingComma.kt"); + } + @TestMetadata("noLineBreak.kt") public void testNoLineBreak() throws Exception { runTest("idea/testData/intentions/joinParameterList/noLineBreak.kt");