coverage
stableCode coverage tracker that records which lines of which files have been executed, computes percentages, and formats summary reports.
use plugin coverage::{CoverageTracker.new, mark_line, mark_lines, …} 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
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()))