rebar3_uncovered
[ 
A Rebar 3 plugin that reports on uncovered lines from tests. Run it after
rebar3 eunit or rebar3 ct to see which lines your tests missed. Use --git
to narrow the report to lines changed on this branch.
A machine-readable format is also available for script / CI / LLM consumption.
Prefix with QUIET=1 to suppress Rebar's own log messages:
$ QUIET=1 rebar3 uncovered --git --format=raw --context=0 --counts=false
src/gaffer_queue.erl:141 _ = gaffer_hooks:with_hooks(
src/gaffer_queue.erl:142 Hooks, [gaffer, queue, delete], Name, fun(N) -> N end
src/gaffer_queue.erl:144 ok = gaffer_sup:stop_queue(gaffer_queue_sup:pid(Name)),
src/gaffer_queue.erl:145 persistent_term:erase({gaffer_queue, Name})
src/gaffer_queue.erl:151 {error, not_found} -> okInstallation
Add the plugin to your project's rebar.config:
{project_plugins, [rebar3_uncovered]}.
To install it globally for all projects, add it to
~/.config/rebar3/rebar.config:
{plugins, [rebar3_uncovered]}.Usage
rebar3 uncovered [options] [-- path ...]
rebar3 help uncovered
Positional arguments after -- are used as file or directory filters.
Git scopes
Git organizes your working state as layers on top of trunk:
unstaged # Edits not yet added to the index
staged # Changes added to the index but not committed
HEAD # The latest commit on this branch
HEAD~X # Some intermediary commit between trunk and HEAD
trunk # Base branch (origin/main, origin/master, …)--git-scope picks which layer to diff against, which determines what counts
as "changed":
auto(default): diff against trunk: branch commits, staged, and unstaged all countHEAD: only uncommitted work (staged + unstaged)staged: only staged changesunstaged: only unstaged changes-
Any git ref (
origin/main,HEAD~1, a commit SHA, etc.): diff against that ref
Examples
Show uncovered lines in the dirty working tree before committing:
rebar3 uncovered --git --git-scope HEADShow uncovered lines on this branch against trunk:
rebar3 uncovered --gitIn CI or in LLM tooling, check that all changed lines are covered by tests (raw format, no context lines):
QUIET=1 rebar3 uncovered --git --format=raw --context=0 --counts=falseShow uncovered lines against a specific ref:
rebar3 uncovered --git --git-scope origin/main
rebar3 uncovered --git --git-scope HEAD~3All Options
--help,-hShow usage information and available options.
--git,-gFilter uncovered lines to only those changed in the current git diff. Disabled by default.
--git-scopeWhich git diff to consider. Only has effect when
--gitis enabled. Refs include all changes between where they diverged andHEAD.auto(default): diff against trunk, resolved as the first oforigin/HEAD,origin/main,origin/master,HEADstaged: only changes added to the indexunstaged: only working tree changes-
any git ref (e.g.
HEAD,HEAD~1,origin/main, a commit SHA): diff against that ref
--coverageWhich coverage data to use.
aggregate(default): combine all test suiteseunit: only EUnit coverage datact: only Common Test coverage data
--format,-fOutput format.
human(default): color-coded table with line numbers, coverage counts, and source contextraw: one line per uncovered line in a grep-like format suitable for scripts, CI, or LLM consumption. Set the environment variableQUIET=1to suppress Rebar's own log messages for clean output
--context,-CNumber of covered lines to show around each uncovered line for context.
<integer>(default:2): number of context lines to show0: show only uncovered linesall: show the entire function
--countsShow how many times each line was executed. Use
--counts falseto hide the counts column. Enabled by default.--colorColor output. Respects the
NO_COLORenvironment variable.auto(default): enable color when output is a terminalalways: force color onnever: disable color
Changelog
See the Releases page.
Code of Conduct
Find this project's code of conduct in Contributor Covenant Code of Conduct.
Contributing
First of all, thank you for contributing with your time and energy.
If you want to request a new feature make sure to open an issue so we can discuss it first.
Bug reports and questions are also welcome. If you found a bug, please check that you're using the latest version first. If you have a question, search the issue database as it might have already been answered.
Contributions will be subject to the MIT License. You will retain the copyright.
For more information check out CONTRIBUTING.md.
Security
This project's security policy is made explicit in SECURITY.md.
Conventions
Versions
This project adheres to Semantic Versioning.
License
This project uses the MIT License.