ru.kode.detekt.rule.compose.PublicComposablePreview.kt Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of detekt-rules-compose Show documentation
Show all versions of detekt-rules-compose Show documentation
Detekt rules for Jetpack Compose
/*
* Copyright 2022 KODE LLC. Use of this source code is governed by the MIT license.
*/
package ru.kode.detekt.rule.compose
import io.gitlab.arturbosch.detekt.api.CodeSmell
import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.api.Debt
import io.gitlab.arturbosch.detekt.api.Entity
import io.gitlab.arturbosch.detekt.api.Issue
import io.gitlab.arturbosch.detekt.api.Rule
import io.gitlab.arturbosch.detekt.api.Severity
import io.gitlab.arturbosch.detekt.rules.hasAnnotation
import org.jetbrains.kotlin.psi.KtNamedFunction
import org.jetbrains.kotlin.psi.psiUtil.isPublic
/**
* Checks that all composable preview functions are private
*/
class PublicComposablePreview(config: Config = Config.empty) : Rule(config) {
override val issue = Issue(
javaClass.simpleName,
Severity.Defect,
"Reports public composable previews",
Debt.FIVE_MINS
)
override fun visitNamedFunction(function: KtNamedFunction) {
if (function.hasAnnotation("Composable") && function.hasAnnotation("Preview") && function.isPublic) {
reportError(function)
}
super.visitNamedFunction(function)
}
private fun reportError(node: KtNamedFunction) {
report(
CodeSmell(
issue,
Entity.from(node),
"Preview composable must not be public"
)
)
}
}