From d5368cbfeb910f48c147df8971f62e4c601d1afe Mon Sep 17 00:00:00 2001 From: Peter Mandeljc Date: Sun, 1 May 2022 15:14:28 +0200 Subject: [PATCH] Change NestedScopeFunctions to early return on empty context --- .../rules/complexity/NestedScopeFunctions.kt | 2 ++ .../complexity/NestedScopeFunctionsSpec.kt | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/detekt-rules-complexity/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/complexity/NestedScopeFunctions.kt b/detekt-rules-complexity/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/complexity/NestedScopeFunctions.kt index 61263d20450..dbddc9f1da7 100644 --- a/detekt-rules-complexity/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/complexity/NestedScopeFunctions.kt +++ b/detekt-rules-complexity/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/complexity/NestedScopeFunctions.kt @@ -16,6 +16,7 @@ import io.gitlab.arturbosch.detekt.api.internal.RequiresTypeResolution import org.jetbrains.kotlin.descriptors.CallableDescriptor import org.jetbrains.kotlin.psi.KtCallExpression import org.jetbrains.kotlin.psi.KtNamedFunction +import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.calls.util.getResolvedCall /** @@ -65,6 +66,7 @@ class NestedScopeFunctions(config: Config = Config.empty) : Rule(config) { } override fun visitNamedFunction(function: KtNamedFunction) { + if (bindingContext == BindingContext.EMPTY) return function.accept(FunctionDepthVisitor()) } diff --git a/detekt-rules-complexity/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/complexity/NestedScopeFunctionsSpec.kt b/detekt-rules-complexity/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/complexity/NestedScopeFunctionsSpec.kt index d07c14a16bb..b3f4be087ba 100644 --- a/detekt-rules-complexity/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/complexity/NestedScopeFunctionsSpec.kt +++ b/detekt-rules-complexity/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/complexity/NestedScopeFunctionsSpec.kt @@ -4,6 +4,7 @@ import io.gitlab.arturbosch.detekt.api.Finding import io.gitlab.arturbosch.detekt.rules.KotlinCoreEnvironmentTest import io.gitlab.arturbosch.detekt.test.TestConfig import io.gitlab.arturbosch.detekt.test.assertThat +import io.gitlab.arturbosch.detekt.test.compileAndLint import io.gitlab.arturbosch.detekt.test.compileAndLintWithContext import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment import org.junit.jupiter.api.Test @@ -93,10 +94,27 @@ class NestedScopeFunctionsSpec(private val env: KotlinCoreEnvironment) { expectNoFindings() } + @Test + fun `should not report when binding context is empty`() { + givenCode = """ + fun f() { + 1.run { + 1.run { } + } + } + """ + whenLintRunsWithoutContext() + expectNoFindings() + } + private fun whenLintRuns() { actual = subject.compileAndLintWithContext(env, givenCode) } + private fun whenLintRunsWithoutContext() { + actual = subject.compileAndLint(givenCode) + } + private fun expectSourceLocation(location: Pair) { assertThat(actual).hasSourceLocation(location.first, location.second) }