Skip to content

Commit

Permalink
Upgrade ktlint to 0.47.1
Browse files Browse the repository at this point in the history
  • Loading branch information
chao2zhang committed Sep 18, 2022
1 parent f5be0d8 commit e564057
Show file tree
Hide file tree
Showing 6 changed files with 164 additions and 26 deletions.
Expand Up @@ -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
Expand Down Expand Up @@ -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.
Expand Down
@@ -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<UsesEditorConfigProperties.EditorConfigProperty<*>, String> =
mapOf(
TrailingCommaOnCallSiteRule.allowTrailingCommaOnCallSiteProperty to allowTrailingComma.toString(),
)
}
@@ -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
Expand All @@ -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<UsesEditorConfigProperties.EditorConfigProperty<*>, String> =
mapOf(
TrailingCommaRule.allowTrailingCommaProperty to allowTrailingComma.toString(),
TrailingCommaRule.allowTrailingCommaOnCallSiteProperty to allowTrailingCommaOnCallSite.toString(),
TrailingCommaOnDeclarationSiteRule.allowTrailingCommaProperty to allowTrailingComma.toString(),
)
}
@@ -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` {
Expand All @@ -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)
}

Expand All @@ -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)
}

Expand All @@ -42,7 +39,7 @@ class TrailingCommaSpec {
val code = """
val foo3: List<String,> = 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)
}

Expand All @@ -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)
}

Expand All @@ -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)
}
}
Expand All @@ -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)
}

Expand All @@ -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)
}

Expand All @@ -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"
}
}
@@ -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<String,> = 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"
}
}
2 changes: 1 addition & 1 deletion gradle/libs.versions.toml
Expand Up @@ -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"

Expand Down

0 comments on commit e564057

Please sign in to comment.