尝试在 Detekt 自定义规则上创建一些游乐场,但它不起作用。甚至不尝试查找规则集文件。
gradle 开始了
plugins {
id 'com.android.application'
id 'kotlin-android'
id("io.gitlab.arturbosch.detekt").version("1.17.1")
}
...
detekt {
toolVersion = "$detekt_version" // 1.17.1
input = files("src/main/java")
config = files("../detekt/detekt-config.yml")
autoCorrect = true
reports { ... }
}
dependencies {
detektPlugins "io.gitlab.arturbosch.detekt:detekt-formatting:$detekt_version"
compileOnly "io.gitlab.arturbosch.detekt:detekt-api:$detekt_version"
detekt "io.gitlab.arturbosch.detekt:detekt-cli:$detekt_version"
...
}
规则不变
class SomeCustomRule(config: Config) : Rule(config) {
override val issue: Issue
get() = Issue("Import thingy", Severity.Minor, "I don't like this string", Debt(10))
override fun visitImportDirective(importDirective: KtImportDirective) {
val import: String = importDirective.importPath?.pathStr ?: ""
if ("appcompat" in import) {
report(CodeSmell(
issue,
Entity.from(importDirective),
"Importing $import which is an internal import"))
}
}
}
提供商是
class CustomRuleSetProvider : RuleSetProvider {
override val ruleSetId: String = "detekt-custom-rules"
override fun instance(config: Config) = RuleSet(ruleSetId, listOf(SomeCustomRule(config)))
}
最后但并非最不重要的
在
src/main/resources/META-INF/services/io.gitlab.arturbosch.detekt.api.RuleSetProvider
是
com.playgrounds.detekt.customrule.CustomRuleSetProvider
仍然——什么也没有。我试图在提供者处添加乱码 - 没有,没有错误。我什至试图破坏 META-INF 的声明。没什么。
当然,我尝试将提供程序添加到我的配置文件中,或者在 gradle 中添加项目行。错误,无法识别。
我错过了什么?
谢谢
问题可能在于 gradle 文件中存在
id 'com.android.application'
。请删除并仅保留 2 个插件 - kotlin
和 io.gitlab.arturbosch.detekt
我还花了一些时间来使自定义规则发挥作用并找到了下一个规则:
plugins {
id("kotlin")
id("io.gitlab.arturbosch.detekt")
}
dependencies {
compileOnly(libs.detekt)
}
main
下创建 resource
文件夹。config
目录和 config.yml
文件。阅读有关如何填写的文档META-INF.services
目录。对我来说这是最大的问题,因为我没有注意到路径中的services
文件夹io.gitlab.arturbosch.detekt.api.RuleSetProvider
的文件。 请勿修改其名称相反,您应该提供已实现为
RuleSetProvider
com.your_package_name.RuleProvider
:detekt-rules:assemle
./gradlew detekt