Skip to main content
Version: Next

Welcome

detekt logo detekt in action

Features

  • Code smell analysis for your Kotlin projects.
  • Highly configurable rule sets.
  • Generate baselines to suppress existing issues for legacy projects while making sure no new issues are introduced.
  • Suppress issues in source files using @Suppress annotations.
  • Support for different report formats: HTML, Markdown, SARIF, XML (Checkstyle) and custom reports.
  • Extend detekt with custom rule sets and reports.
  • Complexity reports based on lines of code, cyclomatic complexity and number of code smells.
  • First party integration with Gradle with our Gradle plugin.
  • A community of third party plugins that adds more rules and features to detekt.

Quick Start with Gradle

Apply the following configuration to your Gradle project build file:

plugins {
id("io.gitlab.arturbosch.detekt") version("1.23.0")
}

repositories {
mavenCentral()
}

You can find what is the latest version of detekt in the release notes.

Once you have set up detekt in your project, simply run gradlew detekt.

To change the default behaviour of detekt rules, first generate yourself a detekt configuration file by running gradlew detektGenerateConfig task and applying any changes to the generated file.

Don't forget to reference the newly generated config inside the detekt { } closure. Optionally, it is possible to slim down the configuration file to only the changes from the default configuration, by applying the buildUponDefaultConfig option:

detekt {
toolVersion = "1.23.0"
config.setFrom(file("config/detekt/detekt.yml"))
buildUponDefaultConfig = true
}

To enable/disable detekt reports use the withType method to set defaults for all detekt tasks at once:

// Kotlin DSL
tasks.withType<Detekt>().configureEach {
reports {
xml.required.set(true)
html.required.set(true)
txt.required.set(true)
sarif.required.set(true)
md.required.set(true)
}
}
// Groovy DSL
tasks.withType(Detekt).configureEach {
reports {
xml.required.set(true)
html.required.set(true)
txt.required.set(true)
sarif.required.set(true)
md.required.set(true)
}
}

See reporting docs for more details on configuring reports.

Adding more rule sets

detekt itself provides a wrapper over ktlint as the formatting rule set which can be easily added to the Gradle configuration:

dependencies {
detektPlugins("io.gitlab.arturbosch.detekt:detekt-formatting:1.23.0")
}