Spotless 6.19.0版本下如何禁用standard:no-wildcard-imports规则?
解决Spotless+ktlint允许通配符导入的配置问题
我是Spotless和ktlint的新手,正尝试将它们接入我的项目,基础配置操作较为简单,但我希望允许通配符导入——这是一个常见需求。不过当前配置无法实现该功能:
项目Gradle配置
plugins { id("com.android.application") version "8.1.4" apply false id("org.jetbrains.kotlin.android") version "1.9.10" apply false id("com.google.dagger.hilt.android") version "2.48.1" apply false id("com.google.devtools.ksp") version "1.9.10-1.0.13" apply false id("com.diffplug.spotless") version "6.19.0" apply false } subprojects { apply(plugin = "com.diffplug.spotless") configure<com.diffplug.gradle.spotless.SpotlessExtension> { kotlin { target("**/*.kt") ktlint().setEditorConfigPath("$projectDir/../.editorconfig") targetExclude("$buildDir/**/*.kt") licenseHeaderFile(rootProject.file("spotless/copyright.kt")) } kotlinGradle { target("*.gradle.kts") ktlint() } } afterEvaluate { tasks.named("preBuild") { dependsOn("spotlessApply") } } }
.editorconfig配置
root = true [*] indent_style = space indent_size = 2 end_of_line = lf charset = utf-8 trim_trailing_whitespace = true insert_final_newline = false [*.{java,kt,kts,xml}] indent_size = 4 max_line_length = 200 [*.{kt,kts}] ij_kotlin_allow_trailing_comma = true ij_kotlin_allow_trailing_comma_on_call_site = true ij_kotlin_packages_to_use_import_on_demand = disabled
我尝试过设置disabled、false、unset,但均无效,始终出现如下错误:
Error on line: 3, column: 1 rule: standard:no-wildcard-imports Wildcard import
问题原因
你使用的ij_kotlin_packages_to_use_import_on_demand是IntelliJ IDEA的专属配置项,ktlint并不识别该参数,所以无论设置什么值都无法生效。报错中的standard:no-wildcard-imports是ktlint内置的规则,需要直接针对该规则进行禁用配置。
解决方案
方案一:修改.editorconfig文件
在.editorconfig的[*.{kt,kts}]区块中添加ktlint规则禁用配置:
[*.{kt,kts}] ij_kotlin_allow_trailing_comma = true ij_kotlin_allow_trailing_comma_on_call_site = true ktlint_standard_no-wildcard-imports = disabled
方案二:在Spotless的Gradle配置中直接禁用规则
如果不想修改.editorconfig,可以在Spotless的ktlint配置中添加规则排除:
kotlin { target("**/*.kt") ktlint() .setEditorConfigPath("$projectDir/../.editorconfig") .disableRule("no-wildcard-imports") // 添加这一行 targetExclude("$buildDir/**/*.kt") licenseHeaderFile(rootProject.file("spotless/copyright.kt")) }
两种方案任选其一即可解决问题,允许代码中使用通配符导入。
内容的提问来源于stack exchange,提问作者a_local_nobody
相关产品推荐
相关产品推荐

