Skip to content
Plugins (190)

coverage

stable

Code coverage tracker that records which lines of which files have been executed, computes percentages, and formats summary reports.

use plugin coverage
14 functions Utilities
Runs with the native Zolo host

Plugin snippets can be edited in the Playground, but native capabilities are executed locally with the Zolo CLI.

/ filter jk navigate Esc clear
Functions (14)
  1. CoverageTracker.new Create a new coverage tracker instance
  2. mark_line Mark a single line as covered
  3. mark_lines Mark multiple lines as covered
  4. set_total_lines Set total line count for a file
  5. is_covered Check if a specific line is covered
  6. line_count Get number of covered lines for a file
  7. percentage Get coverage percentage for a file
  8. file_report Get coverage report table for a file
  9. summary Get aggregate coverage summary
  10. uncovered_lines List uncovered line numbers for a file
  11. reset Clear all coverage data
  12. merge Merge coverage data from another tracker
  13. files List all tracked file names
  14. format_report Format a summary table as a string

From import to result

  1. 01Import only what you use
  2. 02Copy the smallest example
  3. 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()))

Global index

Find your way through Zolo

Try an idea

Start here

9 results

9 results

en