Skip to content

Commit

Permalink
RedundantSuspendModifier: do not report when the function has 'actual…
Browse files Browse the repository at this point in the history
…' modifier (#6951)
  • Loading branch information
t-kameyama authored and cortinico committed Mar 23, 2024
1 parent b364cf5 commit c10342d
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ class RedundantSuspendModifier(config: Config) : Rule(config) {
override fun visitNamedFunction(function: KtNamedFunction) {
val suspendModifier = function.modifierList?.getModifier(KtTokens.SUSPEND_KEYWORD) ?: return
if (!function.hasBody()) return
if (function.hasModifier(KtTokens.OVERRIDE_KEYWORD)) return
if (function.hasModifier(KtTokens.OVERRIDE_KEYWORD) || function.hasModifier(KtTokens.ACTUAL_KEYWORD)) return

val descriptor = bindingContext[BindingContext.FUNCTION, function] ?: return
if (descriptor.modality == Modality.OPEN) return
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,15 @@ package io.gitlab.arturbosch.detekt.rules.coroutines
import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.rules.KotlinCoreEnvironmentTest
import io.gitlab.arturbosch.detekt.test.compileAndLintWithContext
import io.gitlab.arturbosch.detekt.test.lintWithContext
import org.assertj.core.api.Assertions.assertThat
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
import org.junit.jupiter.api.Test

@KotlinCoreEnvironmentTest
class RedundantSuspendModifierSpec(val env: KotlinCoreEnvironment) {

val subject = RedundantSuspendModifier(Config.empty)
private val subject = RedundantSuspendModifier(Config.empty)

@Test
fun `reports when public function returns expression of platform type`() {
Expand Down Expand Up @@ -88,6 +89,20 @@ class RedundantSuspendModifierSpec(val env: KotlinCoreEnvironment) {
assertThat(subject.compileAndLintWithContext(env, code)).isEmpty()
}

@Test
fun `does not report actual suspend function`() {
val code = """
expect class Foo {
suspend fun bar()
}
actual class Foo {
actual suspend fun bar() {}
}
""".trimIndent()
assertThat(subject.lintWithContext(env, code)).isEmpty()
}

@Test
fun `ignores when iterator is suspending`() {
val code = """
Expand Down

0 comments on commit c10342d

Please sign in to comment.