Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use list config for DataClassContainsFunctions>conversionFunctionPrefix #5119

Merged
merged 1 commit into from Jul 30, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
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