oxc_coverage_instrument
Istanbul-compatible JavaScript/TypeScript coverage instrumentation, built on the Oxc parser. 58x faster than istanbul-lib-instrument.
Why
swc-coverage-instrument fills this role for SWC. There is no equivalent for the Oxc ecosystem. Any tool built on oxc_parser that needs coverage instrumentation currently has to pull in SWC or Babel.
This crate fills that gap. AST-level instrumentation via oxc_traverse + oxc_codegen produces correct Istanbul-compatible output, verified against the canonical istanbul-lib-instrument on 25 shared fixtures.
Install
Rust
[]
= "0.2"
Node.js
CLI
Usage
Rust
use ;
let source = "function add(a, b) { return a + b; }";
let result = instrument.unwrap;
// Istanbul-compatible coverage map
assert_eq!;
// Instrumented source with counters injected
println!;
Node.js
import from 'oxc-coverage-instrument';
const result = ;
result.; // instrumented source
const coverageMap = JSON.; // Istanbul format
result.; // source map JSON (if enabled)
CLI
# Print instrumented code to stdout
# Write to file
# Print coverage map only
# With source map
Vite plugin example
import from 'oxc-coverage-instrument';
export
Reading existing coverage data
use parse_coverage_map;
// Parse a coverage-final.json file
let json = read_to_string.unwrap;
let map = parse_coverage_map.unwrap;
for in &map
What it tracks
| Dimension | What gets a counter |
|---|---|
| Statements | Every executable statement |
| Functions | Declarations, expressions, arrows, class methods |
| Branches | if/else, ternary, switch, &&/||/??, ??=/||=/&&=, default-arg |
| Pragmas | istanbul ignore next/if/else/file, v8 ignore, c8 ignore |
Istanbul conformance
Verified against istanbul-lib-instrument on 25 shared fixtures covering all branch types, function forms, and edge cases. 175 automated conformance checks validate:
- Function counts and names match exactly
- Branch counts, types, and location counts match exactly
- Statement counts within tolerance
- JSON structure matches Istanbul's field set
- Instrumented output re-parses as valid JS
Performance
| Tool | Throughput | Relative |
|---|---|---|
| oxc-coverage-instrument | 50-67 MiB/s | 58x faster |
| istanbul-lib-instrument | 1.1 MiB/s | baseline |
From Node.js (via napi): ~19 MiB/s (18x faster than Istanbul).
Architecture
source code (JS/TS)
|
v
oxc_parser -- parse to AST
|
v
SemanticBuilder -- build scope tree
|
v
CoverageTransform -- traverse AST, inject ++cov().s[N] counters
|
v
oxc_codegen -- emit instrumented code + source map
|
v
instrumented code + coverage map
Related projects
| Project | AST | Notes |
|---|---|---|
istanbul-lib-instrument |
Babel | The canonical Istanbul instrumenter |
swc-coverage-instrument |
SWC | SWC equivalent (~407K monthly npm downloads) |
| this crate | Oxc | First Oxc-native coverage instrumenter, 58x faster |
Compatibility
- Rust: 1.92+ (2024 edition)
- Oxc: 0.124.x
- Istanbul:
coverage-final.jsonv3+ format - Node.js: 18+ (via napi-rs)
License
MIT