Skip to content

Commit 111e9c3

Browse files
committed
Added PackageConfigImplicitUsageProvider for kotest 6
1 parent 236333c commit 111e9c3

File tree

3 files changed

+44
-1
lines changed

3 files changed

+44
-1
lines changed
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package io.kotest.plugin.intellij.implicits
2+
3+
import com.intellij.codeInsight.daemon.ImplicitUsageProvider
4+
import com.intellij.psi.PsiElement
5+
import io.kotest.plugin.intellij.psi.isSubclass
6+
import org.jetbrains.kotlin.asJava.classes.KtLightClass
7+
import org.jetbrains.kotlin.name.FqName
8+
import org.jetbrains.kotlin.psi.KtClass
9+
import org.jetbrains.kotlin.psi.KtClassOrObject
10+
import org.jetbrains.kotlin.psi.KtObjectDeclaration
11+
12+
/**
13+
* Allows disabling highlighting of certain elements as unused when such elements are not referenced
14+
* from the code but are referenced in some other way.
15+
*
16+
* This [PackageConfigImplicitUsageProvider] will mark module config classes as used.
17+
*/
18+
class PackageConfigImplicitUsageProvider : ImplicitUsageProvider {
19+
20+
private val fqn = FqName("io.kotest.core.config.AbstractPackageConfig")
21+
22+
override fun isImplicitWrite(element: PsiElement): Boolean = false
23+
override fun isImplicitRead(element: PsiElement): Boolean = false
24+
25+
/**
26+
* Marks subclasses of AbstractProjectConfig as used.
27+
*/
28+
override fun isImplicitUsage(element: PsiElement): Boolean {
29+
return when (element) {
30+
is KtClassOrObject -> element.isSubclass(fqn)
31+
is KtLightClass -> {
32+
val o = element.kotlinOrigin ?: return false
33+
return when (o) {
34+
is KtObjectDeclaration -> o.isSubclass(fqn)
35+
is KtClass -> o.isSubclass(fqn)
36+
else -> false
37+
}
38+
}
39+
else -> false
40+
}
41+
}
42+
}

src/main/kotlin/io/kotest/plugin/intellij/implicits/SpecImplicitUsageProvider.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,6 @@ class SpecImplicitUsageProvider : ImplicitUsageProvider {
2929
}
3030
else -> null
3131
}
32-
return ktclass?.isSpec() ?: false
32+
return ktclass?.isSpec() == true
3333
}
3434
}

src/main/resources/META-INF/plugin.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@
7373

7474
<implicitUsageProvider implementation="io.kotest.plugin.intellij.implicits.SpecImplicitUsageProvider"/>
7575
<implicitUsageProvider implementation="io.kotest.plugin.intellij.implicits.ProjectConfigImplicitUsageProvider"/>
76+
<implicitUsageProvider implementation="io.kotest.plugin.intellij.implicits.PackageConfigImplicitUsageProvider"/>
7677
<implicitUsageProvider implementation="io.kotest.plugin.intellij.implicits.AutoScanUsageProvider"/>
7778

7879
<testFinder implementation="io.kotest.plugin.intellij.KotestTestFinder"/>

0 commit comments

Comments
 (0)