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:
- 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).
- Dependency-Free: A lightweight, native binary that runs anywhere without .NET or external runtimes - ideal for containers and CI/CD pipelines.
- 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:
- Feature description
- Reference (link or example from ReportGenerator)
- Sample CLI usage
- Sample input/output if possible
This context makes implementation much smoother.
License
- AdlerCov is licensed under the Apache License, Version 2.0