背景
detekt はKotlin用の静的解析ツール。 コードスタイルや特定パッケージのインポート禁止などをチェックできる。
とりあえず組み込む
プロジェクト直下のbuild.gradle
buildscript {
…
ext.detekt_version='1.17.1'
…
dependencies {
…
classpath "io.gitlab.arturbosch.detekt:detekt-gradle-plugin:$detekt_version"
}
}
allprojects {
repositories {
…
maven { url "https://plugins.gradle.org/m2/" } // detekt
}
}
モジュールのbuild.gradle
apply plugin: "io.gitlab.arturbosch.detekt"
…
dependencies {
…
detektPlugins("io.gitlab.arturbosch.detekt:detekt-formatting:$detekt_version")
detektPlugins("io.gitlab.arturbosch.detekt:detekt-cli:$detekt_version")
}
detekt {
// relative path from module path.
basePath = projectDir
// preconfigure defaults
buildUponDefaultConfig = true
// activate all available (even unstable) rules.
allRules = false
// point to your custom config defining rules to run, overwriting default behavior
// config = files("$projectDir/config/detekt.yml")
// a way of suppressing issues before introducing detekt
// baseline = file("$projectDir/config/baseline.xml")
reports {
// checkstyle like format mainly for integrations like Jenkins
xml {
enabled = true
destination = file("detektReport/${name}.xml")
}
// observe findings in your browser with structure and code snippets
html {
enabled = true
destination = file("detektReport/${name}.html")
}
// similar to the console output, contains issue signature to manually edit baseline files
txt {
enabled = true
destination = file("detektReport/${name}.txt")
}
// standardized SARIF format (https://sarifweb.azurewebsites.net/) to support integrations with Github Code Scanning
sarif {
enabled = true
destination = file("detektReport/${name}.sarif")
}
}
}
gradle syncする
Android StudioのTerminalから gradlew detekt
問題がたくさん出てBUILD FAILEDする
レポートが出力されるのを確認
設定ファイルの生成
Android StudioのTerminalから
gradlew detektGenerateConfig
gradlew detektBaseline
以下のファイルが作られる。
- プロジェクト/config/detekt/detekt.yml
- プロジェクト/モジュール/detekt-baseline.xml
統一性がないな。配置を揃えよう。
- プロジェクト/config/detekt/config.yml
- プロジェクト/config/detekt/baseline.xml
モジュールのbuild.gradleのdetekt{}
の中に追記
// a way of suppressing issues before introducing detekt
baseline = file("$rootDir/config/detekt/baseline.xml")
// point to your custom config defining rules to run, overwriting default behavior
config = files("$rootDir/config/detekt/config.yml")
gradlew sync
して gradlew detekt
すると警告0になる。
なぜなら生成されたbaseline.xmlが既存の警告を行単位で覚えて無効化してるからだ。
XML中の<ID>…</ID>
をまるっとコメントアウトしておく。
設定の変更
config/detekt/config.yml の complexity.警告名 を変更する。
- complexity.ComplexMethod.threshold を15から24に変更するとメソッドの行数の警告が緩和される。
- complexity.LargeClass.threshold を600から2000に変更するとクラスの行数の警告が緩和される。
コード上で警告を抑制したい場合は @Suppress(“UnnecessaryAbstractClass”) など警告名を書ける。
その後
早速なにか問題を踏んでしまった。 issueを投げて放置。https://github.com/detekt/detekt/issues/3884
You must log in or register to comment.