coverage
stableCode coverage tracker that records which lines of which files have been executed, computes percentages, and formats summary reports.
use plugin coverage Plugin snippets can be edited in the Playground, but native capabilities are executed locally with the Zolo CLI.
Functions (14)
- CoverageTracker.new Create a new coverage tracker instance
- mark_line Mark a single line as covered
- mark_lines Mark multiple lines as covered
- set_total_lines Set total line count for a file
- is_covered Check if a specific line is covered
- line_count Get number of covered lines for a file
- percentage Get coverage percentage for a file
- file_report Get coverage report table for a file
- summary Get aggregate coverage summary
- uncovered_lines List uncovered line numbers for a file
- reset Clear all coverage data
- merge Merge coverage data from another tracker
- files List all tracked file names
- format_report Format a summary table as a string
From import to result
- 01Import only what you use
- 02Copy the smallest example
- 03Run it with the Zolo CLI
Create a new coverage tracker instance
Creates a new coverage tracker handle. The tracker maintains a per-file set of covered line numbers and optional total line counts.
use plugin coverage::{CoverageTracker}
let cov = CoverageTracker.new()Mark a single line as covered
Records that a specific line number in a file was executed.
use plugin coverage::{CoverageTracker}
let cov = CoverageTracker.new()
cov.mark_line("src/main.zolo", 10)
cov.mark_line("src/main.zolo", 11)
cov.mark_line("src/main.zolo", 15)Mark multiple lines as covered
Records multiple line numbers for a file at once. lines is a table of
integer line numbers.
use plugin coverage::{CoverageTracker}
let cov = CoverageTracker.new()
cov.mark_lines("src/utils.zolo", #{1: 5, 2: 6, 3: 7, 4: 10, 5: 11})Set total line count for a file
Sets the total number of lines in a file. Required to compute coverage
percentages with percentage and file_report.
use plugin coverage::{CoverageTracker}
let cov = CoverageTracker.new()
cov.set_total_lines("src/main.zolo", 100)
cov.mark_lines("src/main.zolo", #{1: 1, 2: 2, 3: 5, 4: 10})
print("coverage: {cov.percentage("src/main.zolo")}%")Check if a specific line is covered
Returns true if the given line number in the given file has been marked as covered.
use plugin coverage::{CoverageTracker}
let cov = CoverageTracker.new()
cov.mark_line("src/app.zolo", 42)
print(cov.is_covered("src/app.zolo", 42))
print(cov.is_covered("src/app.zolo", 43))Get number of covered lines for a file
Returns the number of distinct covered lines recorded for a file.
use plugin coverage::{CoverageTracker}
let cov = CoverageTracker.new()
cov.mark_lines("src/app.zolo", #{1: 1, 2: 3, 3: 5})
print("covered lines: {cov.line_count("src/app.zolo")}")Get coverage percentage for a file
Returns the coverage percentage (0–100) for a file. Requires
set_total_lines to have been called for that file; returns 0 otherwise.
use plugin coverage::{CoverageTracker}
let cov = CoverageTracker.new()
cov.set_total_lines("src/app.zolo", 50)
cov.mark_lines("src/app.zolo", #{1: 1, 2: 2, 3: 3, 4: 4, 5: 5})
print("coverage: {cov.percentage("src/app.zolo")}%")Get coverage report table for a file
Returns a summary table for a single file with covered_lines,
total_lines, and percentage fields.
use plugin coverage::{CoverageTracker}
let cov = CoverageTracker.new()
cov.set_total_lines("src/app.zolo", 200)
cov.mark_lines("src/app.zolo", #{1: 10, 2: 20, 3: 30})
let report = cov.file_report("src/app.zolo")
print("covered: {report["covered_lines"]}/{report["total_lines"]}")Get aggregate coverage summary
Returns aggregate coverage across all tracked files. Returns files,
total_lines, covered_lines, and percentage.
use plugin coverage::{CoverageTracker, format_report}
let cov = CoverageTracker.new()
cov.set_total_lines("src/a.zolo", 100)
cov.set_total_lines("src/b.zolo", 50)
cov.mark_lines("src/a.zolo", #{1: 1, 2: 2, 3: 3})
cov.mark_lines("src/b.zolo", #{1: 1, 2: 2})
let s = cov.summary()
print(format_report(s))List uncovered line numbers for a file
Returns a sorted table of line numbers (1 to the highest covered line) that have not been marked as covered.
use plugin coverage::{CoverageTracker}
let cov = CoverageTracker.new()
cov.mark_line("src/app.zolo", 1)
cov.mark_line("src/app.zolo", 3)
cov.mark_line("src/app.zolo", 5)
let missing = cov.uncovered_lines("src/app.zolo")
print("uncovered: {missing[1]}, {missing[2]}")Clear all coverage data
Clears all covered lines and total line counts, resetting the tracker to an empty state.
use plugin coverage::{CoverageTracker}
let cov = CoverageTracker.new()
cov.mark_line("src/app.zolo", 1)
cov.reset()
print("after reset: {cov.line_count("src/app.zolo")}")Merge coverage data from another tracker
Merges coverage data from another CoverageTracker into this one. Covered
lines are unioned; total line counts take the maximum of both trackers.
use plugin coverage::{CoverageTracker}
let cov1 = CoverageTracker.new()
let cov2 = CoverageTracker.new()
cov1.mark_line("src/app.zolo", 1)
cov2.mark_line("src/app.zolo", 2)
cov1.merge(cov2)
print("total covered: {cov1.line_count("src/app.zolo")}")List all tracked file names
Returns a sorted table of all file names that have been tracked.
use plugin coverage::{CoverageTracker}
let cov = CoverageTracker.new()
cov.mark_line("src/a.zolo", 1)
cov.mark_line("src/b.zolo", 1)
let names = cov.files()
print("tracked: {names[1]}, {names[2]}")Format a summary table as a string
Formats a coverage summary table (from summary()) as a human-readable
multi-line string. This is a standalone function, not a method.
use plugin coverage::{CoverageTracker, format_report}
let cov = CoverageTracker.new()
cov.set_total_lines("src/main.zolo", 100)
cov.mark_lines("src/main.zolo", #{1: 1, 2: 2, 3: 3, 4: 4, 5: 5})
print(format_report(cov.summary()))