NATIVE COVERAGE IN VS CODE AND VISUAL STUDIO

Coverage that lives inside your editor

Ingest lcov, llvm-cov JSON, Cobertura, JaCoCo, Istanbul, SimpleCov, Clover, OpenCover, coverage.py, gcov, Go, Coveralls, SonarQube, GNATcoverage, Bullseye, Visual Studio, Xcode, VectorCAST, Testwell CTC++, TRACE32, EMMA, UCIS/UCDB, NCover and dotCover tracefiles, normalise them into one canonical model, merge runs deterministically, and read the result straight from the editor gutters — in VS Code, and in Visual Studio 2022 and 2026 on every edition. No separate viewer to leave your editor for.

Download Read the User Guide Explore Features

Free to start. Fucini Coverage Studio runs free for a 14-day trial with everything unlocked. After that it settles into the free Community tier rather than locking you out — every feature except MC/DC, with generous monthly caps on a few. Upgrade any time for the unrestricted set, or unlock everything for free by sharing detailed usage telemetry. See plans →

Coming next: all of this coverage in Azure DevOps, as a free extension. Azure DevOps shows coverage on a build only as far as its own format goes — lines, and branches as a percentage. Fucini DevOps Studio will show the whole of what Coverage Studio reads: every one of these 25 formats, for every language, with MC/DC, conditions, the composite score and the gates, as a Coverage tab on the pipeline that produced it. Follow the news for the first release.

Covered/uncovered gutters with the Test Coverage panel openScreenshot pending — add assets/img/hero.png (see SCREENSHOTS.md).

When an AI wrote the tests

A generated test suite looks thorough. Coverage tells you whether it is.

A language model will write you a test suite in seconds, and it will read convincingly. What it cannot tell you is whether those tests reach anything that matters — and neither can line coverage, because a test with no assertions at all still lights up every line it touches.

◆ Decisions, not just lines

MC/DC and branch coverage show whether each decision was actually exercised, not merely whether the line was reached. Generated tests characteristically walk the happy path and leave the other side of every if untouched — which reads as 100% line coverage and 50% branch coverage. That gap is the finding.

◆ Functions nothing ever called

Dead-code detection lists the functions no test reached at all. A generated suite names them in its test titles and never gets to them, which is invisible in a green test run.

◆ Tied to the change in front of you

Diff coverage measures only what changed against a git baseline, so "the tests pass" becomes "the code you just accepted is tested". Works the same whether a person or an assistant wrote it.

None of this proves a test is good — nothing can. It tells you, precisely and per line, what was never run: the part a reviewer cannot hold in their head and an assistant will not volunteer. Works with TypeScript and JavaScript through Vitest, Jest or nyc, and with C, C++, Java and Ruby through the tracefiles those toolchains already emit.

Why it's different

One model, every format, zero custom viewer

◆ Twenty-five formats in

LCOV, llvm-cov JSON, Cobertura, JaCoCo, Istanbul/nyc, SimpleCov, Clover, OpenCover, coverage.py, gcov JSON and plain text, Go, Coveralls, SonarQube, GNATcoverage, Bullseye, Visual Studio, Xcode, VectorCAST, Testwell CTC++, TRACE32, EMMA, UCIS/UCDB, NCover and dotCover — auto-detected and merged deterministically with recorded provenance.

◆ Native UI out

Line, branch and function gutters, the overview ruler, Explorer badges and a Covered Files view.

◆ MC/DC & regions

Modified Condition/Decision Coverage, region and C++ instantiation coverage from llvm-cov, with per-decision hover breakdowns.

◆ Safety-weighted score

A single Weighted Harmonic Mean across every metric, with weights aligned to IEC 61508 / ISO 26262 / DO-178C tiers.

◆ Compliance gating

COMPLIANT / NON-COMPLIANT verdicts with per-metric thresholds and strict, whm, both or either modes.

◆ Diff coverage

Restrict decorations to lines changed versus a git base ref — perfect for reviewing exactly what a PR did or didn't cover.

Up and running in 30 seconds

  1. Install the extension and open your project.
  2. Run your tests — Command Palette → Fucini Coverage: Run Tests with Coverage. It recognises vitest, jest, pytest, go, cargo, dotnet, maven, gradle, phpunit and ctest, runs your tests with coverage on and loads what they write. Already have a tracefile? Fucini Coverage: Pick Coverage File loads it and remembers it.
  3. Open a source file — the gutter shows which lines ran, the status bar the file’s percentage, a hover each line’s hit count, and the run is in the Coverage view and in VS Code’s own Test Coverage panel. From then on it reloads by itself whenever the tracefile changes.

Requires VS Code ≥ 1.88, or Visual Studio 2022 or 2026 — Community, Professional or Enterprise — plus a coverage tracefile your project already produces. In Visual Studio 2022 the built-in coverage is Enterprise-only; Coverage Studio for Visual Studio shows it on Community and Professional too, from the file your build already writes.

How it compares

VS Code itself and several free extensions show coverage too. This is what each one’s own documentation says it does, as of September 2026 — where a README does not mention something, the table says so rather than guessing.

Fucini Coverage StudioVS Code, built inCoverage GuttersCode Coverage (markis)Gcov Viewer
Where the coverage comes from25 tracefile formats, plus PIT and Stryker mutation reportsa testing extension that reports coveragelcov and XML fileslcov filesGCC’s .gcda files, through gcov
Uncovered lines in the editor✓✓✓✓, and in Problems✓
Branch coverage, per arm✓when the testing extension reports itnot describednot describednot described
MC/DC✓ (Pro)—not describednot describednot described
Several tracefiles merged, and which one covered each line✓—several files supportednot describednot described
Reloads when the tracefile changes✓shows the last test run✓not describednot described
Diff coverage, thresholds and history✓coverage shown in the diff editornot describednot describednot described
HTML reportgenerated, self-hosted—previews an existing onenot describednot described
Coverage for AI agents: language-model tools and an MCP server✓not describednot describednot describednot described
The tests that ran a line, and the tests your changes affect✓coverage per test, when the testing extension reports itnot describednot describednot described
Mutation testing results in the editor✓ (PIT, Stryker)not describednot describednot describednot described
A gate on new code✓not describednot describednot describednot described
The same numbers in Visual Studio and on the command line✓—not describednot describednot described

It is not either/or with VS Code’s own view: every load is published to the native Test Coverage panel as well, filter by test included. Something here out of date? Say so on the contact page.

Supported formats

FormatTypical file
LCOVlcov.info, *.info
llvm-cov JSONllvm-cov export --format=json
Cobertura XMLcoverage.xml
JaCoCo XMLjacoco.xml
Istanbul / nyccoverage-final.json
SimpleCov (Ruby).resultset.json, coverage.json
Clover XMLclover.xml
OpenCover XMLcoverage.opencover.xml
coverage.py JSONcoverage.json (coverage json)
gcov / gcovr JSONgcov --json-format --stdout, gcovr --json
Go coverage profilecoverage.out
SonarQube generic<coverage version="1"> XML
GNATcoverage XML (Ada)gnatcov coverage --annotate=xml
BullseyeCoverage XMLcovxml output
Visual Studio.coveragexml (dotnet-coverage convert)
Coveralls JSONcoveralls.json
Xcode xccov JSONxcrun xccov view --report --json
See every feature Full User Guide