Skip to content

alt text

AdlerCov

Powerful code coverage visualization

AdlerCov converts coverage reports generated by Cobertura, GoCover, OpenCover or lcov into human readable reports in various formats.

The reports show the coverage quotas and also visualize which lines of your source code have been covered.

AdlerCov supports merging several coverage files into a single report.

Originally a Go port of the excellent ReportGenerator by Daniel Palme, AdlerCov has grown into a standalone, forward-looking tool. Built in Go, it focuses on performance, simplicity - tailored for today’s development workflows.

Motivation

ReportGenerator is a mature and feature-rich tool that has served the .NET ecosystem for over 14 years. Its robustness and design inspired this project, which started as a Go port but has since evolved into something more.

The motivations for creating AdlerCov:

  1. For Study: Originally an effort to explore not just coverage formats and report generation, but also the challenges of translating a project from one language to another - while keeping the result idiomatic and aligned with best practices in the target language (Go).
  2. Dependency-Free: A lightweight, native binary that runs anywhere without .NET or external runtimes - ideal for containers and CI/CD pipelines.
  3. Modern Extensibility: Designed in Go with clean architecture, enabling rapid extension for new formats and native Go features like coverage.out.

Feature Status

While AdlerCov began by mirroring ReportGenerator’s capabilities, it is now diverging with Go-native enhancements and a growing list of planned features.

Feature Category Feature ReportGenerator AdlerCov Notes
Input Formats Cobertura Core support.
Go Cover Native coverage.out parser.
OpenCover, JaCoCo, etc. Planned.
Multiple/Merged Reports Supports unified summaries.
Output Formats HTML (SPA) Angular frontend.
TextSummary, lcov Fully supported.
Others (Badge, JSON, XML, etc.) Coming soon.
Core Features Assembly/Class/File Filtering Implemented.
Branch & Method Coverage
Cyclomatic Complexity Go-native; C# WIP.
History / Trend Charts Not yet implemented.
Risk Hotspots Not yet implemented.
Raw Mode (no merging) Planned.

Command Line Interface

AdlerCov mirrors the familiar command-line interface of ReportGenerator while following idiomatic Go CLI patterns.

Argument ReportGenerator AdlerCov Description
report Input coverage reports.
output Output directory.
sourcedirs Optional source paths.
reporttypes Output formats.
assemblyfilters Include/exclude filters.
classfilters Include/exclude filters.
filefilters Include/exclude filters.
verbosity Log level.
tag Optional label.
title Custom report title.
riskhotspotassemblyfilters Filters for hotspots.
riskhotspotclassfilters Filters for hotspots.
historydir TODO
plugins TODO

Why "AdlerCov"?

The name AdlerCov combines “Adler” (German for eagle) with coverage, evoking the image of a high-flying, sharp-eyed bird analyzing your entire codebase. It reflects the project's mission: to help developers detect weaknesses and gaps in their test coverage with clarity and accuracy.

How to Contribute

This project is actively evolving - your contributions are highly valued! Whether you're:

  • Porting features from ReportGenerator
  • Adding new input/output formats
  • Optimizing
  • Writing tests
  • Adding example projects

I would love your help.

System Design

AdlerCov is built around modular design principles, enabling easy expansion and maintenance.

  • Entrypoint (cmd/main.go): Orchestrates the app lifecycle, parses CLI args, and composes required components like parsers and processors.
  • Configuration (internal/reportconfig, internal/settings): Centralized management for user inputs, output directories, filters, and report types.
  • Parser Factory (internal/parsers): Accepts a list of parser implementations (e.g., Cobertura, GoCover) and selects the correct one per file.
  • Language Processors (internal/language): Understands language-specific behavior (e.g., formatting .cs vs .go) and metrics like cyclomatic complexity.
  • Intermediate Model (internal/model): A standardized format to decouple input parsing from output generation.
  • Analyzer (internal/analyzer): Merges parsed reports into a unified summary, allowing for combined views across test runs or languages.
  • Reporters (internal/reporter): Converts processed data into human-readable outputs like HTML or text summaries.
  • Angular SPA (angular_frontend_spa): A full-featured, dynamic frontend for exploring results with filtering, sorting, and collapsible sections.

Feature Requests

If you're missing a feature from the original ReportGenerator or have new ideas, please open an issue and include:

  1. Feature description
  2. Reference (link or example from ReportGenerator)
  3. Sample CLI usage
  4. Sample input/output if possible

This context makes implementation much smoother.

License