我搜索了很多网站,但没有找到任何比较 Ktlint 与 Detekt 的信息。我需要知道差异,而不是共同特征。我想选择一个,但我不会亲自测试它们。有人可以给我一些差异吗?
我正在使用 detekt 和 ktlint 来格式化我的代码,如下所示。
detekt.gradle
ext{
toolVersion = "1.0.0-RC16"
}
detekt {
input = files(...)
filters = ".*/resources/.*,.*/build/.*"
baseline = file("${project.rootDir}/tools/detekt-baseline.xml")
reports{
html{
enabled = true
}
xml{
enabled = false
}
}
config = files(file("$project.rootDir/tools/detekt.yml"))
}
dependencies {
detektPlugins "io.gitlab.arturbosch.detekt:detekt-formatting:$toolVersion"
}
Run Code Online (Sandbox Code Playgroud)
检测基线.yml
autoCorrect: true
build:
maxIssues: 10
weights:
# complexity: 2
# LongParameterList: 1
# style: 1
# comments: 1
Run Code Online (Sandbox Code Playgroud)
项目级build.gradle
buildscript {
ext{...}
repositories {...}
dependencies {...}
}
plugins{
id "io.gitlab.arturbosch.detekt" version "1.0.0-RC16"
}
apply from: …Run Code Online (Sandbox Code Playgroud) 我在我的项目中包含了 detekt ( https://github.com/arturbosch/detekt/ ):
根构建.gradle
buildscript {
ext.kotlin_version = '1.3.50'
ext.detekt_version = "1.0.1"
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.5.0'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath "io.gitlab.arturbosch.detekt:detekt-gradle-plugin:$detekt_version"
}
}
plugins {
id("io.gitlab.arturbosch.detekt").version("1.0.1")
}
Run Code Online (Sandbox Code Playgroud)
应用程序构建.gradle
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'
apply plugin: 'io.gitlab.arturbosch.detekt'
Run Code Online (Sandbox Code Playgroud)
android { // .. 只是默认值 }
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
// ... other dependencies
detekt "io.gitlab.arturbosch.detekt:detekt-formatting:$detekt_version"
detekt("io.gitlab.arturbosch.detekt:detekt-cli:$detekt_version")
}
detekt {
toolVersion = "$detekt_version"
input = files("src/main/java") …Run Code Online (Sandbox Code Playgroud) 最近,我在我的应用程序中添加了Detekt分析器。
在我运行 detekt (./gradlew detekt) 后,我在我的主应用程序类中收到了 SpreadOperator 警告。
代码警告: runApplication<MessCallsApplication>(*args)
您可以在此处阅读有关 SpreadOperator 警告的信息: [SpreadOperator Warning][2]
我的主要课程:
@SpringBootApplication(exclude = [RedisAutoConfiguration::class])
@EnableCircuitBreaker
@EnableScheduling
class MyApplication {
companion object : KLogging()
}
fun main(args: Array<String>) {
Thread.setDefaultUncaughtExceptionHandler { _, exception ->
MessCallsApplication.logger.error(exception) { "Uncaught exception" }
}
runApplication<MessCallsApplication>(*args)
}
Run Code Online (Sandbox Code Playgroud)
问题是,摆脱 SpreadOperator 警告的最佳做法是什么?或者是不可能的?
我已将Detekt添加到我的 Gradle 项目中。我的意图是仅按需调用detekt,因为它会产生很多误报。但是,该detekt任务默认处于活动状态(并破坏构建)。我怎样才能避免这种依赖呢?
我尝试过的:我添加了一个有条件gradle.taskGraph.beforeTask设置的块enabled = false:
gradle.taskGraph.beforeTask {
val containsDetektTaskCall = gradle.startParameter.taskNames.contains("detekt")
if (name.startsWith("detekt") && !containsDetektTaskCall) {
logger.lifecycle("Skipping all 'detekt-plugin' tasks")
enabled = false
}
}
Run Code Online (Sandbox Code Playgroud)
我感觉这 7 行代码只是为了覆盖一个任务依赖,确实有点多了。我希望得到一个一般的 Gradle 答案以及一些特定于 Detekt 的方法。
我需要抑制两个错误:WildcardImport 和 MatchingDeclarationName。问题是它需要应用于整个文件,有什么办法可以做到这一点吗?