Skip to content

Commit

Permalink
Ignore actual members in UnusedPrivateMember (#3669)
Browse files Browse the repository at this point in the history
  • Loading branch information
sczerwinski committed Apr 19, 2021
1 parent 0388ffe commit da8676d
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 5 deletions.
Expand Up @@ -11,6 +11,7 @@ import io.gitlab.arturbosch.detekt.api.Rule
import io.gitlab.arturbosch.detekt.api.Severity
import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault
import io.gitlab.arturbosch.detekt.rules.isAbstract
import io.gitlab.arturbosch.detekt.rules.isActual
import io.gitlab.arturbosch.detekt.rules.isExpect
import io.gitlab.arturbosch.detekt.rules.isExternal
import io.gitlab.arturbosch.detekt.rules.isMainFunction
Expand Down Expand Up @@ -255,7 +256,8 @@ private class UnusedParameterVisitor(allowedNames: Regex) : UnusedMemberVisitor(
private fun KtNamedFunction.isRelevant() = !isAllowedToHaveUnusedParameters()

private fun KtNamedFunction.isAllowedToHaveUnusedParameters() =
isAbstract() || isOpen() || isOverride() || isOperator() || isMainFunction() || isExternal() || isExpect()
isAbstract() || isOpen() || isOverride() || isOperator() || isMainFunction() || isExternal() ||
isExpect() || isActual()
}

private class UnusedPropertyVisitor(allowedNames: Regex) : UnusedMemberVisitor(allowedNames) {
Expand Down Expand Up @@ -292,7 +294,10 @@ private class UnusedPropertyVisitor(allowedNames: Regex) : UnusedMemberVisitor(a
override fun visitPrimaryConstructor(constructor: KtPrimaryConstructor) {
super.visitPrimaryConstructor(constructor)
constructor.valueParameters
.filter { (it.isPrivate() || !it.hasValOrVar()) && it.containingClassOrObject?.isExpect() == false }
.filter {
(it.isPrivate() || (!it.hasValOrVar() && !constructor.isActual())) &&
it.containingClassOrObject?.isExpect() == false
}
.forEach { maybeAddUnusedProperty(it) }
}

Expand Down
Expand Up @@ -84,17 +84,31 @@ class UnusedPrivateMemberSpec : Spek({

describe("actual functions and classes") {

it("reports unused parameters in actual functions") {
it("should not report unused parameters in actual functions") {
val code = """
actual class Foo {
actual fun bar(i: Int) {}
actual fun baz(i: Int, s: String) {}
}
"""
assertThat(subject.lint(code)).hasSize(3)
assertThat(subject.lint(code)).isEmpty()
}

it("should not report unused parameters in actual constructors") {
val code = """
actual class Foo actual constructor(bar: String) {}
"""
assertThat(subject.lint(code)).isEmpty()
}

it("should not report unused actual fields defined as parameters of primary constructors") {
val code = """
actual class Foo actual constructor(actual val bar: String) {}
"""
assertThat(subject.lint(code)).isEmpty()
}

it("reports unused parameters in constructors") {
it("reports unused private fields defined as parameters of primary constructors") {
val code = """
actual class Foo actual constructor(private val bar: String) {}
"""
Expand Down

0 comments on commit da8676d

Please sign in to comment.