Skip to content

Commit

Permalink
Prevent import statements from counting as references for UnusedPriva…
Browse files Browse the repository at this point in the history
…teProperty
  • Loading branch information
luanpotter committed Mar 26, 2023
1 parent 2187667 commit 01ca14c
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 1 deletion.
Expand Up @@ -15,6 +15,7 @@ import io.gitlab.arturbosch.detekt.rules.isActual
import io.gitlab.arturbosch.detekt.rules.isExpect
import org.jetbrains.kotlin.com.intellij.psi.PsiElement
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.psi.KtImportDirective
import org.jetbrains.kotlin.psi.KtNamedDeclaration
import org.jetbrains.kotlin.psi.KtPackageDirective
import org.jetbrains.kotlin.psi.KtParameter
Expand Down Expand Up @@ -142,6 +143,7 @@ private class UnusedPrivatePropertyVisitor(private val allowedNames: Regex) : De
private fun skipNode(expression: KtReferenceExpression): Boolean {
return when {
expression.isPackageDirective() -> true
expression.isImportDirective() -> true
else -> false
}
}
Expand All @@ -150,3 +152,7 @@ private class UnusedPrivatePropertyVisitor(private val allowedNames: Regex) : De
private fun PsiElement.isPackageDirective(): Boolean {
return this is KtPackageDirective || parent?.isPackageDirective() == true
}

private fun PsiElement.isImportDirective(): Boolean {
return this is KtImportDirective || parent?.isImportDirective() == true
}
Expand Up @@ -817,10 +817,32 @@ class UnusedPrivatePropertySpec(val env: KotlinCoreEnvironment) {
package org.detekt
fun main() {
val org = 1
val detekt = 1
println("foo")
}
""".trimIndent()
assertThat(subject.lint(code)).hasSize(1)

val results = subject.lint(code)
assertThat(results).hasSize(2)
assertThat(results).anyMatch { it.message == "Private property `org` is unused." }
assertThat(results).anyMatch { it.message == "Private property `detekt` is unused." }
}

@Test
fun `import declarations are ignored`() {
val code = """
import org.detekt.Foo
fun main() {
val org = 1
val detekt = 1
println("foo")
}
""".trimIndent()

val results = subject.lint(code)
assertThat(results).hasSize(2)
assertThat(results).anyMatch { it.message == "Private property `org` is unused." }
assertThat(results).anyMatch { it.message == "Private property `detekt` is unused." }
}
}
}

0 comments on commit 01ca14c

Please sign in to comment.