Skip to content
CAI
Software that uses CAICheck a score

AdRoll/rebar3_hank

64.7

Adequate · 2 October 2026

2k

lines of production code

Erlang

primary language

2

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

rebar3\_hank is an Erlang static analysis plugin that detects dead code and redundant definitions within a codebase. It provides a suite of rules to identify unused macros, records, callbacks, header files, configuration options, and function arguments. The tool integrates with rebar3 to allow developers to scan their projects and configure exclusions for specific files or rules.

Features

Initial release of rebar3\_hank, the Erlang dead code cleaner

This change introduces the rebar3\_hank plugin, an Erlang static analysis tool that detects dead code such as unused macros, records, callbacks, and function arguments. The repository is initialized with a rebar3 configuration requiring OTP 27 and katana\_code 2.5.1, along with documentation, a code of conduct, and configuration for linting, spell-checking, and formatting.

(repo-wide) · high confidence

Introduce rebar3 plugin for Erlang dead code detection

Adds the \rebar3\_hank\ plugin, providing a new \rebar3 hank\ command that scans Erlang source files for dead code. The tool analyzes the codebase using configurable rules, supports ignoring specific files or rules via configuration, and warns users about unused ignore directives to keep configuration clean.

src · high confidence

New static analysis rules for unused code and configuration

This release introduces several new rules to detect unused or redundant code and configuration: \single\_use\_hrls\ flags header files included by only one module; \single\_use\_hrl\_attrs\ detects \-define\ and \-record\ attributes in header files used by only one module; \unused\_hrls\ identifies header files that are never included; \unused\_macros\ finds macro definitions that are never used; \unused\_record\_fields\ detects record fields that are never accessed; \unused\_callbacks\ warns about behavior callbacks defined but not called within the module; \unused\_configuration\_options\ finds options in \.config\ and \.app.src\ files that are not referenced in the code; and \unnecessary\_function\_arguments\ identifies function arguments that are consistently ignored across all clauses. These rules help clean up codebases by highlighting dead code and redundant definitions.

src/rules · high confidence

Test coverage

Added test fixtures for Erlang header file analysis; Added test fixtures for configuration parsing edge cases; Added test fixtures for single-use HRL attributes; Added test fixtures for the unnecessary\_function\_arguments rule; Added test suite for unused record field detection; Expanded test coverage for Hank analysis rules and ignore behaviors.

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

How this codebase got here

Score

  • CAI 72 → 65 (-7.7)
  • Rubric changed (rubric-2026.09.12 → rubric-2026.09.18) — scores are not directly comparable.

Lenses

  • Code Health 99 → 99 (+0.0)
  • Architecture 100 → 100 (+0.0)
  • Maturity 54 → 39 (-15.2)
  • Readiness 78 → 80 (+2.2)
  • Security 100 → 92 (-8.0)

Resolved (5)

  • Coverage not measured — no coverage collector is wired up
  • Documentation: no architecture or design documentation (README.md)
  • Documentation: no installation or build instructions (README.md)
  • Documentation: no usage examples (README.md)
  • Off-boarding risk: anonymized user #1

New (3)

  • End-of-life runtime: Erlang/OTP 24
  • Off-boarding risk: anonymized user #1
  • Outdated: katana_code

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

AdRoll/rebar3_hank was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.

About this page

  • The score is its most recent published measurement, taken on 2 October 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit f1420e92cec09207f1fe899a07363e479d6a54f8 — the exact code this score is about.
  • Scored under rubric-2026.09.18 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-e569280dd5e2.