Skip to content

Commit

Permalink
Use list config for DataClassContainsFunctions>conversionFunctionPref…
Browse files Browse the repository at this point in the history
…ix (#5119)
  • Loading branch information
BraisGabin committed Jul 30, 2022
1 parent 90d7da2 commit fc23515
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 13 deletions.
3 changes: 2 additions & 1 deletion detekt-core/src/main/resources/default-detekt-config.yml
Expand Up @@ -502,7 +502,8 @@ style:
active: false
DataClassContainsFunctions:
active: false
conversionFunctionPrefix: 'to'
conversionFunctionPrefix:
- 'to'
DataClassShouldBeImmutable:
active: false
DestructuringDeclarationWithTooManyEntries:
Expand Down
Expand Up @@ -7,7 +7,6 @@ import io.gitlab.arturbosch.detekt.api.Entity
import io.gitlab.arturbosch.detekt.api.Issue
import io.gitlab.arturbosch.detekt.api.Rule
import io.gitlab.arturbosch.detekt.api.Severity
import io.gitlab.arturbosch.detekt.api.SplitPattern
import io.gitlab.arturbosch.detekt.api.config
import io.gitlab.arturbosch.detekt.api.internal.Configuration
import io.gitlab.arturbosch.detekt.rules.isOverride
Expand Down Expand Up @@ -38,7 +37,7 @@ class DataClassContainsFunctions(config: Config = Config.empty) : Rule(config) {
)

@Configuration("allowed conversion function names")
private val conversionFunctionPrefix: SplitPattern by config("to") { SplitPattern(it) }
private val conversionFunctionPrefix: List<String> by config(listOf("to"))

override fun visitClass(klass: KtClass) {
if (klass.isData()) {
Expand All @@ -50,15 +49,18 @@ class DataClassContainsFunctions(config: Config = Config.empty) : Rule(config) {
}

private fun checkFunction(klass: KtClass, function: KtNamedFunction) {
if (!function.isOverride() && !conversionFunctionPrefix.startWith(function.name)) {
report(
CodeSmell(
issue,
Entity.atName(function),
"The data class ${klass.name} contains functions which are not registered " +
"conversion functions. The offending method is called ${function.name}"
)
if (function.isOverride()) return

val functionName = function.name
if (functionName != null && conversionFunctionPrefix.any { functionName.startsWith(it) }) return

report(
CodeSmell(
issue,
Entity.atName(function),
"The data class ${klass.name} contains functions which are not registered " +
"conversion functions. The offending method is called $functionName"
)
}
)
}
}
Expand Up @@ -29,11 +29,18 @@ class DataClassContainsFunctionsSpec {
}

@Test
fun `reports valid data class without conversion function`() {
fun `reports valid data class without conversion function string`() {
val config = TestConfig(mapOf(CONVERSION_FUNCTION_PREFIX to ""))
val rule = DataClassContainsFunctions(config)
assertThat(rule.compileAndLint(code)).hasSize(2)
}

@Test
fun `reports valid data class without conversion function list`() {
val config = TestConfig(mapOf(CONVERSION_FUNCTION_PREFIX to emptyList<String>()))
val rule = DataClassContainsFunctions(config)
assertThat(rule.compileAndLint(code)).hasSize(2)
}
}

@Test
Expand Down

0 comments on commit fc23515

Please sign in to comment.