Project

uncov

0.0
There's a lot of open issues
A long-lived project that still receives updates
uncov compares your current branch with a target branch, identifies changed files, and reports on test coverage for those changes
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
 Dependencies

Runtime

~> 1.1
~> 3.1
~> 1.7
 Project Readme

Uncov

Uncov analyzes test coverage for changed files in your Git repository, helping you ensure that all your recent changes are properly tested.

Uncov uses git diff to detect changes and simplecov reports to detect uncovered code.

The uncov Manifesto

report diff_lines to terminal output

Features

  • Compare your working tree to a target branch
  • Identify changed Ruby files
  • Run tests automatically for (changed) relevant files
  • Print report of uncovered lines in (changed) files
  • Print report of covered :nocov: lines in (changed) files
  • Extensible with gem plugins

Installation

gem install uncov

Or add to your Gemfile (only for convenience):

gem 'uncov', require: false

Usage

Basic usage:

uncov

Display configuration options

$ uncov -h
Usage: uncov [options]
    -t, --target TARGET              Target branch for comparison, default: "HEAD"
    -r, --report FILTER              Report filter to generate file/line list, one_of: "DiffFiles", "DiffLines"(default), "FileSystem", "GitFiles", "NocovLines", "Simplecov"
    -o, --output-format FORMAT       Output format, one_of: "Terminal"(default)
    -C, --context LINES_NUMBER       Additional lines context in output, default: 1
        --test-command COMMAND       Test command that generates SimpleCov, default: "COVERAGE=true bundle exec rake test"
        --simplecov-file PATH        SimpleCov results file, default: "autodetect"
        --relevant-files FN_GLOB     Only show uncov for matching code files AND trigger tests if matching code files are newer than the report, default: "{{bin,exe,exec}/*,{app,lib}/**/*.{rake,rb},Rakefile}"
        --relevant-tests FN_GLOB     Trigger tests if matching test files are newer than the report, default: "{test,spec}/**/*_{test,spec}.rb"
        --nocov-ignore               Ignore :nocov: markers - consider all lines, default: false
        --nocov-covered              Report :nocov: lines that have coverage, default: false
        --debug                      Get some insights, default: false
    -h, --help                       Print this help

Report FILTERs:
 DiffFiles - Report missing coverage on added/changed files in the git diff
 DiffLines - Report missing coverage on added lines in the git diff
FileSystem - Report missing coverage on file system
  GitFiles - Report missing coverage on files tracked with git
NocovLines - Report coverage on nocov lines, requires one or both: --nocov-ignore / --nocov-covered
 Simplecov - Report missing coverage on files tracked with simplecov

Report FILTERs take NOTICE:
git*/diff*  - filters will not consider new files unless added to the git index with `git add`.
nocov*      - filters/flags only work with coverage/.resultset.json SimpleCov files,
              coverage.json does not provide the information needed.

FN_GLOB: shell filename globing -> https://ruby-doc.org/core-3.1.1/File.html#method-c-fnmatch
         in bash: `shopt -s extglob dotglob globstar` and test with `ls {app,lib}/**/*.rb`

uncov 0.6.1 by Michal Papis <mpapis@gmail.com>

Configuration file

.uncov file in the directory where it's ran stores default options, specify one argument per line - this eliminates the need for special parsing of the file.

Example:

--target
develop
--test-command
COVERAGE=1 rspec

Plugins

Uncov uses pluginator to load plugins.

See lib/plugins/uncov for default plugins.

To create your own plugin, create a gem with a lib/plugins/uncov/... structure - same as uncov has, the plugins will be loaded automatically.

When you use uncov from a Gemfile then the new gam has to be added there too.

Using in CI

uncov uses itself to check new missing code coverage .github/workflows/ci.yml, no need to set minimal, always get better.

Ideas for CI:

  • run uncov after running your tests with coverage enabled,
  • be less restrictive - provide custom --relevant-files pattern that excludes some paths you do not think should be always tested.

Requirements

  • Ruby 3.2+
  • A Git repository
  • SimpleCov for test coverage

Contributing

Contributing, developing, pull requests, releasing, security -> CONTRIBUTING.md.

License

The gem is available as open source under the terms of the MIT License.