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 61263d204504..cb2c7713f24d 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,7 +66,9 @@ class NestedScopeFunctions(config: Config = Config.empty) : Rule(config) { } override fun visitNamedFunction(function: KtNamedFunction) { - function.accept(FunctionDepthVisitor()) + if (bindingContext != BindingContext.EMPTY) { + function.accept(FunctionDepthVisitor()) + } } private fun report(element: KtCallExpression, depth: Int) { 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 d07c14a16bb7..b3f4be087ba7 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) }