From f997f627f12cdb2484c5563231d0cb1ea8252d40 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Brais=20Gab=C3=ADn?= Date: Sat, 23 Jul 2022 16:04:15 +0200 Subject: [PATCH] Use list config for FunctionOnlyReturningConstant>excludedFunctions --- .../src/main/resources/default-detekt-config.yml | 2 +- .../rules/style/FunctionOnlyReturningConstant.kt | 11 ++++++++--- .../rules/style/FunctionOnlyReturningConstantSpec.kt | 10 +++++++++- 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/detekt-core/src/main/resources/default-detekt-config.yml b/detekt-core/src/main/resources/default-detekt-config.yml index 9f414ae5fe05..e092e377f95c 100644 --- a/detekt-core/src/main/resources/default-detekt-config.yml +++ b/detekt-core/src/main/resources/default-detekt-config.yml @@ -555,7 +555,7 @@ style: active: true ignoreOverridableFunction: true ignoreActualFunction: true - excludedFunctions: '' + excludedFunctions: [] LibraryCodeMustSpecifyReturnType: active: true excludes: ['**'] diff --git a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/FunctionOnlyReturningConstant.kt b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/FunctionOnlyReturningConstant.kt index 56eb25a572b3..cdb75140268d 100644 --- a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/FunctionOnlyReturningConstant.kt +++ b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/FunctionOnlyReturningConstant.kt @@ -8,10 +8,10 @@ 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.ActiveByDefault import io.gitlab.arturbosch.detekt.api.internal.Configuration +import io.gitlab.arturbosch.detekt.api.simplePatternToRegex import io.gitlab.arturbosch.detekt.rules.isActual import io.gitlab.arturbosch.detekt.rules.isOpen import io.gitlab.arturbosch.detekt.rules.isOverride @@ -52,7 +52,7 @@ class FunctionOnlyReturningConstant(config: Config = Config.empty) : Rule(config private val ignoreActualFunction: Boolean by config(true) @Configuration("excluded functions") - private val excludedFunctions: SplitPattern by config("") { SplitPattern(it) } + private val excludedFunctions: List by config(listOf()) { it.map(String::simplePatternToRegex) } @Configuration("allows to provide a list of annotations that disable this check") @Deprecated("Use `ignoreAnnotated` instead") @@ -110,7 +110,7 @@ class FunctionOnlyReturningConstant(config: Config = Config.empty) : Rule(config } private fun isNotExcluded(function: KtNamedFunction) = - !excludedFunctions.contains(function.name) && !annotationExcluder.shouldExclude(function.annotationEntries) + function.name !in excludedFunctions && !annotationExcluder.shouldExclude(function.annotationEntries) private fun isReturningAConstant(function: KtNamedFunction) = isConstantExpression(function.bodyExpression) || returnsConstant(function) @@ -127,3 +127,8 @@ class FunctionOnlyReturningConstant(config: Config = Config.empty) : Rule(config return isConstantExpression(returnExpression?.returnedExpression) } } + +private operator fun Iterable.contains(input: String?): Boolean { + input ?: return false + return any { it.matches(input) } +} diff --git a/detekt-rules-style/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/style/FunctionOnlyReturningConstantSpec.kt b/detekt-rules-style/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/style/FunctionOnlyReturningConstantSpec.kt index b674cf7dd2fd..0e19513011a4 100644 --- a/detekt-rules-style/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/style/FunctionOnlyReturningConstantSpec.kt +++ b/detekt-rules-style/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/style/FunctionOnlyReturningConstantSpec.kt @@ -63,13 +63,21 @@ class FunctionOnlyReturningConstantSpec { } @Test - fun `does not report excluded function which returns a constant`() { + fun `does not report excluded function which returns a constant (with string configuration)`() { val code = "fun f() = 1" val config = TestConfig(mapOf(EXCLUDED_FUNCTIONS to "f")) val rule = FunctionOnlyReturningConstant(config) assertThat(rule.compileAndLint(code)).isEmpty() } + @Test + fun `does not report excluded function which returns a constant`() { + val code = "fun f() = 1" + val config = TestConfig(mapOf(EXCLUDED_FUNCTIONS to listOf("f"))) + val rule = FunctionOnlyReturningConstant(config) + assertThat(rule.compileAndLint(code)).isEmpty() + } + @Test @DisplayName( "does not report excluded annotated function which returns a constant when given \"kotlin.SinceKotlin\""