From e564057b6da1e6f57b713688e74bd20d1df7a5ea Mon Sep 17 00:00:00 2001 From: Chao Zhang Date: Sat, 17 Sep 2022 14:53:26 -0700 Subject: [PATCH] Upgrade ktlint to 0.47.1 --- .../detekt/formatting/KtLintMultiRule.kt | 6 +- .../wrappers/TrailingCommaOnCallSite.kt | 27 +++++ ...a.kt => TrailingCommaOnDeclarationSite.kt} | 16 +-- ...Spec.kt => TrailingCommaOnCallSiteSpec.kt} | 27 +++-- .../TrailingCommaOnDeclarationSiteSpec.kt | 112 ++++++++++++++++++ gradle/libs.versions.toml | 2 +- 6 files changed, 164 insertions(+), 26 deletions(-) create mode 100644 detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/TrailingCommaOnCallSite.kt rename detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/{TrailingComma.kt => TrailingCommaOnDeclarationSite.kt} (55%) rename detekt-formatting/src/test/kotlin/io/gitlab/arturbosch/detekt/formatting/{TrailingCommaSpec.kt => TrailingCommaOnCallSiteSpec.kt} (72%) create mode 100644 detekt-formatting/src/test/kotlin/io/gitlab/arturbosch/detekt/formatting/TrailingCommaOnDeclarationSiteSpec.kt diff --git a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/KtLintMultiRule.kt b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/KtLintMultiRule.kt index b003a594357d..05738206f9f3 100644 --- a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/KtLintMultiRule.kt +++ b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/KtLintMultiRule.kt @@ -57,7 +57,8 @@ import io.gitlab.arturbosch.detekt.formatting.wrappers.SpacingBetweenDeclaration import io.gitlab.arturbosch.detekt.formatting.wrappers.SpacingBetweenDeclarationsWithComments import io.gitlab.arturbosch.detekt.formatting.wrappers.SpacingBetweenFunctionNameAndOpeningParenthesis import io.gitlab.arturbosch.detekt.formatting.wrappers.StringTemplate -import io.gitlab.arturbosch.detekt.formatting.wrappers.TrailingComma +import io.gitlab.arturbosch.detekt.formatting.wrappers.TrailingCommaOnCallSite +import io.gitlab.arturbosch.detekt.formatting.wrappers.TrailingCommaOnDeclarationSite import io.gitlab.arturbosch.detekt.formatting.wrappers.TypeArgumentListSpacing import io.gitlab.arturbosch.detekt.formatting.wrappers.TypeParameterListSpacing import io.gitlab.arturbosch.detekt.formatting.wrappers.UnnecessaryParenthesesBeforeTrailingLambda @@ -119,7 +120,8 @@ class KtLintMultiRule(config: Config = Config.empty) : SpacingBetweenDeclarationsWithAnnotations(config), SpacingBetweenDeclarationsWithComments(config), StringTemplate(config), - TrailingComma(config), // in standard ruleset but not enabled by default + TrailingCommaOnCallSite(config), // in standard ruleset but not enabled by default + TrailingCommaOnDeclarationSite(config), // in standard ruleset but not enabled by default Wrapping(config), // Wrappers for ktlint-ruleset-experimental rules. Disabled by default. diff --git a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/TrailingCommaOnCallSite.kt b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/TrailingCommaOnCallSite.kt new file mode 100644 index 000000000000..6d84b46ac2e7 --- /dev/null +++ b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/TrailingCommaOnCallSite.kt @@ -0,0 +1,27 @@ +package io.gitlab.arturbosch.detekt.formatting.wrappers + +import com.pinterest.ktlint.core.api.UsesEditorConfigProperties +import com.pinterest.ktlint.ruleset.standard.TrailingCommaOnCallSiteRule +import io.gitlab.arturbosch.detekt.api.Config +import io.gitlab.arturbosch.detekt.api.config +import io.gitlab.arturbosch.detekt.api.internal.AutoCorrectable +import io.gitlab.arturbosch.detekt.api.internal.Configuration +import io.gitlab.arturbosch.detekt.formatting.FormattingRule + +/** + * See [ktlint docs](https://pinterest.github.io/ktlint/rules/standard/) for documentation. + */ +@AutoCorrectable(since = "1.23.0") +class TrailingCommaOnCallSite(config: Config) : FormattingRule(config) { + + override val wrapping = TrailingCommaOnCallSiteRule() + override val issue = issueFor("Rule to mandate/forbid trailing commas") + + @Configuration("Defines whether a trailing comma (or no trailing comma) should be enforced on the call side") + private val allowTrailingComma by config(false) + + override fun overrideEditorConfigProperties(): Map, String> = + mapOf( + TrailingCommaOnCallSiteRule.allowTrailingCommaOnCallSiteProperty to allowTrailingComma.toString(), + ) +} diff --git a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/TrailingComma.kt b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/TrailingCommaOnDeclarationSite.kt similarity index 55% rename from detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/TrailingComma.kt rename to detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/TrailingCommaOnDeclarationSite.kt index 98ca6a7e3e11..b6ea120c60e7 100644 --- a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/TrailingComma.kt +++ b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/wrappers/TrailingCommaOnDeclarationSite.kt @@ -1,7 +1,7 @@ package io.gitlab.arturbosch.detekt.formatting.wrappers import com.pinterest.ktlint.core.api.UsesEditorConfigProperties -import com.pinterest.ktlint.ruleset.experimental.trailingcomma.TrailingCommaRule +import com.pinterest.ktlint.ruleset.standard.TrailingCommaOnDeclarationSiteRule import io.gitlab.arturbosch.detekt.api.Config import io.gitlab.arturbosch.detekt.api.config import io.gitlab.arturbosch.detekt.api.internal.AutoCorrectable @@ -11,21 +11,17 @@ import io.gitlab.arturbosch.detekt.formatting.FormattingRule /** * See [ktlint docs](https://pinterest.github.io/ktlint/rules/standard/) for documentation. */ -@AutoCorrectable(since = "1.20.0") -class TrailingComma(config: Config) : FormattingRule(config) { +@AutoCorrectable(since = "1.23.0") +class TrailingCommaOnDeclarationSite(config: Config) : FormattingRule(config) { - override val wrapping = TrailingCommaRule() + override val wrapping = TrailingCommaOnDeclarationSiteRule() override val issue = issueFor("Rule to mandate/forbid trailing commas") - @Configuration("Defines whether a trailing comma (or no trailing comma) should be enforced on the defining side") + @Configuration("Defines whether a trailing comma (or no trailing comma) should be enforced on the declaration side") private val allowTrailingComma by config(false) - @Configuration("Defines whether a trailing comma (or no trailing comma) should be enforced on the calling side") - private val allowTrailingCommaOnCallSite by config(false) - override fun overrideEditorConfigProperties(): Map, String> = mapOf( - TrailingCommaRule.allowTrailingCommaProperty to allowTrailingComma.toString(), - TrailingCommaRule.allowTrailingCommaOnCallSiteProperty to allowTrailingCommaOnCallSite.toString(), + TrailingCommaOnDeclarationSiteRule.allowTrailingCommaProperty to allowTrailingComma.toString(), ) } diff --git a/detekt-formatting/src/test/kotlin/io/gitlab/arturbosch/detekt/formatting/TrailingCommaSpec.kt b/detekt-formatting/src/test/kotlin/io/gitlab/arturbosch/detekt/formatting/TrailingCommaOnCallSiteSpec.kt similarity index 72% rename from detekt-formatting/src/test/kotlin/io/gitlab/arturbosch/detekt/formatting/TrailingCommaSpec.kt rename to detekt-formatting/src/test/kotlin/io/gitlab/arturbosch/detekt/formatting/TrailingCommaOnCallSiteSpec.kt index f72703cb707c..b08bd5493f8e 100644 --- a/detekt-formatting/src/test/kotlin/io/gitlab/arturbosch/detekt/formatting/TrailingCommaSpec.kt +++ b/detekt-formatting/src/test/kotlin/io/gitlab/arturbosch/detekt/formatting/TrailingCommaOnCallSiteSpec.kt @@ -1,20 +1,17 @@ package io.gitlab.arturbosch.detekt.formatting -import io.gitlab.arturbosch.detekt.formatting.wrappers.TrailingComma +import io.gitlab.arturbosch.detekt.formatting.wrappers.TrailingCommaOnCallSite import io.gitlab.arturbosch.detekt.test.TestConfig import io.gitlab.arturbosch.detekt.test.assertThat import org.junit.jupiter.api.Nested import org.junit.jupiter.api.Test -private const val ALLOW_TRAILING_COMMA = "allowTrailingComma" -private const val ALLOW_TRAILING_COMMA_ON_CALL_SITE = "allowTrailingCommaOnCallSite" - /** * Some test cases were used directly from KtLint to verify the wrapper rule: * * https://github.com/pinterest/ktlint/blob/master/ktlint-ruleset-experimental/src/test/kotlin/com/pinterest/ktlint/ruleset/experimental/TrailingCommaRuleTest.kt */ -class TrailingCommaSpec { +class TrailingCommaOnCallSiteSpec { @Nested inner class `unnecessary comma` { @@ -24,7 +21,7 @@ class TrailingCommaSpec { val code = """ val foo1 = listOf("a", "b",) """.trimIndent() - val findings = TrailingComma(TestConfig(mapOf(ALLOW_TRAILING_COMMA to false))).lint(code) + val findings = TrailingCommaOnCallSite(TestConfig(mapOf(ALLOW_TRAILING_COMMA to false))).lint(code) assertThat(findings).hasSize(1) } @@ -33,7 +30,7 @@ class TrailingCommaSpec { val code = """ val foo2 = Pair(1, 2,) """.trimIndent() - val findings = TrailingComma(TestConfig(mapOf(ALLOW_TRAILING_COMMA to false))).lint(code) + val findings = TrailingCommaOnCallSite(TestConfig(mapOf(ALLOW_TRAILING_COMMA to false))).lint(code) assertThat(findings).hasSize(1) } @@ -42,7 +39,7 @@ class TrailingCommaSpec { val code = """ val foo3: List = emptyList() """.trimIndent() - val findings = TrailingComma(TestConfig(mapOf(ALLOW_TRAILING_COMMA to false))).lint(code) + val findings = TrailingCommaOnCallSite(TestConfig(mapOf(ALLOW_TRAILING_COMMA to false))).lint(code) assertThat(findings).hasSize(1) } @@ -52,7 +49,7 @@ class TrailingCommaSpec { val foo4 = Array(2) { 42 } val bar4 = foo4[1,] """.trimIndent() - val findings = TrailingComma(TestConfig(mapOf(ALLOW_TRAILING_COMMA to false))).lint(code) + val findings = TrailingCommaOnCallSite(TestConfig(mapOf(ALLOW_TRAILING_COMMA to false))).lint(code) assertThat(findings).hasSize(1) } @@ -62,7 +59,7 @@ class TrailingCommaSpec { @Foo5([1, 2,]) val foo5: Int = 0 """.trimIndent() - val findings = TrailingComma(TestConfig(mapOf(ALLOW_TRAILING_COMMA to false))).lint(code) + val findings = TrailingCommaOnCallSite(TestConfig(mapOf(ALLOW_TRAILING_COMMA to false))).lint(code) assertThat(findings).hasSize(1) } } @@ -78,7 +75,7 @@ class TrailingCommaSpec { val bar: Int ) """.trimIndent() - val findings = TrailingComma(TestConfig(mapOf(ALLOW_TRAILING_COMMA to true))).lint(code) + val findings = TrailingCommaOnCallSite(TestConfig(mapOf(ALLOW_TRAILING_COMMA to true))).lint(code) assertThat(findings).hasSize(1) } @@ -91,7 +88,7 @@ class TrailingCommaSpec { "b" ) """.trimIndent() - val findings = TrailingComma(TestConfig(mapOf(ALLOW_TRAILING_COMMA_ON_CALL_SITE to true))).lint(code) + val findings = TrailingCommaOnCallSite(TestConfig(mapOf(ALLOW_TRAILING_COMMA to true))).lint(code) assertThat(findings).hasSize(1) } @@ -104,8 +101,12 @@ class TrailingCommaSpec { 2 ) """.trimIndent() - val findings = TrailingComma(TestConfig(mapOf(ALLOW_TRAILING_COMMA_ON_CALL_SITE to true))).lint(code) + val findings = TrailingCommaOnCallSite(TestConfig(mapOf(ALLOW_TRAILING_COMMA to true))).lint(code) assertThat(findings).hasSize(1) } } + + private companion object { + private const val ALLOW_TRAILING_COMMA = "allowTrailingComma" + } } diff --git a/detekt-formatting/src/test/kotlin/io/gitlab/arturbosch/detekt/formatting/TrailingCommaOnDeclarationSiteSpec.kt b/detekt-formatting/src/test/kotlin/io/gitlab/arturbosch/detekt/formatting/TrailingCommaOnDeclarationSiteSpec.kt new file mode 100644 index 000000000000..91f7d38dfbe0 --- /dev/null +++ b/detekt-formatting/src/test/kotlin/io/gitlab/arturbosch/detekt/formatting/TrailingCommaOnDeclarationSiteSpec.kt @@ -0,0 +1,112 @@ +package io.gitlab.arturbosch.detekt.formatting + +import io.gitlab.arturbosch.detekt.formatting.wrappers.TrailingCommaOnDeclarationSite +import io.gitlab.arturbosch.detekt.test.TestConfig +import io.gitlab.arturbosch.detekt.test.assertThat +import org.junit.jupiter.api.Nested +import org.junit.jupiter.api.Test + +/** + * Some test cases were used directly from KtLint to verify the wrapper rule: + * + * https://github.com/pinterest/ktlint/blob/master/ktlint-ruleset-experimental/src/test/kotlin/com/pinterest/ktlint/ruleset/experimental/TrailingCommaRuleTest.kt + */ +class TrailingCommaOnDeclarationSiteSpec { + + @Nested + inner class `unnecessary comma` { + + @Test + fun `reports unnecessary comma on function call`() { + val code = """ + val foo1 = listOf("a", "b",) + """.trimIndent() + val findings = TrailingCommaOnDeclarationSite(TestConfig(mapOf(ALLOW_TRAILING_COMMA to false))).lint(code) + assertThat(findings).hasSize(1) + } + + @Test + fun `reports unnecessary comma on constructor call`() { + val code = """ + val foo2 = Pair(1, 2,) + """.trimIndent() + val findings = TrailingCommaOnDeclarationSite(TestConfig(mapOf(ALLOW_TRAILING_COMMA to false))).lint(code) + assertThat(findings).hasSize(1) + } + + @Test + fun `reports unnecessary comma on generic type definition`() { + val code = """ + val foo3: List = emptyList() + """.trimIndent() + val findings = TrailingCommaOnDeclarationSite(TestConfig(mapOf(ALLOW_TRAILING_COMMA to false))).lint(code) + assertThat(findings).hasSize(1) + } + + @Test + fun `reports unnecessary comma on array get`() { + val code = """ + val foo4 = Array(2) { 42 } + val bar4 = foo4[1,] + """.trimIndent() + val findings = TrailingCommaOnDeclarationSite(TestConfig(mapOf(ALLOW_TRAILING_COMMA to false))).lint(code) + assertThat(findings).hasSize(1) + } + + @Test + fun `reports unnecessary comma on annotation`() { + val code = """ + @Foo5([1, 2,]) + val foo5: Int = 0 + """.trimIndent() + val findings = TrailingCommaOnDeclarationSite(TestConfig(mapOf(ALLOW_TRAILING_COMMA to false))).lint(code) + assertThat(findings).hasSize(1) + } + } + + @Nested + inner class `missing comma` { + + @Test + fun `reports missing comma on field definition`() { + val code = """ + data class Foo1(val bar: Int) + data class Foo2( + val bar: Int + ) + """.trimIndent() + val findings = TrailingCommaOnDeclarationSite(TestConfig(mapOf(ALLOW_TRAILING_COMMA to true))).lint(code) + assertThat(findings).hasSize(1) + } + + @Test + fun `reports missing comma on function call`() { + val code = """ + val foo1 = listOf("a", "b") + val foo2 = listOf( + "a", + "b" + ) + """.trimIndent() + val findings = TrailingCommaOnDeclarationSite(TestConfig(mapOf(ALLOW_TRAILING_COMMA to true))).lint(code) + assertThat(findings).hasSize(1) + } + + @Test + fun `reports missing comma on constructor call`() { + val code = """ + val foo2 = Pair(1, 2) + val foo2 = Pair( + 1, + 2 + ) + """.trimIndent() + val findings = TrailingCommaOnDeclarationSite(TestConfig(mapOf(ALLOW_TRAILING_COMMA to true))).lint(code) + assertThat(findings).hasSize(1) + } + } + + private companion object { + private const val ALLOW_TRAILING_COMMA = "allowTrailingComma" + } +} diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 6359d7a28cfa..be0e35f6787e 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -2,7 +2,7 @@ dokka = "1.7.10" jacoco = "0.8.8" kotlin = "1.7.10" -ktlint = "0.46.1" +ktlint = "0.47.1" junit = "5.9.0" contester = "0.2.0"