The Detekt (a Kotlin static analysis tool) integration for the Bazel build system.
- configuration and baseline files;
 - HTML, text and XML reports;
 - plugins;
 - customizable Detekt version and JVM flags;
 - persistent workers support;
 - and more.
 
bazel_dep(name = "rules_detekt", version = "...")First of all you need to declare the rule in the WORKSPACE file.
Please refer to GitHub releases for the version and
the SHA-256 hashsum.
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
rules_detekt_version = "see-github-releases-page"
rules_detekt_sha = "see-github-releases-page"
http_archive(
    name = "rules_detekt",
    sha256 = rules_detekt_sha,
    strip_prefix = "bazel_rules_detekt-{v}".format(v = rules_detekt_version),
    url = "https://github.com/buildfoundation/bazel_rules_detekt/archive/v{v}.tar.gz".format(v = rules_detekt_version),
)
load("@rules_detekt//detekt:dependencies.bzl", "rules_detekt_dependencies")
rules_detekt_dependencies()
load("@rules_detekt//detekt:toolchains.bzl", "rules_detekt_toolchains")
rules_detekt_toolchains()Users on Bazel releases prior to 5.1.0 need to enable the JSON Persistent Worker protocol in their .bazelrc like so:
build --experimental_worker_allow_json_protocolThis option became stable and enabled by default for newer Bazel releases.
Once declared in the WORSKPACE or MODULE.bazel file, the rule can be loaded in the BUILD file.
load("@rules_detekt//detekt:defs.bzl", "detekt_test")
detekt_test(
    name = "my_detekt",
    srcs = glob(["src/main/kotlin/**/*.kt"]),
)See available attributes.
$ bazel build //mypackage:my_detektResults will be cached on successful runs.
Change the MODULE.bazel file:
detekt = use_extension("//detekt:extensions.bzl", "detekt")
detekt.detekt_version(
    version = "x.x.x",
    sha256 = "x.x.x.sha256",
)
use_repo(detekt, "detekt_cli_all")Or change the WORKSPACE file:
load("@rules_detekt//detekt:versions.bzl", "detekt_version")
load("@rules_detekt//detekt:dependencies.bzl", "rules_detekt_dependencies")
rules_detekt_dependencies(
    detekt_version = detekt_version(
        version = "x.x.x",
        sha256 = "x.x.x.sha256",
    )
)Define a toolchain in a BUILD file:
load("@rules_detekt//detekt:toolchain.bzl", "detekt_toolchain")
detekt_toolchain(
    name = "my_detekt_toolchain_impl",
    jvm_flags = ["-Xms16m", "-Xmx128m"],
)
toolchain(
    name = "my_detekt_toolchain",
    toolchain = "my_detekt_toolchain_impl",
    toolchain_type = "@rules_detekt//detekt:toolchain_type",
)Change the WORKSPACE file:
load("@rules_detekt//detekt:toolchains.bzl", "rules_detekt_toolchains")
rules_detekt_toolchains(toolchain = "//mypackage:my_detekt_toolchain")