Coverage Studio op de opdrachtregel 2.2026.4 — een bestand dat twee engines hebben gemeten, wordt één keer geteld, waar u de opdracht ook start
2026-10-04
Opgelost
- De map waarin u de opdracht start, bepaalt niet wat een rapport betekent. 2.2026.3 verankert de relatieve paden van een rapport in de map waarin dat rapport is geschreven — maar alleen voor een opdracht die ergens anders is gestart. Uitgevoerd vanuit de wortel van de boom die het meet, en dat is waar een coverage-opdracht normaal wordt uitgevoerd, werd een relatief pad nog steeds door die map beantwoord, en een bestand dat llvm-cov al volledig had genoemd, werd een tweede keer geteld: één boom van 5.258 regels las als 5.836. Alleen
--cwd en de eigen locatie van het rapport beslissen nu. Dezelfde correctie zit in beide editors, waar het de map was waaruit VS Code of Visual Studio toevallig was gestart. export --format json schreef de run over uw instellingen heen. Zijn bestand was fucini-coverage.json — de naam waaruit de instellingen worden gelezen — zodat de export in een gewoon ingerichte map juist de drempels vernietigde waartegen hij zojuist had geoordeeld. De run wordt naar coverage-run.json geschreven, en export en badge weigeren een --out die het instellingenbestand noemt. --cwd neemt een map, hoe u die ook typt. Een relatieve — --cwd ., --cwd ../tree — werd overgenomen zoals getypt en volgens de verkeerde padregels gelezen: op Windows meldde hij dat een half POSIX, half Windows geschreven instellingenbestand niet te lezen was, en vond hij helemaal geen rapporten. Een afsluitend scheidingsteken hoort ook niet meer bij de map. - Een vlag die niemand heeft opgegeven, is geen rapport.
summary -o out.json nam -o voor een rapport en meldde dat dat bestand niet bestaat. Alleen -h en -v zijn kort; -- geeft nog steeds een bestand door waarvan de naam met een streepje begint, en een vlag die vóór de opdracht is getypt wordt in de fout genoemd in plaats van met de hele help beantwoord. check --json zegt wat zijn exitcode zegt. Zonder ingestelde drempel schreef hij "passed": false naast exitcode 0, en een pipeline die de JSON las in plaats van de exitcode liet een run mislukken die de opdracht had laten slagen. passed is de exitcode in één woord; configured zegt dat er geen gate was. Een lege --lines "" wordt geweigerd in plaats van die gate stilletjes uit te zetten. - Een vergelijking legt de baseline waar zij de run legt.
pathRemap en de wortel die een rapport noemt werden op de run toegepast en niet op de baseline, zodat een baseline die op een buildserver was geschreven met niets paarde en de vergelijking meldde dat er niets was verschoven, naast een totaal dat zichtbaar wel was verschoven.
Coverage Studio op de opdrachtregel 2.2026.3 — een bestand dat twee engines hebben gemeten, is weer één bestand
2026-10-04
Opgelost
- De relatieve paden van een rapport horen bij de map waar dat rapport is geschreven. llvm-cov schrijft het volledige pad van een bestand; gcovr schrijft het relatief ten opzichte van de build-map waarin zijn rapport staat. Met beide rapporten van één boom somde
summary elk bestand dat de twee gemeenschappelijk hadden twee keer op — één keer met de cijfers van elke engine — en telde beide bij het totaal op, omdat een relatief pad geen basis had om vanaf te zoeken en uitkwam bij de map waarin de shell op dat moment stond. Eén boom van 5.258 regels werd gerapporteerd als 5.836, waarbij het overschot bij bestanden hoorde onder een pad dat er geen enkele bevat. Elk rapport wordt nu verankerd in zijn eigen map en de mappen erboven, tot aan de map waarin het commando draait, zoals beide edities het al doen — zo komen de twee samen als één verzameling bestanden, zonder een pathRemap-regel per build-map. - Een instellingenbestand dat met een byte-order-mark begint, werd ook geweigerd. Een editor op Windows kan die vóór de tekst schrijven; hij wordt niet langer als deel van de JSON gezien.
- Uitvoer die naar een lezer wordt gepipet die vroeg stopt, eindigt rustig.
summary gepipet naar head, of naar Select-Object -First van PowerShell, stierf met een onbehandelde EPIPE en een stacktrace. Dat de lezer de pipe sluit is zijn eigen keuze, geen fout van het commando: het eindigt nu met de exitcode die het had bereikt.
Coverage Studio op de opdrachtregel 2.2026.1 — een instellingenbestand met patronen wordt gelezen
2026-10-04
Opgelost
- Een instellingenbestand met patronen werd geweigerd. Met
**/*.lcov.info in het ene pad van fuciniCoverage.coverageFile.paths en **/coverage.json in het volgende eindigde elk commando met is not JSON: wat ertussen stond, werd voor commentaar aangezien. Het bestand wordt nu gelezen zoals de editors het lezen, met inbegrip van commentaar na een waarde en een komma vóór een sluithaak.
Coverage Studio op de opdrachtregel 2.2026.0 — fucini-coverage, de eerste release
2026-10-04
Toegevoegd
- De lezer op de opdrachtregel, gratis.
npm install -g fucini-coverage — dezelfde lezer als in de twee edities, voor de plekken waar geen editor is. Eén pakket, één gedrag op Windows, Linux, WSL en macOS, Node 20 of nieuwer.
check, de gate. Exitcode 1 onder een drempel voor regels, takken, functies, MC/DC, condities, regio's, mutatie of de gewogen score, uit de instellingen of van de opdrachtregel; --new-code 80 --base-ref origin/main beoordeelt de regels die een branch veranderde, uit een git diff die de tool zelf uitvoert; --require-reasons laat een uitsluitingsmarkering zonder reden falen.
summary, export, report, badge, compare. De totalen en elk bestand; de run als CSV per bestand of per functie, Markdown, LCOV, Cobertura, SARIF, de uitsluitingslijst, een badge of Fucini JSON; het HTML-rapport van meerdere pagina's; de badge gekleurd naar de schaal uit de instellingen; deze run tegenover een baseline, regressies eerst, met --fail-on-regression voor een pull-requestcheck.
mcp, voor een AI-agent. De zes tools van de edities, geserveerd over de run op 127.0.0.1 achter een token, met het item voor de mcp.json van de client afgedrukt.
- Het instellingenbestand van de Visual Studio-editie.
fucini-coverage.json naast de code, met de fuciniCoverage.*-sleutels van de VS Code-instellingen; .vscode/settings.json daaronder. Rapporten worden genoemd als bestanden, mappen of patronen, een .gz wordt uitgepakt, en elke opdracht documenteert zichzelf: fucini-coverage help <command>.
Coverage Studio for VS Code 2.2026.2 — De proefperiode begint met het antwoord van de licentieserver
2026-10-04
Gewijzigd
- De proefperiode van een nieuwe installatie begint met het eerste antwoord van de licentieserver. Totdat de extensie fucini.software één keer heeft bereikt, draait ze op het Community-niveau en zegt ze waarom. Een installatie die al in haar proefperiode zit of een licentie heeft, merkt niets.
- Geen proefperiode in een ontwikkelcontainer of een Codespace. Daar start de extensie op het Community-niveau; een abonnementscode, een sleutel of de 7-dagenpas ontgrendelt alles.
- Het gebruiksregister kent een machine aan een tweede hash, van de eigen identificatie van het besturingssysteem. Alleen de hash wordt verstuurd; zie het privacybeleid.
Coverage Studio voor Visual Studio 2.2026.1 — Kleine verbeteringen
2026-10-04
Opgelost
- Kleine verbeteringen. Een onderhoudsrelease: kleine correcties onder de motorkap, en niets dat verandert wat u ziet of hoe u het gebruikt.
Coverage Studio for VS Code 2.2026.1 — Kleine verbeteringen
2026-10-04
Opgelost
- Kleine verbeteringen. Een onderhoudsrelease: kleine correcties onder de motorkap, en niets dat verandert wat u ziet of hoe u het gebruikt.
Coverage Studio voor Visual Studio 2.2026.0 — De coverage op het scherm, voor AI-agents
2026-10-04
Toegevoegd
- De coverage op het scherm, voor AI-agents. Een agent die tests schrijft, kon ze uitvoeren en een percentage lezen; hij kon niet vragen wat Visual Studio weet. Zes tools beantwoorden dat, in woorden waar een agent naar kan handelen:
coverage_summary, coverage_gaps, tests_for_line, patch_coverage, coverage_delta en test_run_command. Een agent die MCP spreekt, bereikt ze via een server die Visual Studio draait wanneer fuciniCoverage.mcp.enabled aan staat — standaard uit, alleen op 127.0.0.1, achter een eigen token, en gesloten voor webpagina's. Copy MCP Server Configuration zet het item voor de client op het klembord. - Dezelfde cijfers als op het scherm. De tools antwoorden vanuit de run die geladen is — dezelfde uitsluitingen, dezelfde remapping — zodat een agent die de gaten van een functie moet dekken en een reviewer die naar de gutter kijkt, het over dezelfde regels hebben.
Gewijzigd
- Het plan van een sleutel beslist in Visual Studio wat het in VS Code beslist. Een plan dat een functie weglaat — MC/DC, het HTML-rapport, de namen van de tests die een regel uitvoerden — liet haar weg in VS Code en niet hier. Beide edities lezen nu dezelfde tabel: een functie die niet in het plan zit, wordt achtergehouden, en haar opdracht zegt dat.
- De minimumversie waar de licentieserver om vraagt, geldt ook hier. Beide edities dragen vanaf 2.2026.0 dezelfde versie, dus een build die ouder is dan dat minimum vraagt om een update, zoals de VS Code-editie doet.
Coverage Studio for VS Code 2.2026.0 — De coverage op het scherm, voor AI-agents
2026-10-04
Toegevoegd
- De coverage op het scherm, voor AI-agents. Een agent die tests schrijft, kon ze uitvoeren en een percentage lezen; hij kon niet vragen wat de editor weet. Zes tools beantwoorden dat, in woorden waar een agent naar kan handelen:
coverage_summary, coverage_gaps, tests_for_line, patch_coverage, coverage_delta en test_run_command. De eigen agent van VS Code heeft ze als language-model-tools, zonder iets in te stellen. Elke andere agent die MCP spreekt, bereikt ze via een server die de extensie draait wanneer fuciniCoverage.mcp.enabled aan staat — standaard uit, alleen op 127.0.0.1, achter een eigen token, en gesloten voor webpagina's. Copy MCP Server Configuration zet het item voor de client op het klembord. - Dezelfde cijfers als op het scherm. De tools antwoorden vanuit de run die geladen is — dezelfde uitsluitingen, dezelfde remapping — zodat een agent die de gaten van een functie moet dekken en een reviewer die naar de gutter kijkt, het over dezelfde regels hebben.
Coverage Studio voor Visual Studio 1.2026.22 — een bestand dat twee engines hebben gemeten, is één bestand
2026-10-04
Opgelost
- Een bestand dat twee engines hebben gemeten, is één bestand. llvm-cov schrijft het volledige pad van een bestand; gcovr schrijft het relatief ten opzichte van de build-map waarin zijn rapport staat. Een relatief pad wordt verankerd in de eigen map van het rapport en de mappen daarboven — maar daarvóór vroeg de resolver of het pad bestond zoals het er stond, en die vraag wordt beantwoord vanuit de map waarin Visual Studio zelf was gestart. Bevatte die map het bestand, dan bleef het pad relatief: het bestand had twee namen, stond twee keer in het Coverage-venster en telde twee keer mee in de totalen. Eén boom van 5.258 regels las als 5.836. Een pad dat geen eigen locatie noemt, wordt niet meer gevraagd; het wordt verankerd waar het rapport is geschreven, en de regel zegt het.
Coverage Studio voor VS Code 1.2026.23 — een bestand dat twee engines hebben gemeten is één bestand, en de gekozen gutter-modus blijft uit uw instellingen
2026-10-04
Opgelost
- Een bestand dat twee engines hebben gemeten, is één bestand. llvm-cov schrijft het volledige pad van een bestand; gcovr schrijft het relatief ten opzichte van de build-map waarin zijn rapport staat. Een relatief pad wordt verankerd in de eigen map van het rapport en de mappen daarboven — maar daarvóór vroeg de resolver of het pad bestond zoals het er stond, en die vraag wordt beantwoord vanuit de map waarin de extension host is gestart, na
code . dus uw projectmap. Het pad bleef dan relatief: het bestand had twee namen, stond twee keer in de Coverage-weergave en telde twee keer mee in de totalen. Eén boom van 5.258 regels las als 5.836. Een pad dat geen eigen locatie noemt, wordt niet meer gevraagd; het wordt verankerd waar het rapport is geschreven, en de regel zegt het. - De gutter-modus die u kiest geldt voor de sessie, en uw instellingen blijven zoals u ze hebt geschreven. Een modus kiezen in de statusbalk, in de kiezer of met Toggle Coverage Painting schreef die in
settings.json — een bestand dat in veel projecten onder versiebeheer staat en hier werd herschreven door een knop die bedoeld is om twee keer per minuut te worden ingedrukt. De keuze leeft nu voor de sessie, en een modus die u in uw instellingen hebt getypt wint nog steeds wanneer het venster opengaat.
Coverage Studio voor Visual Studio 1.2026.21 — Zou een test het merken? Een mutatierun bij de cursor
2026-10-03
Toegevoegd
- Run Mutation Tests Here. Coverage zegt dat een regel is uitgevoerd; een mutatietool zegt of een test zou merken dat hij fout is. De functie waarin de cursor staat — of de geselecteerde regels, of het bestand — is wat de runner van de map moet muteren, en zijn rapport wordt geladen naast de coverage op het scherm: Stryker.NET voor C#, StrykerJS voor JavaScript en TypeScript, PIT met Maven voor Java. De mutatierun van een project duurt een uur; die van één functie een minuut.
Coverage Studio for VS Code 1.2026.22 — Zou een test het merken? Een mutatierun bij de cursor
2026-10-03
Toegevoegd
- Run Mutation Tests Here. Coverage zegt dat een regel is uitgevoerd; een mutatietool zegt of een test zou merken dat hij fout is. De functie waarin de cursor staat — of de geselecteerde regels, of het bestand — is wat de runner van de map moet muteren, en zijn rapport wordt geladen naast de coverage op het scherm: Stryker.NET voor C#, StrykerJS voor JavaScript en TypeScript, PIT met Maven voor Java. De mutatierun van een project duurt een uur; die van één functie een minuut.
Coverage Studio voor Visual Studio 1.2026.20 — De app zelf, met coverage
2026-10-03
Toegevoegd
- Run App with Coverage… meet wat een mens bereikt, niet alleen wat de tests doen: de .NET-app van de map wordt gestart onder
dotnet-coverage van Microsoft, in een eigen console, en draait tot hij wordt gesloten. Wat is doorlopen, wordt dan geladen zoals elke run, en in een coverage-sessie opgeteld bij wat de tests uitvoerden. Vereist dotnet tool install --global dotnet-coverage.
Coverage Studio for VS Code 1.2026.21 — De app zelf, met coverage
2026-10-03
Toegevoegd
- Run App with Coverage… meet wat een mens bereikt, niet alleen wat de tests doen: de .NET-app van de map wordt gestart onder
dotnet-coverage van Microsoft, in een eigen console, en draait tot hij wordt gesloten. Wat is doorlopen, wordt dan geladen zoals elke run, en in een coverage-sessie opgeteld bij wat de tests uitvoerden. Vereist dotnet tool install --global dotnet-coverage.
Coverage Studio voor Visual Studio 1.2026.19 — Zip-artefacten van GitHub en GitLab
2026-10-03
Toegevoegd
- Een CI-baseline uit een zip-artefact. GitHub en GitLab publiceren een artefact als archief. Waar
baseline.report er een noemt — een URL, of een zip op schijf — wordt het geopend en het rapport erin bewaard: het bestand dat na de # wordt genoemd (ci/artifact.zip#coverage/lcov.info), anders het enige bestand van het archief, anders het enige bestand erin dat op een rapport lijkt.
Coverage Studio for VS Code 1.2026.20 — Zip-artefacten van GitHub en GitLab
2026-10-03
Toegevoegd
- Zip-artefacten van GitHub en GitLab. CI publiceert een artefact, en een artefact is een archief. Een opgehaalde zip wordt nu geopend en het rapport erin bewaard — het bestand dat na de
# van de URL wordt genoemd (…/zip#coverage/lcov.info), anders het enige bestand van het archief, anders het enige bestand erin dat op een rapport lijkt. Voor een URL in coverageFile.paths, voor baseline.report, en voor een baseline die een zip op schijf is.
Opgelost
- De bestanden van een Cobertura-baseline werden niet gevonden onder de eigen
<source> van het rapport. De vergelijking zei 0 file(s) moved naast een totaal dat wel verschoven was. De root die het rapport noemt, wordt nu gebruikt, zoals voor een rapport dat geladen wordt.
Coverage Studio voor Visual Studio 1.2026.18 — Nieuwe code per auteur en per datum
2026-10-03
Toegevoegd
- Nieuwe code per auteur en per datum. Nieuwe code was: de regels die gewijzigd zijn ten opzichte van een git-ref. Twee instellingen vragen wat een ref niet kan:
fuciniCoverage.gitDiff.author — de regels die één persoon schreef — en fuciniCoverage.gitDiff.since — de regels die sinds een bepaalde dag geschreven zijn. Beide worden afgelezen uit git blame en gelden voor de diff-coverage en voor de drempel voor nieuwe code.
Coverage Studio for VS Code 1.2026.19 — Nieuwe code per auteur en per datum
2026-10-03
Toegevoegd
- Nieuwe code per auteur en per datum. Nieuwe code was: de regels die gewijzigd zijn ten opzichte van een git-ref. Twee instellingen vragen wat een ref niet kan:
fuciniCoverage.gitDiff.author — de regels die één persoon schreef — en fuciniCoverage.gitDiff.since — de regels die sinds een bepaalde dag geschreven zijn. Beide worden afgelezen uit git blame en gelden voor de diff-coverage en voor de drempel voor nieuwe code.
Coverage Studio voor Visual Studio 1.2026.17 — Eén test met coverage, in Go en Rust
2026-10-02
Toegevoegd
- Run This Test with Coverage leest Go en Rust. In een Go-bestand draait de
func TestXxx bij de cursor alleen, in zijn eigen package en op zijn exacte naam — go test ./pkg/calc -run "^TestTotal$". In een Rust-bestand draait de #[test]-functie op haar pad in de crate, --exact; in een mod de tests van die module; een integratietest onder tests/ in zijn eigen binary.
Coverage Studio for VS Code 1.2026.18 — Eén test met coverage, in Go en Rust
2026-10-02
Toegevoegd
- Run This Test with Coverage leest Go en Rust. In een Go-bestand draait de
func TestXxx bij de cursor alleen, in zijn eigen package en op zijn exacte naam — go test ./pkg/calc -run "^TestTotal$". In een Rust-bestand draait de #[test]-functie op haar pad in de crate, --exact; in een mod de tests van die module; een integratietest onder tests/ in zijn eigen binary.
Coverage Studio voor Visual Studio 1.2026.16 — Conditiedekking van GCC 14, regel voor regel
2026-10-02
Toegevoegd
- De conditiedekking van GCC 14, regel voor regel.
-fcondition-coverage werd gelezen als twee aantallen per bestand; elke conditie wordt nu op haar regel gemarkeerd en in de hover genoemd — conditie 1 nooit waar, conditie 0 nooit waar en nooit onwaar — uit de JSON van gcov en uit zijn tekstlisting. threshold.conditions stelt er een drempel voor, Copy Coverage Summary heeft een kolom Conditions, badge.metric accepteert conditions, en de zoekfunctie accepteert conditions < 80.
Opgelost
- Het branchcijfer van een functie telde ook de uitkomsten van haar condities mee.
branches 8/12 waar de tool 4 van 6 zei. Condities blijven daar buiten beschouwing, zoals in de cijfers van het bestand en van de run.
Coverage Studio for VS Code 1.2026.17 — Conditiedekking van GCC 14, regel voor regel
2026-10-02
Toegevoegd
- De conditiedekking van GCC 14, regel voor regel.
-fcondition-coverage werd gelezen als twee aantallen per bestand; elke conditie wordt nu op haar regel gemarkeerd en in de hover genoemd — conditie 1 nooit waar, conditie 0 nooit waar en nooit onwaar — uit de JSON van gcov en uit zijn tekstlisting. threshold.conditions stelt er een drempel voor, Copy Coverage Summary heeft een kolom Conditions, badge.metric accepteert conditions, en de zoekfunctie accepteert conditions < 80.
Opgelost
- Het branchcijfer van een functie telde ook de uitkomsten van haar condities mee.
branches 8/12 waar de tool 4 van 6 zei. Condities blijven daar buiten beschouwing, zoals in de cijfers van het bestand en van de run.
Coverage Studio voor Visual Studio 1.2026.15 — De Coverage-weergave volgt de editor
2026-10-02
Toegevoegd
- De Coverage-weergave volgt de editor. Het bestand waar je naar kijkt, wordt in de boom gemarkeerd, de mappen erboven worden geopend en zijn rij wordt in beeld gescrold.
fuciniCoverage.coverageView.followActiveEditor zet het uit.
Coverage Studio for VS Code 1.2026.16 — De Coverage-weergave volgt de editor
2026-10-02
Toegevoegd
- De Coverage-weergave volgt de editor. Het bestand waar je naar kijkt, wordt in de boom gemarkeerd, de mappen erboven worden geopend en zijn rij wordt in beeld gescrold.
fuciniCoverage.coverageView.followActiveEditor zet het uit.
Coverage Studio voor Visual Studio 1.2026.14 — Uitsluitingsmarkeringen alleen voor branches, en branchdekking in .NET-rapporten
2026-10-02
Toegevoegd
- Uitsluitingsmarkeringen alleen voor branches, en die van gcovr.
LCOV_EXCL_BR_LINE en LCOV_EXCL_BR_START … LCOV_EXCL_BR_STOP halen de branches op hun regels uit de telling en laten de regels erin; LCOV_EXCL_EXCEPTION_BR_LINE haalt alleen de armen weg die een exception bereikt. Elke markering wordt ook onder de prefixen van gcovr gelezen: GCOVR_EXCL_LINE, GCOVR_EXCL_START, GCOV_EXCL_BR_LINE en de rest.
Opgelost
- Een .NET-rapport toonde geen branchdekking. Coverlet en
dotnet-coverage schrijven het attribuut branch van een Cobertura-regel als True, en alleen true in kleine letters werd gelezen — dus elke beslissing in zo’n rapport viel weg. Beide schrijfwijzen worden nu gelezen. Cijfers verschuiven: de branchdekking van een .NET-project verschijnt waar er geen was, en zijn score ook. - Een Cobertura-rapport dat uit meerdere bomen is samengevoegd, vond alleen de bestanden van de eerste boom. Zo’n rapport noemt één
<source> per boom; elk wordt nu geprobeerd, in de volgorde van het rapport.
Coverage Studio for VS Code 1.2026.15 — Uitsluitingsmarkeringen alleen voor branches, en branchdekking in .NET-rapporten
2026-10-02
Toegevoegd
- Uitsluitingsmarkeringen alleen voor branches, en die van gcovr.
LCOV_EXCL_BR_LINE en LCOV_EXCL_BR_START … LCOV_EXCL_BR_STOP halen de branches op hun regels uit de telling en laten de regels erin; LCOV_EXCL_EXCEPTION_BR_LINE haalt alleen de armen weg die een exception bereikt. Elke markering wordt ook onder de prefixen van gcovr gelezen: GCOVR_EXCL_LINE, GCOVR_EXCL_START, GCOV_EXCL_BR_LINE en de rest.
Opgelost
- Een .NET-rapport toonde geen branchdekking. Coverlet en
dotnet-coverage schrijven het attribuut branch van een Cobertura-regel als True, en alleen true in kleine letters werd gelezen — dus elke beslissing in zo’n rapport viel weg. Beide schrijfwijzen worden nu gelezen. Cijfers verschuiven: de branchdekking van een .NET-project verschijnt waar er geen was, en zijn score ook. - Een Cobertura-rapport dat uit meerdere bomen is samengevoegd, vond alleen de bestanden van de eerste boom. Zo’n rapport noemt één
<source> per boom; elk wordt nu geprobeerd, in de volgorde van het rapport.
Coverage Studio voor Visual Studio 1.2026.13 — De minste tests die nog elke regel uitvoeren
2026-10-01
Toegevoegd
- Show Minimal Test Set… vindt de minste tests die nog elke regel uitvoeren die de suite uitvoert, en toont daaronder de tests die geen eigen regel toevoegen. Voor de snelle run vóór een commit, en voor wie de suite uitdunt — met de herinnering dat overbodig naar regels niet overbodig is naar wat een test controleert.
Coverage Studio for VS Code 1.2026.14 — De minste tests die nog elke regel uitvoeren
2026-10-01
Toegevoegd
- Show Minimal Test Set… vindt de minste tests die nog elke regel uitvoeren die de suite uitvoert, en toont daaronder de tests die geen eigen regel toevoegen. Voor de snelle run vóór een commit, en voor wie de suite uitdunt — met de herinnering dat overbodig naar regels niet overbodig is naar wat een test controleert.
Coverage Studio voor Visual Studio 1.2026.12 — Uitsluitingen die zeggen waarom
2026-10-01
Toegevoegd
- Gemotiveerde uitsluitingen. Code die uit de telling wordt gehaald op de plek waar hij geschreven staat, kan zeggen waarom —
// LCOV_EXCL_LINE: defensive, unreachable by construction, [ExcludeFromCodeCoverage(Justification = "…")] — en de redenen worden gerapporteerd: Export Coverage Report… toont de uitsluitingen en hun motivering als Markdown en als CSV. Met fuciniCoverage.exclusions.requireReason is een uitsluiting die geen reden geeft een waarschuwing op haar regel en laat ze Check Coverage Thresholds mislukken.
Coverage Studio for VS Code 1.2026.13 — Uitsluitingen die zeggen waarom
2026-10-01
Toegevoegd
- Gemotiveerde uitsluitingen. Code die uit de telling wordt gehaald op de plek waar hij geschreven staat, kan zeggen waarom —
// LCOV_EXCL_LINE: defensive, unreachable by construction, [ExcludeFromCodeCoverage(Justification = "…")] — en de redenen worden gerapporteerd: Export Coverage Report… toont de uitsluitingen en hun motivering als Markdown en als CSV. Met fuciniCoverage.exclusions.requireReason is een uitsluiting die geen reden geeft een waarschuwing op haar regel en laat ze Check Coverage Thresholds mislukken.
Coverage Studio voor Visual Studio 1.2026.11 — Een drempel voor nieuwe code, en de coverage die verschoof zonder bewerking
2026-10-01
Toegevoegd
- Een drempel voor nieuwe code, naast de drempels voor de hele run.
fuciniCoverage.threshold.newCode is de minimale regeldekking, in procenten, van de regels die gewijzigd zijn ten opzichte van gitDiff.baseRef. Check Coverage Thresholds laat hem zakken in een eigen zin — New code 72.00% < 80% (18 of 25 line(s) changed against origin/main ran) — en de hele run blijft op het scherm. - Show Indirect Coverage Changes… toont de regels waarvan de coverage verschoof hoewel niemand ze bewerkte — code die niet meer draait omdat een test verdween, of omdat een branch eerder in de code nu vroeg terugkeert. Tegenover de CI-baseline waar
baseline.report er een noemt, anders tegenover de run ervoor.
Coverage Studio for VS Code 1.2026.12 — Een drempel voor nieuwe code, en de coverage die verschoof zonder bewerking
2026-10-01
Toegevoegd
- Een drempel voor nieuwe code, naast de drempels voor de hele run.
fuciniCoverage.threshold.newCode is de minimale regeldekking, in procenten, van de regels die gewijzigd zijn ten opzichte van gitDiff.baseRef. Check Coverage Thresholds laat hem zakken in een eigen zin — New code 72.00% < 80% (18 of 25 line(s) changed against origin/main ran) — en de hele run blijft op het scherm. - Show Indirect Coverage Changes… toont de regels waarvan de coverage verschoof hoewel niemand ze bewerkte — code die niet meer draait omdat een test verdween, of omdat een branch eerder in de code nu vroeg terugkeert. Tegenover de CI-baseline waar
baseline.report er een noemt, anders tegenover de run ervoor.
Coverage Studio voor Visual Studio 1.2026.10 — Voer alleen de tests uit die je wijzigingen raken
2026-10-01
Toegevoegd
- Run Tests Affected by My Changes… toont de tests die een regel uitvoerden die de working tree wijzigt ten opzichte van
fuciniCoverage.testImpact.baseRef (standaard HEAD), met de test die het meeste van de wijziging uitvoerde eerst. Een test kiezen opent hem; waar de rapporten uit een run per test kwamen (testRun.perTest), voert het eerste item alleen die tests uit.
Opgelost
testRun.skipWhenTestsFail geldt ook na de run. De rapporten die een rode run schreef, bleven op schijf staan, waar de watcher ze een moment later laadde. Ze worden nu verwijderd.- De kopie die een TRX-logger van een coveragerapport maakt, wordt nooit voor een tracefile aangezien.
Coverage Studio for VS Code 1.2026.11 — Voer alleen de tests uit die je wijzigingen raken
2026-10-01
Toegevoegd
- Run Tests Affected by My Changes… toont de tests die een regel uitvoerden die de working tree wijzigt ten opzichte van
fuciniCoverage.testImpact.baseRef (standaard HEAD), met de test die het meeste van de wijziging uitvoerde eerst. Een test kiezen opent hem; waar de rapporten uit een run per test kwamen (testRun.perTest), voert het eerste item alleen die tests uit.
Opgelost
testRun.skipWhenTestsFail geldt ook na de run. De rapporten die een rode run schreef, bleven op schijf staan, waar de watcher ze een moment later laadde. Ze worden nu verwijderd.- De kopie die een TRX-logger van een coveragerapport maakt, wordt nooit voor een tracefile aangezien.
Coverage Studio voor Visual Studio 1.2026.9 — Geslaagd of mislukt op de markeringen, en de eigen code coverage-bestanden van Visual Studio
2026-09-30
Toegevoegd
- Geslaagd of mislukt op de markeringen. Een regel die door een mislukte test is uitgevoerd, krijgt een rode balk aan het begin, en de hover noemt de mislukte tests; Show Tests That Ran This Line zegt welke van de tests mislukten. Het heeft een rapport nodig dat zegt welke tests een regel uitvoerden, en het resultatenbestand van de runner — TRX of JUnit XML — in de map van het rapport of genoemd in
fuciniCoverage.testResults.paths. Run Tests with Coverage vraagt dotnet test er nu om. - De eigen code coverage van Visual Studio, geladen. Het
.coverage-bestand dat Analyze Code Coverage van Visual Studio schrijft, wordt met dotnet-coverage geconverteerd en vanzelf geladen: Coverage Studio bouwt voort op de ingebouwde collector in plaats van ermee te concurreren.
Coverage Studio for VS Code 1.2026.10 — Geslaagd of mislukt op de markeringen
2026-09-30
Toegevoegd
- Geslaagd of mislukt op de markeringen. Een regel die door een mislukte test is uitgevoerd, krijgt een rode balk aan het begin, en de hover noemt de mislukte tests; Show Tests That Ran This Line zegt welke van de tests mislukten. Het heeft een rapport nodig dat zegt welke tests een regel uitvoerden, en het resultatenbestand van de runner — TRX of JUnit XML — in de map van het rapport of genoemd in
fuciniCoverage.testResults.paths. Run Tests with Coverage vraagt dotnet test er nu om.
Coverage Studio voor Visual Studio 1.2026.8 — Herladen dat je zoekopdracht, je sessie en je laatste run behoudt
2026-09-30
Opgelost
- Het zoekvak behoudt zijn zoekopdracht, en zijn focus, wanneer de coverage opnieuw wordt geladen. Elke herlading maakte het leeg, vaak terwijl de zoekopdracht nog werd getypt. Een zoekopdracht zoals
< 80% behoudt ook de risico-hotspots die eraan voldoen. - Een coverage-sessie telt dezelfde run niet langer twee keer. Elke herlading van ongewijzigde rapporten telde ze opnieuw op, en elk aantal hits verdubbelde. Een sessie bewaart elke set rapporten nu één keer.
- De CI-baseline houdt een lading niet langer op. Eerst wordt de lading getekend, de vergelijking volgt. De baseline wordt één keer voorbereid en bewaard zolang haar rapport en de instellingen gelijk blijven, en wanneer de URL niet bereikbaar is, wordt de eerder opgehaalde kopie gebruikt.
- “Sinds de laatste run” overleeft een herlading van ongewijzigde rapporten. Een gewijzigde instelling of een verversing maakte de run op het scherm tot zijn eigen laatste run, en elke wijziging sinds de run daarvoor verdween. Zo’n herlezing wordt ook niet meer in de geschiedenis bewaard.
- Eén lading tegelijk. Twee herladingen die samen werden gevraagd, liepen naast elkaar, en de traagste won. De herladingen die tijdens een lading worden gevraagd, worden nu één lading erna.
- Een CI-baseline via HTTP wordt opgehaald zoals in VS Code. Eén client, de laatste kopie bewaard voor wanneer de server niet bereikbaar is, en
remote.headers alleen verstuurd naar het adres waarvoor ze geschreven zijn — nooit via onversleuteld HTTP. - Een opdracht waarvan het werk mislukt, zegt dat. Een fout in een opdracht of een timer werd ingeslikt; het is nu een regel in het Output-venster.
- Minder werk op de UI-thread. De bestandswatchers worden op de achtergrond gemaakt, de items van de Error List worden één keer per lading berekend, en het log wordt in vlagen geschreven in plaats van regel voor regel.
- Twee Visual Studio-vensters beschadigen de rungeschiedenis niet meer. De index ervan wordt in één stap vervangen onder een vergrendeling die beide delen, en opnieuw gemaakt uit de runs wanneer hij verloren gaat.
- Run Native Project with Coverage bouwt het eigen platform van het project, en neemt
llvm-cov en llvm-profdata uit de LLVM van de compiler, als paar. - De kleuren voor waarschuwing, fout en geslaagd in het Coverage-venster volgen een licht thema evengoed als een donker.
- Een instellingenbestand dat openstaat met niet-opgeslagen wijzigingen wordt niet overschreven. De instellingenpagina zegt het eerst op te slaan.
Gewijzigd
- Een coveragebestand dat je kiest, en het rapport dat een testrun schrijft, worden voor je onthouden in plaats van in
.vscode/settings.json geschreven. Dat bestand wordt vaak gecommit, dus een testrun liet een wijziging in de repository achter waar niemand om had gevraagd. Paden die al in coverageFile.paths staan, blijven werken.
Coverage Studio for VS Code 1.2026.9 — Herladen dat je zoekopdracht, je sessie en je laatste run behoudt
2026-09-30
Opgelost
- Het zoekvak behoudt zijn zoekopdracht, en zijn focus, wanneer de coverage opnieuw wordt geladen. Elke herlading maakte het leeg, vaak terwijl de zoekopdracht nog werd getypt. Een zoekopdracht zoals
< 80% behoudt ook de risico-hotspots die eraan voldoen. - Een coverage-sessie telt dezelfde run niet langer twee keer. Elke herlading van ongewijzigde rapporten telde ze opnieuw op, en elk aantal hits verdubbelde. Een sessie bewaart elke set rapporten nu één keer.
- De CI-baseline houdt een lading niet langer op. Eerst wordt de lading getekend, de vergelijking volgt. De baseline wordt één keer voorbereid en bewaard zolang haar rapport en de instellingen gelijk blijven, en wanneer de URL niet bereikbaar is, wordt de eerder opgehaalde kopie gebruikt.
- De controle op gewijzigde rapportbestanden draait één ronde tegelijk. Op een trage netwerkschijf zagen twee rondes dezelfde wijziging, en de coverage werd twee keer geladen.
- “Sinds de laatste run” overleeft een herlading van ongewijzigde rapporten. Een gewijzigde instelling of een verversing maakte de run op het scherm tot zijn eigen laatste run, en elke wijziging sinds de run daarvoor verdween. Zo’n herlezing wordt ook niet meer in de geschiedenis bewaard.
Gewijzigd
- Een coveragebestand dat je kiest, en het rapport dat een testrun schrijft, worden voor je onthouden in plaats van in
.vscode/settings.json geschreven. Dat bestand wordt vaak gecommit, dus een testrun liet een wijziging in de repository achter waar niemand om had gevraagd. Paden die al in coverageFile.paths staan, blijven werken.
Coverage Studio voor Visual Studio 1.2026.7 — Testruns die precies uitvoeren wat ze noemen
2026-09-30
Opgelost
- Een .NET-solution met twee of meer testprojecten verliest niet langer de coverage van alle projecten op één na.
dotnet test schreef één rapport per project en ze werden allemaal naar dezelfde coverage/coverage.cobertura.xml verplaatst, dus alleen het laatste werd geladen. Zo’n map voert dotnet test nu één keer per testproject uit, elk rapport komt in coverage/<Project>/, en een run van één project vervangt alleen het rapport van dat project. - Meerdere bestanden tegelijk opslaan voert de tests van elk opgeslagen bestand uit. Met
testRun.onSave draaiden alleen de tests van het laatste bestand; wat wordt opgeslagen terwijl een run loopt, wordt bewaard en daarna samen uitgevoerd. - Run This Test with Coverage en de runs per test voeren precies uit wat ze noemen. Het .NET-filter vergeleek op deelstring:
Total voerde ook TotalTax uit. Een test draait nu op zijn exacte naam, een klasse op haar naam gevolgd door een punt, en een test in een geneste klasse wordt gevonden (Outer+Inner). - Een jest- of vitest-test met
(, + of $ in de titel draait. De titel ging naar -t, dat een reguliere expressie leest, dus zo’n test kwam nergens mee overeen en er draaide niets. - Run This Test with Coverage leest testbestanden in VB en F#.
<Fact> boven Public Sub, en [<Fact>] boven let of member, werden nooit herkend. - Een testrun annuleren beëindigt elk proces dat hij startte. Alleen de shell werd beëindigd, en
dotnet test draaide erachter door. Visual Studio sluiten annuleert de run ook. - Typen tijdens een run na het opslaan verschuift de markeringen niet meer. Ze zitten vast aan de tekst die de run mat.
- Een solution op een netwerkshare voert haar tests daar uit. De run startte in
C:\Windows, omdat de opdrachtshell een pad als \\server\share niet als zijn map aanneemt.
Coverage Studio for VS Code 1.2026.8 — Testruns die precies uitvoeren wat ze noemen
2026-09-30
Opgelost
- Een .NET-solution met twee of meer testprojecten verliest niet langer de coverage van alle projecten op één na.
dotnet test schreef één rapport per project en ze werden allemaal naar dezelfde coverage/coverage.cobertura.xml verplaatst, dus alleen het laatste werd geladen. Zo’n map voert dotnet test nu één keer per testproject uit, elk rapport komt in coverage/<Project>/, en een run van één project vervangt alleen het rapport van dat project. - Meerdere bestanden tegelijk opslaan voert de tests van elk opgeslagen bestand uit. Met
testRun.onSave draaiden alleen de tests van het laatste bestand; wat wordt opgeslagen terwijl een run loopt, wordt bewaard en daarna samen uitgevoerd. - Run This Test with Coverage en de runs per test voeren precies uit wat ze noemen. Het .NET-filter vergeleek op deelstring:
Total voerde ook TotalTax uit. Een test draait nu op zijn exacte naam, een klasse op haar naam gevolgd door een punt, en een test in een geneste klasse wordt gevonden (Outer+Inner). - Een jest- of vitest-test met
(, + of $ in de titel draait. De titel ging naar -t, dat een reguliere expressie leest, dus zo’n test kwam nergens mee overeen en er draaide niets. - Een testtitel met aanhalingstekens komt heel aan in de terminal. Een opdracht met
\" binnen aanhalingstekens viel bij het eerste uit elkaar. - Run This Test with Coverage leest testbestanden in VB en F#.
<Fact> boven Public Sub, en [<Fact>] boven let of member, werden nooit herkend. - Een testtaak die eindigt zonder een proces te starten, laat Run Tests with Coverage niet langer eeuwig wachten. De opdracht eindigt en zegt dat de run niets schreef.
Coverage Studio voor Visual Studio 1.2026.6 — Welke Tests een Regel Uitvoerden, Coverage na Elke Opslag en een CI-Baseline
2026-09-29
Toegevoegd
- Welke tests deze regel uitvoerden. Waar het rapport het vastlegt — coverage.py met
--show-contexts, de tracked methods van OpenCover, een lcov-tracefile per test geschreven — zegt de CodeLens van een functie hoeveel tests haar uitvoerden, en Show Tests That Ran This Line toont ze, drukste eerst, en opent degene die je kiest. Voor een dotnet test-run voert testRun.perTest de tests klasse voor klasse uit, zodat elk rapport zegt welke klasse het schreef.
- Coverage na elke opslag. Met
testRun.onSave voert het opslaan van een bronbestand de tests uit die het dekken, met coverage, en de gutter volgt. In een .NET-solution draaien alleen de testprojecten die naar het project van het opgeslagen bestand verwijzen; meerdere keren opslaan achter elkaar is één run.
- Run This Test with Coverage. Met de cursor in een testmethode, een testklasse of
describe, of een testbestand voert één opdracht precies dat uit met coverage — dotnet test --filter, jest/vitest -t of een pytest-node-id — en laadt wat het schreef. De test wordt uit de tekst gelezen, dus het werkt voor C#, VB, F#, JavaScript, TypeScript en Python zonder taalservice.
- Exclude from Coverage, en twee .NET-filters. Een rechtsklik op een rij van de coverage-boom, of Exclude This File from Coverage op het open bestand, voegt het bestand of de map toe aan
fuciniCoverage.ignore, en het verdwijnt uit elk totaal. ignore.namespaces laat de bestanden van een namespace weg (*.Migrations), en ignore.attributes de klasse, methode of property onder een attribuut — standaard ExcludeFromCodeCoverage, dat OpenCover, dotCover en een geconverteerde lcov niet respecteren.
- Exclude Selection from Coverage. Selecteer regels en kies het uit het gloeilampje of het contextmenu van de editor: boven een .NET-klasse, -methode of -property schrijft het
[ExcludeFromCodeCoverage] — in de korte vorm als het bestand System.Diagnostics.CodeAnalysis al importeert — en elders LCOV_EXCL_LINE of een paar LCOV_EXCL_START/STOP in het eigen commentaar van de taal. Een markering die er al staat, wordt niet verdubbeld.
- Namespaces, klassen en methoden. Voor een .NET-rapport dat zijn klassen noemt — Cobertura, Coverlet, OpenCover — toont een keuzelijst Folders / Namespaces dezelfde run per namespace, klasse en methode, met dezelfde sortering en hetzelfde filter; een methoderij opent het bestand bij de methode. Door de compiler gegenereerde typen zoals
<>c en async-statemachines worden samengevoegd in de klasse waarvoor ze gegenereerd zijn.
- Een zoekvak boven de coverage-boom. Typ woorden om de rijen te houden waarvan naam of pad ze allemaal bevat, of een vergelijking —
< 80%, lines >= 90, branches = 0 — om de rijen te houden waarvan het getal voldoet; samen vragen ze allebei. Methoderijen en risico-hotspots worden ook doorzocht; Escape wist.
- Run Native Project with Coverage. Het opstartproject in C++, vanuit het menu Tools: een ClangCL-project wordt opnieuw gebouwd met de coverage-instrumentatie van clang in
coverage/native/, uitgevoerd, en zijn rapport geladen; elke andere toolset draait onder OpenCppCoverage waar dat geïnstalleerd is, en waar geen van beide kan, zegt een zin wat je moet installeren.
- Coverage-sessies en een trend. Start Coverage Session, en elke run die daarna geladen wordt, wordt opgeteld bij de vorige — regels, branches en functies evengoed: wat een van hen uitvoerde, is gedekt — zodat unittests, integratietests en een rondgang door de applicatie laten zien wat ze samen bereikten. Onder de werkbalk wordt de regeldekking van de opgeslagen geschiedenis als trend getekend, één punt per run.
- Compare Two History Runs, zoals in VS Code: kies twee bewaarde runs en de bestanden die daartussen verschoven, worden getoond van oud naar nieuw, welke je ook eerst koos.
- Compare with CI Baseline.
baseline.report noemt het rapport dat de build van je hoofdbranch publiceert — een URL, opgehaald met remote.headers, of een gedownload bestand — en elke lading wordt ermee vergeleken: de kaart in de statusbalk zegt waar deze run staat, en Compare with CI Baseline toont de bestanden die verschoven. De baseline gaat door dezelfde uitsluitingslijst als de run, zodat de totalen gelijkwaardig vergeleken worden.
- Waar je ze vindt. De nieuwe opdrachten staan onder Tools > Coverage Studio en in het contextmenu van de editor; Show Tests That Ran This Line is ook Ctrl+Shift+U, T, en Exclude Selection from Coverage is een actie van het gloeilampje.
Opgelost
- Het rapport van een testrun draagt je gebruikers- en machinenaam niet meer. De Code Coverage-collector van Microsoft noemt zijn rapport
<user>_<machine>_<stamp>.cobertura.xml, en die naam stond in de boom en op elke schermafbeelding ervan; het rapport wordt nu hernoemd naar coverage.cobertura.xml voordat het geladen wordt.
- Van een gegenereerd bestand werd gezegd dat
fuciniCoverage.ignore het wegliet. Elk weggelaten bestand wordt nu geteld onder de instelling die het wegliet — ignore, ignore.generated of ignore.namespaces — zodat de getoonde naam de instelling is om aan te passen.
- Een lcov-tracefile per test wordt gelezen als één record per bestand, met de testsecties opgeteld, zoals VS Code hem leest; voorheen was het record van elke test een eigen bestand.
- Het log zegt wat een parser wegliet. De bestanden waarin een parser niets te instrumenteren vond (
FUCINI_PARSE_030) en de eigen verantwoording van een rapport over zijn gaten (FUCINI_PARSE_031, MissingPdb van OpenCover) worden in het log geschreven, zoals VS Code ze schrijft.
- Een header met macro's staat niet meer op 100% in de boom. llvm-cov en gcov rekenen het gebruik van een macro toe aan de regels die hem definiëren; de branches en functies op uitgesloten regels gaan nu mee met de regels, en een bestand zonder iets meetbaars wordt uit de run gehaald en in de uitvoer genoemd (
FUCINI_EXCLUDE_001).
- Vijf rapporten die als niet-ondersteund formaat werden geweigerd, worden herkend. Kovers JaCoCo-XML, een Stryker.NET-rapport, een NCover-rapport, een oude SimpleCov-resultset en een SonarQube-rapport met veel lege bestanden worden nu herkend aan wat ze bovenaan dragen. Een Clover- of SonarQube-rapport waarvan de paden het woord
cobertura bevatten, wordt niet meer als Cobertura gelezen.
- Getallen die overeenkomen met de tools die ze schreven. Het branchcijfer van een MC/DC-build komt overeen met
llvm-cov report; exception-branches van LCOV 2 (BRDA:12,e0,1,3) tellen mee; een llvm-cov-functie wordt alleen gedeclareerd in het bestand dat haar definieert; een Go-blok dat door twee testbinaries wordt vermeld, telt zijn aantallen op; een Cobertura-beslissing die twee klassen rapporteren en een JaCoCo-regel die twee keer vermeld staat, houden al hun armen, één keer.
- Kleinere. Een tracefile die midden in het schrijven is afgebroken, verliest geen bestand meer;
gcov -t over meerdere .gcda-bestanden geeft elk een eigen bestand, template-instanties worden één keer gelezen en aantallen zoals 1.20k uit gcov -H blijven behouden; GNATcoverage-bestanden worden niet meer allemaal als gewijzigd sinds hun coverage gemeld; een Stryker-mutant in afwachting of een onderbroken PIT-run telt niet meer tegen de score.
- Een handmatige wijziging van het instellingenbestand wordt toegepast zodra het is opgeslagen, zoals VS Code een gewijzigde instelling toepast.
Coverage Studio for VS Code 1.2026.7 — Welke Tests een Regel Uitvoerden, Coverage na Elke Opslag en een CI-Baseline
2026-09-29
Toegevoegd
- Welke tests deze regel uitvoerden. Waar het rapport het vastlegt — coverage.py met
--show-contexts, de tracked methods van OpenCover, een lcov-tracefile per test geschreven — zegt de CodeLens van een functie hoeveel tests haar uitvoerden, en Show Tests That Ran This Line toont ze, drukste eerst, en opent degene die je kiest. Voor een dotnet test-run voert testRun.perTest de tests klasse voor klasse uit, zodat elk rapport zegt welke klasse het schreef.
- Coverage na elke opslag. Met
testRun.onSave voert het opslaan van een bronbestand de tests uit die het dekken, met coverage, en de gutter volgt. In een .NET-solution draaien alleen de testprojecten die naar het project van het opgeslagen bestand verwijzen; meerdere keren opslaan achter elkaar is één run.
- Run This Test with Coverage. Met de cursor in een testmethode, een testklasse of
describe, of een testbestand voert één opdracht precies dat uit met coverage — dotnet test --filter, jest/vitest -t of een pytest-node-id — en laadt wat het schreef. De test wordt uit de tekst gelezen, dus het werkt voor C#, VB, F#, JavaScript, TypeScript en Python zonder taalservice.
- Exclude from Coverage, en twee .NET-filters. Een rechtsklik op een rij van de coverage-boom, of Exclude This File from Coverage op het open bestand, voegt het bestand of de map toe aan
fuciniCoverage.ignore, en het verdwijnt uit elk totaal. ignore.namespaces laat de bestanden van een namespace weg (*.Migrations), en ignore.attributes de klasse, methode of property onder een attribuut — standaard ExcludeFromCodeCoverage, dat OpenCover, dotCover en een geconverteerde lcov niet respecteren.
- Exclude Selection from Coverage. Selecteer regels en kies het uit het gloeilampje of het contextmenu van de editor: boven een .NET-klasse, -methode of -property schrijft het
[ExcludeFromCodeCoverage] — in de korte vorm als het bestand System.Diagnostics.CodeAnalysis al importeert — en elders LCOV_EXCL_LINE of een paar LCOV_EXCL_START/STOP in het eigen commentaar van de taal. Een markering die er al staat, wordt niet verdubbeld.
- Namespaces, klassen en methoden. Voor een .NET-rapport dat zijn klassen noemt — Cobertura, Coverlet, OpenCover — toont een keuzelijst Folders / Namespaces dezelfde run per namespace, klasse en methode, met dezelfde sortering en hetzelfde filter; een methoderij opent het bestand bij de methode. Door de compiler gegenereerde typen zoals
<>c en async-statemachines worden samengevoegd in de klasse waarvoor ze gegenereerd zijn.
- Een zoekvak boven de coverage-boom. Typ woorden om de rijen te houden waarvan naam of pad ze allemaal bevat, of een vergelijking —
< 80%, lines >= 90, branches = 0 — om de rijen te houden waarvan het getal voldoet; samen vragen ze allebei. Methoderijen en risico-hotspots worden ook doorzocht; Escape wist.
- Coverage-sessies en een trend. Start Coverage Session, en elke run die daarna geladen wordt, wordt opgeteld bij de vorige — regels, branches en functies evengoed: wat een van hen uitvoerde, is gedekt — zodat unittests, integratietests en een rondgang door de applicatie laten zien wat ze samen bereikten. Onder de werkbalk wordt de regeldekking van de opgeslagen geschiedenis als trend getekend, één punt per run.
- Compare with CI Baseline.
baseline.report noemt het rapport dat de build van je hoofdbranch publiceert — een URL, opgehaald met remote.headers, of een gedownload bestand — en elke lading wordt ermee vergeleken: de kaart in de statusbalk zegt waar deze run staat, en Compare with CI Baseline toont de bestanden die verschoven. De baseline gaat door dezelfde uitsluitingslijst als de run, zodat de totalen gelijkwaardig vergeleken worden.
Opgelost
- Het rapport van een testrun draagt je gebruikers- en machinenaam niet meer. De Code Coverage-collector van Microsoft noemt zijn rapport
<user>_<machine>_<stamp>.cobertura.xml, en die naam stond in de boom en op elke schermafbeelding ervan; het rapport wordt nu hernoemd naar coverage.cobertura.xml voordat het geladen wordt.
- Een testrun mislukte op Windows als de terminal PowerShell is. De aanhalingstekens rond
Code Coverage;Format=cobertura gingen verloren op weg naar pwsh, dat de ; als het einde van de opdracht las; het recept wordt nu woord voor woord aan de terminal gegeven en geciteerd voor de shell die hij start.
- Van een gegenereerd bestand werd gezegd dat
fuciniCoverage.ignore het wegliet. Elk weggelaten bestand wordt nu geteld onder de instelling die het wegliet — ignore, ignore.generated of ignore.namespaces — zodat de getoonde naam de instelling is om aan te passen.
- Een header met macro's staat niet meer op 100% in de boom. llvm-cov en gcov rekenen het gebruik van een macro toe aan de regels die hem definiëren; de branches en functies op uitgesloten regels gaan nu mee met de regels, en een bestand zonder iets meetbaars wordt uit de run gehaald en in de uitvoer genoemd (
FUCINI_EXCLUDE_001).
- Vijf rapporten die als niet-ondersteund formaat werden geweigerd, worden herkend. Kovers JaCoCo-XML, een Stryker.NET-rapport, een NCover-rapport, een oude SimpleCov-resultset en een SonarQube-rapport met veel lege bestanden worden nu herkend aan wat ze bovenaan dragen. Een Clover- of SonarQube-rapport waarvan de paden het woord
cobertura bevatten, wordt niet meer als Cobertura gelezen.
- Getallen die overeenkomen met de tools die ze schreven. Het branchcijfer van een MC/DC-build komt overeen met
llvm-cov report; exception-branches van LCOV 2 (BRDA:12,e0,1,3) tellen mee; een llvm-cov-functie wordt alleen gedeclareerd in het bestand dat haar definieert; een Go-blok dat door twee testbinaries wordt vermeld, telt zijn aantallen op; een Cobertura-beslissing die twee klassen rapporteren en een JaCoCo-regel die twee keer vermeld staat, houden al hun armen, één keer.
- Kleinere. Een tracefile die midden in het schrijven is afgebroken, verliest geen bestand meer;
gcov -t over meerdere .gcda-bestanden geeft elk een eigen bestand, template-instanties worden één keer gelezen en aantallen zoals 1.20k uit gcov -H blijven behouden; GNATcoverage-bestanden worden niet meer allemaal als gewijzigd sinds hun coverage gemeld; een Stryker-mutant in afwachting of een onderbroken PIT-run telt niet meer tegen de score.
Gewijzigd
- Geen
FUCINI_ENCODING_001 meer bij elke lading. Een rapport zonder byte-order mark wordt als UTF-8 gelezen, zoals elke tool het schrijft, zonder een melding die dat zegt.
Coverage Studio voor Visual Studio 1.2026.5 — Bewaakt waar het rapport zal verschijnen
2026-09-28
Toegevoegd
- Een relatief item met een jokerteken wordt op elke diepte gezocht.
*.lcov.info in coverageFile.paths vindt het bestand waar het ook staat onder de basismap, zoals VS Code het altijd al las; een absoluut item — ${workspaceFolder}/build/coverage-merged/*.lcov.info, ** voor elke diepte — kijkt precies waar het zegt, zoals voorheen.
- Bewaakt waar het rapport zal verschijnen. De watcher dekt de mappen die de instellingen noemen, of er nu al een rapport staat of niet: de map van een absoluut opgegeven bestand, de mappen vóór een jokerteken — met alles eronder wanneer het patroon tot in submappen reikt — en de basismap voor een relatief jokerteken. Een rapport dat een build daar schrijft, wordt vanzelf geladen; een schrijfactie naar een ander bestand in die mappen wordt genegeerd.
Opgelost
- Een llvm-cov JSON-rapport werd geweigerd als een niet-ondersteund formaat. Het formaat wordt herkend aan de eerste 4096 tekens, en llvm-cov schrijft zijn markering
"type": "llvm.coverage.json.export" helemaal aan het einde; een export waarvan het eerste bestandsrecord veel branches en geneste macro-expansies bevat, had verder niets herkenbaars in die kop. Zo’n rapport wordt nu herkend aan zijn begin, {"data":[{"files":[, dat geen enkel ander formaat heeft.
- Hetzelfde voor
gcov --json-format. gcov schrijft de functies van een bestand vóór zijn regels, en een bestand met een dozijn functies heeft in de bekeken kop evenmin een regelvermelding; de eigen sleutel gcc_version van het document identificeert het nu.
Coverage Studio for VS Code 1.2026.6 — Een jokerteken in een volledig pad, bewaakt waar het rapport zal verschijnen
2026-09-28
Toegevoegd
- Een jokerteken in een absoluut
coverageFile.paths-item. ${workspaceFolder}/build/coverage-merged/*.lcov.info laadt elk zo’n bestand in die map, en ** staat voor elke diepte: de mappen vóór het eerste jokerteken worden doorzocht, de rest is het patroon eronder, zoals de Visual Studio-editie zo’n item altijd al las. Voorheen werd een absoluut item gezocht zoals geschreven, dus een met een ster kwam nergens mee overeen — en werd, als jokerteken, ook nooit gemeld als iets dat nergens mee overeenkwam. Een rapport dat daar later verschijnt, wordt door de watcher of de peiling geladen zoals een letterlijk item; een jokerteken dat nergens mee overeenkomt, wordt niet gemeld, omdat het op een build kan wachten.
Opgelost
- Een llvm-cov JSON-rapport werd geweigerd als een niet-ondersteund formaat. Het formaat wordt herkend aan de eerste 4096 tekens, en llvm-cov schrijft zijn markering
"type": "llvm.coverage.json.export" helemaal aan het einde; een export waarvan het eerste bestandsrecord veel branches en geneste macro-expansies bevat, had verder niets herkenbaars in die kop. Zo’n rapport wordt nu herkend aan zijn begin, {"data":[{"files":[, dat geen enkel ander formaat heeft.
- Hetzelfde voor
gcov --json-format. gcov schrijft de functies van een bestand vóór zijn regels, en een bestand met een dozijn functies heeft in de bekeken kop evenmin een regelvermelding; de eigen sleutel gcc_version van het document identificeert het nu.
Coverage Studio voor Visual Studio 1.2026.4 — Twee rapporten, één antwoord, en groen waar het gedekt is
2026-09-26
Toegevoegd
- Kies of combineer de rapporten van een bestand. Klik met de rechtermuisknop op een bestand in het Coverage-venster en kies Choose Coverage Source... — aangeboden waar meer dan één geladen rapport het meet — of gebruik Tools > Coverage Studio > Choose Coverage Source for This File...: elk rapport met zijn eigen cijfers, daarna Combine them — agree (alleen gedekt waar elk rapport een regel uitvoerde: één codebase, twee compilers) en — union (gedekt waar een willekeurig rapport dat deed: meerdere testsuites van één build), voor het bestand, de map ervan of een patroon. De regels waarover de rapporten het oneens zijn, zijn blauwgroen in de gutter en in de Annotated Source, met wat elk rapport zei; de rij noemt de rapporten en het aantal betwiste regels, en de statusbalk en beide kaarten zeggen waar de cijfers vandaan komen.
- Rood, amber en groen. Gutter: Coverage kleurt elke gedekte regel groen naast het rood en amber — de modus voor iedereen die verwachtte dat een bestand op 100% groen zou zijn. De vijf tinten van de heatmap zijn instellingen (
heatmap.colors, heatmap.colorsDark), en het instellingenvenster toont elke kleur al terwijl je hem kiest.
Opgelost
- Het cijfer van het bestand in de statusbalk is dat van zijn kaart. Een metriek zonder inhoud — MC/DC in een bestand zonder beslissingen — telde als 100% in het item en helemaal niet op de kaart die het opent.
- Een header met alleen constanten staat niet langer op 0% of 100%. Preprocessordirectieven tellen als geen code, net als commentaar, wanneer
excludeComments aan staat.
Coverage Studio for VS Code 1.2026.5 — Twee rapporten, één antwoord, en groen waar het gedekt is
2026-09-26
Toegevoegd
- Kies of combineer de rapporten van een bestand.
coverageFile.sources beslist per bestand welk van meerdere geladen rapporten ervoor spreekt — of combineert ze: agree telt een regel alleen als gedekt waar elk rapport hem uitvoerde, en markeert de regels waarover ze het oneens zijn blauwgroen; union waar een willekeurig rapport dat deed. Choose Coverage Source... op een rij van de Coverage-weergave of voor het open bestand schrijft de regel voor je. Onderdeel van de betaalde edities; in Community beslist het nieuwste rapport.
- Rood, amber en groen, en een guttermodus met één klik. De modus
coverage kleurt gedekte regels groen; de tinten van de heatmap zijn instellingen met een live voorbeeld in het instellingenpaneel; een knop in de statusbalk en Alt+G zetten de gutter achtereenvolgens op uit, ongedekt, dekking en heatmap.
Opgelost
- Het cijfer van het bestand in de statusbalk is dat van zijn kaart. Een metriek zonder inhoud — MC/DC in een bestand zonder beslissingen — telde als 100% in het item en helemaal niet op de kaart die het opent.
- Een header met alleen constanten staat niet langer op 0% of 100%. Preprocessordirectieven tellen als geen code, net als commentaar, wanneer
excludeComments aan staat.
Coverage Studio voor Visual Studio 1.2026.3 — Niets te kiezen behalve de code
2026-09-24
Gewijzigd
- Het Licence-dialoogvenster vraagt alleen nog om de code. De vier planknoppen zijn weg: een abonnements- of uitnodigingscode benoemt een pool, en de pool kent zijn plan, dus er was niets wat iemand beter kon beantwoorden dan de code zelf — en een Business-uitnodiging die werd geplakt terwijl Pro nog geselecteerd was, werd geweigerd voor het verkeerde plan. Plak de code en druk op Activate.
Coverage Studio for VS Code 1.2026.4 — Niets te kiezen behalve de code
2026-09-24
Gewijzigd
- Enter Subscription Code vraagt alleen nog om de code. De vraag naar het plan is weg: de code benoemt een pool en de pool kent zijn plan, dus de server neemt het vandaar over en weigert een code niet langer als zijnde voor het verkeerde plan. De één-klik-links in de e-mails zijn ongewijzigd; de activatiemails hebben geen stap "kies je plan" meer, en dezelfde code activeert Coverage Studio voor Visual Studio zonder dat VS Code nodig is.
Coverage Studio voor Visual Studio 1.2026.2 — Elke testrun, elk rapport, en wat er bewoog
2026-09-24
Toegevoegd
- Dekking na elke testrun. Collect Coverage in Test Explorer… zet één
.runsettings met Microsofts Cobertura-collector naast de solution — vanzelf opgepikt met Tools → Options → Test → Auto detect runsettings files aan, of eenmalig geselecteerd onder Test → Configure Run Settings; vanaf dan schrijft elke Test Explorer-run een rapport onder het testproject, en dat wordt geladen zodra het verschijnt, samengevoegd met wat de instellingen verder noemen. Niets haakt in op de Test Explorer, dus Visual Studio 2026 en Microsoft.Testing.Platform werken zoals ze zijn. Run Tests with Coverage herkent dotnet test, vitest, jest, pytest, go, cargo, maven, gradle, phpunit en ctest, draait ze met dekking aan in het Output-venster en laadt wat ze hebben geschreven; een testproject zonder coverlet.collector wordt gedraaid met de collector die de test-SDK meelevert.
- Sinds de vorige run. Elke lading wordt vergeleken met de vorige: een driehoek in de gutter op elke regel die begon of ophield te draaien, de trend naast de score, en Compare with Last Run voor de bestanden waarvan de getallen bewogen.
history.enabled bewaart de runs over herstarts heen; gitDiff.enabled beperkt de run tot de regels die uw branch heeft gewijzigd.
- De gates en de Error List. Check Coverage Thresholds beoordeelt de run tegen
threshold.*; met compliance.diagnostics, problems.enabled, problems.perLine of deadCode.enabled staan de bevindingen in de Error List naast die van de compiler zelf, en elk opent zijn bestand.
- Rapporten, exports en een badge. Show Annotated Source opent het actieve bestand als een pagina in het documentvenster — elke regel in zijn kleur, de bevindingen ernaast — die in beide richtingen met de editor meescrolt. Open HTML Report en Generate Full HTML Report schrijven de run naar
htmlReport.outputDir en openen de browser. Export Coverage Report… schrijft CSV per bestand of per functie, Markdown, LCOV, Cobertura, SARIF, een SVG-badge of Fucini JSON. Generate Coverage Badge houdt de badge in de repository, na elke lading met badge.autoUpdate.
- Risk hotspots en rijfilters in het Coverage-venster, zoals in VS Code: de functies waar complexe code weinig dekking treft, de ergste eerst; en een dropdown naast de sortering voor alle bestanden, bestanden met gaten, ongeteste bestanden, of de bestanden die sinds de vorige run zijn gewijzigd.
- Een instellingenbestand in de hoofdmap van de solution.
fucini-coverage.json naast de solution wordt na .vscode/settings.json gelezen en door het instellingenvenster geschreven wanneer het het bestand is dat bestaat — voor een team dat liever geen .vscode-map houdt. Beide edities lezen het.
- .NET zonder omhaal.
ignore.generated laat designer-, gegenereerde, obj\- en migratiebestanden buiten elk totaal; testRun.skipWhenTestsFail houdt de laatste goede dekking op het scherm wanneer een run rood eindigt.
Nog niet in deze editie
- Het Test Coverage-paneel is een VS Code-API, en Solution Explorer kan geen badges tonen. Compare Two History Runs volgt wanneer abonnees erom vragen.
Coverage Studio for VS Code 1.2026.3 — Hotspots, filters en .NET zonder package
2026-09-24
Toegevoegd
- Welke bestanden worden getoond. Een tweede dropdown in de werkbalk van de Coverage-weergave, naast de sortering: alle bestanden, bestanden met gaten, ongeteste bestanden, of de bestanden waarvan de getallen sinds de vorige run bewogen. Mappen volgen hun bestanden en houden hun eigen getallen. In elk plan.
- Risk hotspots. Onder de boom: de functies waar complexe code weinig dekking treft, de ergste eerst, en elke opent haar bestand bij de functie. Een functie komt in aanmerking op CRAP-score —
hotspots.crapThreshold, standaard 30, het getal dat de auteurs van de metriek voorstelden — of op cyclomatische complexiteit alleen, hotspots.complexityThreshold, standaard uit. Community ziet het aantal en de slechtste score; de gerangschikte lijst is Pro.
dotnet test zonder package. Run Tests with Coverage leest eerst de projectbestanden: waar geen enkel naar Coverlet verwijst, gebruikt de run Microsofts eigen collector — --collect:"Code Coverage;Format=cobertura" — die met Microsoft.NET.Test.Sdk meekomt, en zijn rapport wordt geladen zoals dat van Coverlet.
- Gegenereerde .NET-bestanden blijven buiten beschouwing.
ignore.generated, standaard aan, laat *.Designer.cs, *.g.cs, *.generated.cs, *.razor.g.cs, AssemblyInfo, globale usings, alles onder Migrations/ en onder obj/ weg uit elk totaal, elke pagina en elke export. Een designer-bestand dat niemand test kost een solution niet langer haar gate.
- Een mislukte run houdt de laatste goede dekking. Met
testRun.skipWhenTestsFail laat een run die met een falende test eindigt de dekking op het scherm zoals ze was, en zegt dat in het Output-paneel. Standaard uit.
Gewijzigd
- Een Test Explorer-run wordt vanzelf gevonden. Zonder dat er iets is geconfigureerd, omvatten de bekende namen nu de map
TestResults/<run>/ van elk testproject, niet alleen die van de werkruimtemap zelf, en de <user>_<machine>_<date>.cobertura.xml van Microsofts collector naast die van Coverlet. Een .NET-solution waarvan de tests in Visual Studio zijn gedraaid, toont haar dekking bij het eerste openen; elke run-map wordt geladen, en de samenvoeging houdt per bestand het woord van de nieuwste run.
Coverage Studio voor Visual Studio 1.2026.1 — dezelfde coverage, in de andere IDE
2026-09-23
Toegevoegd
- Een tweede extensie, voor Visual Studio 2022 en 2026 — Community, Professional en Enterprise. Dezelfde lezer als de VS Code-editie, dus hetzelfde rapport geeft dezelfde cijfers, tot op het cijfer, in beide editors; en dezelfde
fuciniCoverage.*-instellingen, gelezen uit .vscode/settings.json én uit de eigen gebruikersinstellingen van VS Code als dat op de machine staat. Hij gebruikt de eigen code coverage van Visual Studio niet: in Visual Studio 2022 is dat een Enterprise-functie, en op Community en Professional is dit de enige coverage die de IDE laat zien. - In de editor: een balk in de marge per regel — rood liep nooit, amber deels, een heatmap naar bezoeken — inline hit counts, een regel boven elke functie met haar coverage, complexiteit, CRAP-score en MC/DC, strepen op de schuifbalk, een hover die zegt welke tak niet is genomen, en een stip op een regel die je sinds het rapport hebt bewerkt.
- Het Coverage-venster (View → Other Windows → Coverage): elk bestand met zijn cijfers en één score over alles, sorteerbaar, met de ongemeten bestanden eronder; de statusbalkitems
Coverage en File, elk met de volledige kaart. - Commando's onder Tools → Coverage Studio, met tweetoetsakkoorden na
Ctrl+Shift+U: N/P voor de volgende en vorige ongedekte regel, B voor de volgende deels geteste beslissing, R om te herladen. Watch-modus herlaadt wanneer het bestand dat je build schrijft verandert. - Getting Started, de zes stappen met een knop voor elk, in 18 talen; opent de eerste keer vanzelf.
- Instellingen via het tandwiel in de werkbalk van het Coverage-venster, dat de gebruikersinstellingen van deze editie of de
.vscode/settings.json van de map schrijft en de commentaren bewaart van een bestand dat het bewerkt. - Licentie: inbegrepen bij elk betaald plan. Een machine waar Coverage Studio voor VS Code geactiveerd is heeft niets meer nodig — de sleutel wordt vanzelf gevonden; overal elders neemt Tools → Coverage Studio → Licence… de abonnementscode uit je activatiemail aan. Zonder abonnement wordt geen coverage gelezen: er is geen gratis laag in Visual Studio.
Nog niet in deze editie
- Run Tests with Coverage en het Test Coverage-paneel zijn VS Code-API's; Solution Explorer kan geen badges tonen. De Annotated Source-weergave, het HTML-rapport en de exports, Check Thresholds, de Error List-meldingen, geschiedenis en trend, en diff-coverage volgen in de volgorde waarin abonnees erom vragen.
Coverage Studio for VS Code 1.2026.2 — Aan de slag, en twee editors op één abonnement
2026-09-23
Toegevoegd
- Een walkthrough. Get started with Coverage Studio — onder Help → Welcome → Walkthroughs, en na de installatie vanzelf geopend — brengt een nieuwe gebruiker in zes stappen van een coverage-rapport naar de regels die niemand test, elk met een knop voor het commando waar het om gaat. In alle achttien talen.
- De install-id wordt achtergelaten waar Coverage Studio voor Visual Studio hem leest. De Visual Studio-editie verifieert de sleutel in
license.key tegen dezelfde vingerafdruk en kan de statusopslag van deze extensie niet lezen; bij elke activering wordt de id nu ook naast de global storage van de extensie geschreven, zodat een machine die in VS Code geactiveerd is geen tweede activering in Visual Studio nodig heeft. Een willekeurige UUID, nergens aan gebonden, nooit ergens heen gestuurd.
Gewijzigd
- Een terugbetaling beëindigt het abonnement. Een goedgekeurde terugbetaling of chargeback annuleert het abonnement nu meteen en zijn activatiecode geeft geen sleutels meer uit; terugbetalingen zijn één per klant. Sleutels die al op een machine staan lopen door tot hun eigen vervaldatum, zoals voorheen. Het terugbetalingsbeleid zegt precies wat er gebeurt.
Coverage Studio for VS Code 1.2026.1 — Bestandsnamen die je altijd kunt lezen
2026-09-21
Opgelost
- Bestandsnamen in de Coverage-weergave zijn bij elke breedte leesbaar. De naam was het enige deel van een rij dat kromp — tot zeven tekens in een gewone zijbalk. Hij wordt nu volledig getekend, en de metriekkolommen, de score en de balk schuiven er van links onder en vervagen bij de snede, zodat een half getal nooit als een heel getal leest. Elk cijfer staat nog steeds in de tooltip van de rij.
- De markering “bestand is gewijzigd” houdt het bestand bij. Na het laden volgde ze de eerste bewerking en het eerste herstel, en daarna bewoog niets haar meer tot de volgende keer laden. Elke opslag en elke wijziging op schijf komt nu aan.
- De werkbalk van de Coverage-weergave breekt haar knoplabels niet meer af. In een smalle zijbalk loopt de werkbalk nu tussen haar bedieningselementen door naar een nieuwe regel, en het sorteervak krijgt een eigen regel.
- De coverage-badge is ook in de exportkiezer gratis. Generate Coverage Badge schreef de SVG-badge altijd al op elk niveau, terwijl Export Coverage Report… hetzelfde bestand op Community weigerde. Beide schrijven het nu.
- Show Worst-Covered Folders is gelicentieerd zoals de andere twee lijsten. Er verandert niets op Community, waar alle drie gratis en ongeteld zijn, en ook niet voor een al uitgegeven sleutel.
Toegevoegd
- Een minimaal ondersteunde versie. De extensie leest nu ongeveer één keer per week een klein ondertekend beleid van onze licentieserver. Is een build ouder dan de oudste versie die nog wordt ondersteund, dan stoppen de proefperiode en de gratis laag en vragen ze om een update; een betaalde licentie krijgt de datum te zien en blijft eerst nog een respijtperiode werken. Het ophalen verstuurt niets over jou of je installatie, en een installatie die de server niet kan bereiken wordt daarom nooit gestopt. Er is nu geen minimum ingesteld.
Gewijzigd
- De licentie is vanaf deze release propriëtair. De extensie werd gepubliceerd onder MIT-voorwaarden, wat nooit paste bij een product dat per abonnement wordt verkocht. Je mag de gepubliceerde build binnen je abonnement installeren en gebruiken, ook commercieel; je mag hem niet kopiëren, wijzigen, verder verspreiden of reverse-engineeren. Wat hij uit jouw gegevens maakt — rapporten, exports, badges — is van jou, en de oude naamsvermeldingsvoorwaarde vervalt. Een kopie van een eerdere release blijft onder de voorwaarden waarmee ze kwam.
- De knop voor padacties (⋯) neemt geen ruimte in tot je een rij aanwijst. De 25 pixels die hij op elke rij gereserveerd hield, gaan nu naar de bestandsnaam; hij verschijnt bij aanwijzen direct na de naam, en niets in de rij verschuift.
Coverage Studio for VS Code 1.2026.0 — Condities, mutanten en de tests achter een regel
2026-09-20
Opgelost
- LCOV 2-tracefiles noemen elke functie één keer.
FN:<regel>,<eindregel>,<naam> wordt gelezen zoals lcov 2.0 het schrijft — eerder verscheen elke functie twee keer, één keer als nooit aangeroepen en één keer op regel 0 — en de FNL:/FNA:-paren van lcov 2.2 worden er samen mee gelezen.
- Een C++-template wordt niet meer als nooit uitgevoerd getekend omdat één instantiatie dat niet was, en een functie vol macro’s is weer één functie in plaats van één per macro.
- De toestemmingsteksten zeggen wat de installatie werkelijk verstuurt: geen maandelijkse pagina van uw broncode, en uw gebruikssamenvatting draagt de aanvraagcode waarop uw sleutel is afgegeven.
Toegevoegd
- Conditiedekking is een metriek op zichzelf.
a && b is één beslissing en twee condities, en een suite kan beide takken nemen zonder b ooit onwaar te zien. Ze heeft nu een eigen rij, kolom, export, badge, gewicht in de score (3, tussen takken en MC/DC) en drempel — gelezen uit BullseyeCoverage, een TRACE32-cond-export en GCC 14’s -fcondition-coverage.
- Mutanten, waar ze zitten. PIT- en Stryker-rapporten worden mutant voor mutant gelezen: de overlevende worden op hun eigen regel in de editor gemarkeerd, met de wijziging en de tests die hem uitvoerden in de tooltip, en opgesomd in het HTML-rapport en de geannoteerde bron.
- Welke tests deze regel hebben uitgevoerd. coverage.py met
--show-contexts en OpenCover met -coverbytest zeggen allebei welke tests een regel bereikten; de tooltip met het aantal treffers noemt ze.
- Het deel van een uitgevoerde regel dat nooit liep, wordt in de editor getint, en C- en C++-functies krijgen een complexiteit en een CRAP-score, geteld uit de takgegevens die llvm-cov al draagt.
- JaCoCo-, Cobertura- en Coverlet-projecten laden bij de eerste opening, zonder instelling — ook waar Maven, Gradle en
dotnet test standaard schrijven.
- Elke metriek naast elk bestand, bij elke breedte, geordend op het gewicht in uw score, waarbij wat niet past schuift in plaats van verdwijnt — en een teller op het Coverage-pictogram wanneer een tracefile herlaadt terwijl u ergens anders kijkt.
- Een pre-releasekanaal waarvoor u zich kunt aanmelden, en één knop in de editortitelbalk die de dekkingskleuring uitzet en precies terugbrengt wat er stond.
Gewijzigd
- Bullseye en TRACE32: takdekking bevat geen condities meer. De beslissingen zijn takdekking en de condities conditiedekking, dus het takcijfer van zo’n project verandert en de samengestelde score met hem. Zet
whmWeights.conditions op 0 voor de score zoals hij was.
- De gratis Community-laag heeft een weektegoed: vijf per week van elk van de getelde acties, waar er twintig per dag waren, en bij een limiet wordt een abonnement of een 7-daagse pas aangeboden. Een installatie die al in gebruik is houdt 30 dagen de oude limieten en wordt eenmaal gewaarschuwd, met de datum.
- De proefperiode en de gratis laag houden een gebruiksregister bij de licentieserver: een hash van VS Code’s machine-id, de editie, de dag waarop de evaluatie begon en de tellers van de getelde acties — niets anders, nooit op een betaalde licentie en er wordt nooit op gewacht. De telemetrieruil is nu eenmalig 30 dagen.
- De maandelijkse pagina broncode is weg — niet meer verzameld, bewaard of verstuurd, voor niemand, en een pagina die een eerdere build bewaarde wordt bij de eerste start van deze verwijderd.
0.2026.82 — Drempels die bij uw project passen, en alles wat uw rapporten bevatten
2026-09-17
Opgelost
- De heatmap leest op een donker thema in de juiste richting. Het kleurverloop liep van lichtgeel naar donkerbruin, zodat de heetste lus de flauwste balk had. Een donker thema heeft nu een eigen verloop, van gedempt olijfgroen naar fel oranje.
- De MC/DC-hover toont zijn details weer, en een llvm-cov-beslissing telt haar condities correct. De huidige VS Code vouwde de hover samen tot één regel; en
(a && b) || c werd vermeld met één conditie op 100% onder een kop die terecht 2 van de 3 paren noemde. - C++-functies heten zoals u ze hebt geschreven:
clamp_to<int> en gearbox::next_gear in plaats van de linkernaam ??$clamp_to@H@@YAHHHH@Z, voor llvm-cov, lcov en gcov. - De regelaantallen van Istanbul komen overeen met nyc,
dotnet-coverage-XML wordt gelezen, SimpleCov-regels met :nocov: worden uitgesloten in plaats van als defect behandeld, en een rapport dat alleen een samenvatting bevat, behoudt zijn cijfers, in welke volgorde de rapporten ook worden gelezen. - Multi-root-werkruimten: het HTML-rapport noemt een map niet meer twee keer, de Coverage-weergave zet de naam van een werkruimtemap erboven, en een
pathRemap-regel mag zowel ${workspaceFolder} als ${workspaceRoot} gebruiken.
Toegevoegd
- Alles wat een rapport bevat, wordt getoond. Functieaanroepen, objectcode en een mutatiescore krijgen een kolom in de Coverage-weergave, het HTML-rapport en de CSV- en Markdown-exports, een rij in de statusbalkkaarten en een badge in de geannoteerde broncode — en een metriek die een rapport niet bevat, wordt weggelaten in plaats van als nul afgedrukt.
- Complexiteit en CRAP. Waar een rapport cyclomatische complexiteit bevat (OpenCover, JaCoCo, Clover, Cobertura), krijgt elke functie een CRAP-score op haar CodeLens, krijgt een bestand een Max CRAP die naar de methode linkt, en somt het HTML-rapport de Riskiest Methods op.
- Meer uit elk formaat: benoemde takarmen, uitgesloten regels, kolombereiken binnen een regel, de tool, de versie en de datum van het rapport, en de waarschuwingen die een tool erin heeft geschreven.
- Optionele gewichten voor objectcode en de mutatiescore in de samengestelde score, beide
0 tenzij u ze instelt.
Gewijzigd
- De standaarddrempels zijn niet langer 100%. Een drempel die u niet hebt ingesteld, staat nu voor regels 80, functies 80, regio’s 75, takken 70 en samengestelde score 75, zonder poort op MC/DC, instantiaties, functieaanroepen of objectcode — wat van een gewoon project kan worden gevraagd.
fuciniCoverage.threshold.profile: "safety" zet elke poort terug op 100, precies zoals voorheen, en een drempel die u wel hebt ingesteld, gaat boven beide profielen. Als u op de oude standaardwaarden vertrouwde, wordt u milder beoordeeld totdat u safety selecteert; een installatie die al eerder draaide, krijgt dat één keer te horen, met een knop die het profiel instelt. - Een metriek zonder poort toont een neutraal streepje in de kaarten in plaats van een vinkje of een kruisje, en het instellingenpaneel toont vooraf het oordeel onder de poorten die werkelijk van kracht zijn.
0.2026.81 — Exacte percentages, en een rapport dat je kunt versturen
2026-09-16
Opgelost
- Dekking in een buffer met niet-opgeslagen wijzigingen klopt weer. Een run die werd geladen terwijl een bestand niet-opgeslagen bewerkingen had, zette elke markering, hover en CodeLens evenveel regels verschoven als die bewerkingen hem hadden geduwd. De bewerkingen worden nu teruggehaald uit het bestand op schijf, en een hele regel die boven een regel wordt geplakt telt die regel niet meer als bewerkt.
- Samenvoegingen en herhaalde LCOV-records tellen op. Een nieuwer tracefile houdt niet langer de branch- en MC/DC-samenvattingen van de oudere run, en een bestand dat tweemaal in één tracefile staat wordt gecombineerd zoals genhtml dat doet.
- De licentiesleutel blijft op de eigen machine. Settings Sync draagt hem niet meer over naar andere installaties, waar hij de dekking blokkeerde; een verlopen Business-, Enterprise- of Pro Plus-sleutel vernieuwt zichzelf tot 45 dagen na afloop.
- Externe tracefiles worden zorgvuldiger opgehaald.
remote.headers blijven bij hun oorsprong over omleidingen heen, een ophaalactie geeft na 30 seconden op, een aanmeldpagina wordt geweigerd in plaats van gecachet, en een offline geopend venster laadt de laatst gedownloade kopie. Zelf-updaten installeert alleen de eigen editie. - Parsers: llvm-cov-regeltellingen komen overeen met
llvm-cov show, OpenCover-beslissingen uit verschillende methoden overschrijven elkaar niet meer, xccov, TRACE32 en EMMA behouden hun regelcijfers, Cobertura-klassen die een bestand delen zijn één bestand, JaCoCo-verzamelrapporten worden gelezen, en padtoewijzing lost .. op en vergelijkt hele segmenten. - In de editor: de geschiedenis wordt per werkruimte bijgehouden, markeringen blijven op echte bestanden in plaats van op het HEAD-paneel van een diff-editor, regels voorbij het einde van een bestand worden niet getekend, Explorer-badges op Windows werken voor
C:\…-paden, en grote runs zijn sneller op te zoeken.
Toegevoegd
- Diagnoserapport versturen. De meldingen bij een mislukte lading, extern ophalen, samenvoeging, geschiedenisvergelijking of chat bieden het aan. Het toont precies de JSON die verstuurd zou worden, met optioneel een bestandsfragment van 4 KB, een opmerking en een antwoordadres, en verstuurt niets tot je op Versturen klikt.
- Foutrapporten. Een
FUCINI_*-fout wordt gerapporteerd zonder bestandsinhoud, paden of namen wanneer het telemetrieniveau van VS Code all of error is. Drie logregels hebben een eigen code: FUCINI_REMOTE_002, FUCINI_REMOTE_003 en FUCINI_GITDIFF_002, elk beschreven in de gebruikershandleiding.
Gewijzigd
- Elk dekkingspercentage heeft twee decimalen, afgekapt in plaats van afgerond:
87.43%, en 100.00% alleen als de dekking precies 100 is. - Drempels beslissen op de exacte waarde. Tot nu toe werd elk percentage eerst afgerond op een geheel getal, zodat 89,6% een drempel van 90% haalde. Een project dat alleen door afronding slaagde, toont nu NON-COMPLIANT tot de dekking de drempel echt bereikt.
- Telemetrie is dagelijks. Elke installatie stuurt op VS Code-telemetrieniveau
all dagelijks een klein licentiebericht; met telemetry.enabled aan gaat de gebruikssamenvatting dagelijks uit in plaats van maandelijks. Installaties die functies ontgrendelden voor telemetrie worden gevraagd voordat hun voorwaarden veranderen.
0.2026.80 — Een update die je ziet
2026-09-14
Toegevoegd
- De Coverage-weergave meldt een nieuwe update, en blijft dat doen. Een balk boven de licentiebanner noemt de nieuwe versie naast de versie die je hebt, met dezelfde drie knoppen als de updatemelding: ‘Downloaden & installeren’, ‘Wijzigingslogboek bekijken’ en ‘Deze versie overslaan’. Het pictogram van de weergave in de activiteitenbalk krijgt ook een badge, zodat je het ook ziet als de weergave dicht is. De melding verscheen maar één keer, bij de automatische controle, en een klik ergens anders liet hem verdwijnen tot de volgende controle een dag later; de balk blijft staan tot de update is geïnstalleerd of overgeslagen, of
fuciniCoverage.update.checkForUpdates is uitgezet, en blijft ook na het herladen van het venster.
0.2026.79 — Eén ping per dag
2026-09-14
Gewijzigd
- De kleine pings gaan hoogstens één keer per dag uit, samen. Een update, een licentiewijziging, een nieuw dekkingsformaat en een bestand dat niet te lezen was, waren vroeger elk een eigen ping, verstuurd zodra ze werden opgemerkt — en op sommige installaties elke sessie opnieuw: een ingetrokken seat meldde zijn intrekking bij elke start, en wisselen tussen werkruimten met verschillende formaten meldde elke keer een “nieuwe” set. Ze worden nu verzameld en als één ping verstuurd, hoogstens één keer per dag. Een dag zonder iets te melden verstuurt niets.
- Alleen wat echt veranderd is, wordt gemeld. Een licentie die binnen de dag verandert en weer terugkeert, meldt niets, en de formaten zijn alle formaten die de installatie ooit heeft geladen in plaats van die van de laatste werkruimte. De installatieping en de verwijdermelding gaan nog steeds direct uit, en er wordt niets nieuws verzameld.
- De eigen telemetrieschakelaar van VS Code geldt nu ook voor de kleine pings. Staat
telemetry.telemetryLevel op off, dan wordt er voor de dagelijkse ping niets verzameld en niets verstuurd; tot nu toe hielden alleen de maandelijkse samenvatting en de verwijdermelding zich daaraan. De eenmalige installatieping is ongewijzigd.
- Een maand die afloopt terwijl de editor stilstaat, wordt toch gemeld. De maandelijkse samenvatting werd alleen gecontroleerd na het laden van dekking, dus een installatie die niet meer werd gebruikt, verstuurde haar laatste maand nooit. Nu wordt die ook elk uur gecontroleerd zolang VS Code open is — nog steeds alleen met telemetrie aan, en nog steeds hoogstens één keer per 30 dagen.
Opgelost
- Een ping die de server weigerde, telt niet meer als verstuurd. Elk antwoord van de server, ook een fout, gold als aflevering, dus een geweigerde dagelijkse ping raakte kwijt wat hij had verzameld en een geweigerde installatieping werd niet opnieuw geprobeerd. Nu telt alleen een geslaagd antwoord; een geweigerde dagelijkse ping of maandelijkse samenvatting blijft bewaard en wordt een dag later opnieuw geprobeerd.
0.2026.78 — Veertien nieuwe dagen
2026-09-13
Gewijzigd
- Elke evaluatie krijgt eenmalig 14 nieuwe dagen. De eerste keer dat deze release start, wordt de proefperiode heropend op elke Pro-installatie zonder betaalde licentie — of die nu lang geleden verliep of nog een paar dagen over had — en loopt die vanaf die dag 14 dagen. Een korte melding zegt dat wanneer het gebeurt. Een betaalde licentie blijft onaangeroerd, en de Community-editie, die geen proefperiode heeft, is ongewijzigd.
- Een betaalde licentie zegt “Geactiveerd”, in het groen. De licentiebanner toonde een abonnee vroeger “Geactiveerd — nog 30 dagen”. Een abonnementssleutel loopt tot het einde van de betaalde periode en wordt daarmee verlengd, dus die aftelling zou altijd blijven lezen als een proefperiode die bijna afloopt. De kop zegt nu gewoon Geactiveerd, de datum staat in de details als “Geldig tot”, en de aftelling komt alleen terug in de laatste week voordat een sleutel verloopt, naast de melding over binnenkort verlengen die er al stond.
0.2026.77 — Je code plakken, en dat is alles
2026-09-12
Toegevoegd
- “Enter Subscription Code” — en er wordt niets anders gevraagd. Kies je plan, plak de code uit je aankoopmail, bevestig, en je licentiesleutel wordt voor je uitgegeven en ingevuld. Tot nu toe liep de enige route vanuit de editor via de evaluatievragenlijst — naam, e-mail, soort account, bedrijf, een enquête — en dat is het verkeerde formulier om voor te leggen aan iemand die al gekocht heeft. De andere route was de
vscode://-link in de mail, en daar voorzichtig mee zijn is verstandig en niet schrikachtig: zo’n link kan door elke pagina die je bezoekt worden afgevuurd, en juist daarom vraagt de activering je om te bevestigen. De opdracht staat in het Opdrachtenpalet, en hij is een knop op de licentiebanner van het dekkingspaneel en in het activeringsvenster — in elke toestand, want een licentie verhuist tussen machines en halverwege een proefperiode kopen is het gewone geval en niet de uitzondering.
- Een manier om de plannen vanuit de proefperiode zelf te zien. De prijzenpagina was te bereiken vanaf de schermen van de gratis editie, maar niet vanuit het activeringsvenster of de licentiebanner — de ene plek waar iemand die “nog 3 dagen” ziet staan echt kijkt. Die lezer kreeg een vragenlijst en een tip over
settings.json aangeboden, en geen enkele prijs.
Gewijzigd
- Het activeringsvenster en de licentiebanner beginnen niet meer met
FCK1. Beide openden voorheen met je aanvraagcode en “plak de sleutel in settings.json”, en dat is de weg voor het geval onze licentieserver helemaal niet te bereiken is. Als eerste getoond las het als de instructie — dus een klant met een abonnementscode FCB1… werd naar “Enter Activation Key” gestuurd, het ene veld dat die zeker weigert. Beide staan er nog, onder de routes die passen bij iemand die gekocht heeft, en beschreven als wat ze werkelijk zijn.
0.2026.76 — De opdracht die de e-mail noemde
2026-09-12
Opgelost
- “Request Activation Key” is nu echt een opdracht. Je aankoopmail — en de activeringspagina, in elke taal — vertelt je dat je, als de één-kliklink je mailprogramma niet overleeft, Fucini Coverage: Request Activation Key via het Opdrachtenpalet kunt uitvoeren, je plan kiest en je code plakt. Die naam hoorde bij de titelbalk van het paneel en bij de link zelf, nooit bij een opdracht, dus in het palet stond er niets onder — en de naam die er het dichtst bij komt, Enter Activation Key, neemt de sleutel
FCK1… die onze server uitgeeft, niet de code FCB1… die in je mail staat. De instructies volgen bracht je precies in het ene veld dat zeker zou weigeren wat je in handen had. Nu is het een echte opdracht.
- Het activeringsvenster biedt Licentie aanvragen… ook aan terwijl een proefperiode of sleutel nog geldig is. Die knop werd achtergehouden tot een van de twee verlopen was, met het argument dat een werkende installatie geen reden heeft om de licentieserver te bellen. Maar halverwege een proefperiode kopen is het gewone geval en niet de uitzondering, en wie in die positie zat had vanuit het venster geen route naar het veld waar zijn code hoort: de twee knoppen die overbleven vroegen om een sleutel die alleen het inwisselen van de code oplevert.
0.2026.75 — Een kleurenblindvriendelijk palet
2026-09-12
Toegevoegd
- Een kleurenblindvriendelijk palet. Zet
colorScale.preset op colorblind en dekking wordt getekend in vermiljoen, oranje en blauw (het Okabe–Ito-palet) in plaats van rood, amber en groen — het verloop, de gootbalken, de regelmarkering, de Verkenner-badges en de markeringen sinds de vorige run. Een kleur die je zelf hebt ingesteld, gaat voor.
0.2026.74 — Dekking, gefilterd per test
2026-09-12
Toegevoegd
- Dekking filteren per test in de eigen Test Coverage-weergave van VS Code. Als een tracebestand zijn tests benoemt — de
TN:-secties van lcov — wordt elke test een item onder Fucini Coverage in de Test Explorer, noemt elk bestand in de Test Coverage-weergave de tests die er iets in uitvoerden, en toont het kiezen van één test de regels die die test bereikte. ${command:…} in padinstellingen. ${command:cmake.buildDirectory}/coverage.info volgt de CMake-kit die gekozen is. Het commando draait vóór elke discovery, maximaal vijf seconden en alleen in een vertrouwde werkruimte; een commando dat mislukt laat de variabele staan zoals geschreven, en de uitvoer zegt waarom.- Een snelle start in 30 seconden en een vergelijking met de alternatieven openen nu de Marketplace-pagina en de startpagina.
Opgelost
- Een tracebestand dat een bestand per test vastlegde, telde het ook per test mee. De records worden nu per tracebestand opgeteld, zoals genhtml ze leest: het bestand telt één keer mee in de totalen, en met meerdere tracebestanden geladen gaan de regels van geen enkele test verloren.
0.2026.73 — Ondertekende updates, en een sleutel die de overstap overleeft
2026-09-11
Opgelost
- De installatie-id wordt nu opgeslagen voordat iets hem gebruikt. 0.2026.72 build 2 zorgde ervoor dat de id niet meer bij elke aanroep opnieuw werd bepaald, maar bij het opstarten wachtte nog steeds niets tot hij was weggeschreven. Een venster dat vlak na het openen werd gesloten, kon hem dus nog steeds kwijtraken — en daarmee de machinevingerafdruk waaraan een activeringssleutel is gekoppeld. Het opstarten wacht nu.
- Overstappen van Pro naar Community houdt je activeringssleutel geldig. Elke editie heeft een eigen extensieopslag, dus Community begon met een nieuwe installatie-id en een nieuwe vingerafdruk, terwijl de sleutel in je instellingen — ook de sleutel die de overstap net had aangevraagd voor de gratis ontgrendeling — aan de oude was gekoppeld. De overstap geeft de id nu door.
Beveiliging
- Updates van fucini.software zijn ondertekend en worden gecontroleerd voordat ze worden geïnstalleerd. Elke
.vsix in de updatefeed heeft een SHA-256-hash en een Ed25519-handtekening van een sleutel die nooit op de webserver staat. De ingebouwde updater en de overstap naar Community controleren beide tegen het gedownloade bestand en weigeren al het andere — een foutpagina van een proxy, een afgebroken download, een oudere build uit een cache, of een bestand dat niet van ons is. HTTPS alleen dekt dit niet: een bedrijfsproxy die TLS inspecteert, ondertekent elke verbinding die hij ziet opnieuw. - Elke release heeft een eigen bestandsnaam. De updatefeed verwijst nu naar een
.vsix met versienummer in plaats van een bestand dat bij elke release werd overschreven, zodat een cache die Cache-Control negeert de build van vorige maand niet kan uitleveren als die van deze maand. De links op de downloadpagina blijven gelijk.
0.2026.72 — De beslissingen die maar één kant op getest zijn
2026-09-10
Toegevoegd
- Spring naar de beslissingen die maar één kant op getest zijn. Next Partly-Tested Decision en zijn vorige tegenhanger lopen langs de vertakkingen waarvan sommige takken uitgevoerd zijn en andere nooit. Dat is het gat dat navigatie langs ongedekte regels niet kan tonen: een regel waarvan de instructie uitgevoerd is, geldt als gedekt en blijft dat, hoeveel van zijn takken ook nooit genomen zijn —
if (a && b), één keer bereikt met a onwaar, is 100% regelgedekt en half getest. Eén halte per beslissing in plaats van per tak, want de takken van een if/else kunnen pagina’s uit elkaar liggen, en springen naar de vijfde tak van een switch zegt minder dan springen naar de switch zelf. Beslissingen waarvan geen enkele tak bereikt is, blijven aan de ongedekte-regelcommando’s, die daar toch al stoppen — en een bestand waarvan het rapport helemaal geen vertakkingen bevat, zegt dat, in plaats van te beweren dat elke beslissing beide kanten op getest is.
Reload Coverage herleest wat er al geladen is. Met bewaken uit was de enige weg terug naar verse cijfers na het opnieuw draaien van de tests Load Coverage, dat opnieuw zoekt en met een andere set kan terugkomen dan die op het scherm staat. Dit herleest precies wat er nu geladen is, inclusief met de hand gekozen tracefiles die het zoeken nooit meer zou vinden.
Copy Coverage Summary zet de run in een Markdown-tabel. Slechtst gedekte bestand eerst, met een totalenregel, klaar om in een pull request te plakken. De kolommen voor vertakkingen en MC/DC verschijnen alleen als iets in de run ze gemeten heeft: een kolom streepjes leest als nul dekking in plaats van als niet gemeten, en dat is het tegenovergestelde van waar.
Opgelost
- De installatie-id kon tussen sessies veranderen — en juist daaruit wordt de licentievingerafdruk opgebouwd. Hij werd bij elke aanroep opnieuw bepaald en weggeschreven zonder dat iets erop wachtte, dus een tweede aanroep, of een editorvenster dat kort na het opstarten sloot, kon een nieuwe opleveren. Een id die verandert is een activatiesleutel die niet meer klopt; het blies bovendien elk cijfer op dat per installatie geteld wordt. Hij wordt nu één keer per sessie vastgesteld en opgeslagen voordat iets hem gebruikt. Build 2.
0.2026.71 — Welk tracefile dekte deze regel
2026-09-08
Toegevoegd
- Herkomst op regelniveau. Met meer dan één tracefile geladen eindigt de tooltip met het trefferaantal nu met Gedekt door: en de rapporten die op die regel een treffer registreerden — en een klik op een tracefile-rij in het Coverage-paneel licht nu de regels op die dat tracefile bijdroeg, in elke open editor, net zoals het al de bestanden oplichtte die het mat. Dit is de ene vraag die een samengevoegde run wél kan beantwoorden en een enkel rapport niet: twee tracefiles die hetzelfde bestand meten zijn het oneens over de regels, en tot nu toe streek de samenvoeging dat verschil glad zonder het ooit te tonen. Samenvoegen gebeurt nog steeds per bestand — het nieuwste rapport wint een gedeeld bestand volledig — dus de herkomst per regel wordt vóór de samenvoeging geïndexeerd. Alleen gedekte regels tellen: een rapport dat een regel als
0 noteerde, heeft hem niet gedekt.
- Het
TN:-record van lcov wordt eindelijk gelezen. Een tracefile dat zijn suite benoemt — TN:integration — verschijnt als coverage.info (integration) overal waar herkomst wordt genoemd, en die naam overleeft een export terug naar lcov in plaats van leeg te worden weggeschreven. De meeste tools schrijven TN: leeg en veranderen niets; de tools die hem wél invullen zijn juist die waarvan de tracefiles worden samengevoegd, en dan is de naam het enige dat zegt welke welke is.
fuciniCoverage.lineHighlight kleurt de regels zelf. off | uncovered | heatmap, standaard uit: een doorschijnende kleur achter elke niet-gedekte en gedeeltelijk gedekte regel, en in heatmap ook achter elke uitgevoerde regel, warmer naarmate hij vaker liep. Een eigen instelling in plaats van een vierde waarde van editorGutter.mode, omdat mensen ze in verschillende combinaties willen: de gaten gekleurd met een schone gutter, of balken zonder kleur achter de code. Doorschijnend omdat het onder de tekst ligt, en het kleurt de gaten in plaats van de gedekte regels, om dezelfde reden als de gutter.
fuciniCoverage.overviewRuler beslist zelf over het streepje in de schuifbalk. follow (standaard) doet wat het altijd deed: een streepje waar de gutter een niet-gedekte of gedeeltelijke balk tekent, en nooit voor de heatmap. uncovered tekent het ook met editorGutter.mode uit — een kaart van de gaten in het bestand langs de schuifbalk en verder niets naast de code. off behoudt de balken en laat het streepje weg. De liniaal zat eerder vast aan de gutter, dus die twee combinaties bestonden niet.
Opgelost
- Een tracefile dat niet te parseren is, zegt nu waarvoor het is aangezien. "…is niet welgevormd" liet de lezer raden of het bestand überhaupt herkend was als het formaat dat hij denkt — en een Cobertura-document dat door de VectorCAST-parser wordt geweigerd is een ander probleem dan een Cobertura-document dat echt is afgekapt. De melding eindigt nu met Het is gelezen als cobertura. zodra een parser het bestand claimde. Claimde geen enkele parser het, dan wordt er niets toegevoegd: "niet in een formaat dat deze extensie leest" zegt dat al volledig.
0.2026.70 — De melding over verouderde gegevens toont haar pictogram weer
2026-09-08
Opgelost
- De melding over verouderde gegevens in de tooltip van de statusbalk toont haar klokpictogram weer, in plaats van de tekst
$(history). De melding die zegt dat de getallen eronder een oudere versie van de bestanden beschrijven, draagt hetzelfde $(history)-teken als de statusbalk zelf. In de statusbalk wordt dat teken als klokpictogram getekend, omdat StatusBarItem.text pictogrammen zelf invult; de tooltip is een MarkdownString, die zich daarvoor met supportThemeIcons moet aanmelden en dat nooit deed — zodat juist de regel die uitlegt waarom de dekking niet te vertrouwen is, met een stuk ruwe syntaxis begon. De tooltip meldt zich nu aan.
0.2026.69 — Guttermodi, externe tracefiles, multi-root-werkruimten en ongemeten bestanden
2026-09-08
Toegevoegd
- De eigen gutter van de editor kan nu ongedekte regels tonen, of een heatmap van trefferaantallen. Standaard toont hij nog steeds alleen bevindingen — MC/DC-balken, driehoeken sinds de vorige run, stippen op bewerkte regels — en de kleurgecodeerde weergave van een heel bestand blijft de Annotated Source.
fuciniCoverage.editorGutter.mode kiest voor meer: uncovered zet een balk op elke regel die nooit liep en een amberkleurige op elke regel met een tak die nooit is genomen, en niets op gedekte regels, zodat een groene muur de drie rode niet verbergt; heatmap voegt een warme tint toe op elke uitgevoerde regel, heter naarmate hij vaker liep. Choose Editor Gutter Mode... schakelt tussen de drie vanuit het palet of het statusbalkmenu. De README beweerde voorheen zonder meer ‘native gutters’; hij zegt nu wat er werkelijk is.
- Inline trefferaantallen.
fuciniCoverage.hitCounts.inline schrijft ×12 achter elke regel waarop een statement begint, ×0 inbegrepen — het getal dat altijd al bij aanwijzen te zien was, zonder aan te wijzen. Toggle Inline Hit Counts schakelt het om; het statusbalkmenu biedt het aan als Tonen of Verbergen, wat van toepassing is.
${env:NAME}, ${config:section.key}, ${userHome} en ${workspaceFolderBasename} in elke padinstelling, naast de ${workspaceFolder} die er al was. Een variabele die de extensie niet kent, blijft staan zoals geschreven, zodat een typfout in het detectielog verschijnt als het pad waarnaar is gezocht in plaats van te verdwijnen.
- Een item in
coverageFile.paths mag een http(s)://-URL zijn. Het artefact wordt bij elke lading naar de opslag van de extensie opgehaald en van daaruit geladen; de Coverage-weergave noemt de URL, niet het cachepad. Elke ophaalactie is conditioneel (ETag / Last-Modified), dus het opnieuw ophalen van een ongewijzigd artefact downloadt niets, en wanneer het ophalen mislukt, wordt in plaats daarvan de laatst gedownloade kopie geladen en staat de reden in de uitvoer. fuciniCoverage.remote.headers voegt Name: value-headers toe met uitgebreide variabelen — Authorization: Bearer ${env:CI_TOKEN} houdt het token uit settings.json — en fuciniCoverage.remote.refreshMinutes haalt op een timer opnieuw op. Voeg #lcov.info (of een andere bestandsnaam) als URL-fragment toe wanneer de URL zelf niet op een bestandsnaam eindigt, zodat het formaat bekend is.
- Laden en Generate Full HTML Report tonen voortgang, en kunnen worden geannuleerd. Een lading van tien of meer tracefiles, of van 8 MB of meer, draait onder een voortgangsmelding met een knop Annuleren die het bestand noemt dat wordt gelezen en de fase (lezen, daarna bronnen controleren); een kleinere laat alleen de statusbalk draaien, zoals voorheen. Annuleren laat de vorige run geladen en zegt dat. Het HTML-rapport doet hetzelfde per gerenderde en weggeschreven pagina.
- Twee redenen meer om opnieuw te laden. Een absoluut item in
coverageFile.paths buiten de werkruimte — een buildboom naast de checkout, een Bazel-uitvoerroot — wordt nu ook gepeild, zodat een bestand dat daar verschijnt nadat het venster is geopend, wordt geladen in plaats van nooit meer bekeken; de watcher zag altijd alleen de werkruimte. En fuciniCoverage.watch.reloadAfterTasks noemt taken (een label uit tasks.json, of source: name zoals de lijst Run Task het toont, bijv. npm: test) waarvan het einde de dekking opnieuw laadt, of watch.enabled nu aanstaat of niet — voor builds die de watcher niet kan volgen: een run die een gesymlinkte uitvoerboom vervangt, een rapport op een netwerkshare, een dekkingsstap die zijn bestand nabewerkt.
- Multi-root-werkruimten. Elke map van een werkruimte wordt nu op haar eigen voorwaarden gedetecteerd:
coverageFile.defaultLocation, coverageFile.paths, pathRemap, ignore, watch.*, remote.*, badge.*, de rapportmappen, gitDiff.*, problems.perLine, editorGutter.mode en hitCounts.inline worden per map gelezen, zodat de eigen .vscode/settings.json van een map of haar item in het .code-workspace geldt; ${workspaceFolder} betekent de eigen map van het item; tracefiles die in elke map worden gevonden, worden tot één run samengevoegd, en de Coverage-weergave groepeert de bestanden per map. ${workspaceRoot} in een pathRemap-regel probeert eerst de eigen map van de tracefile, daarna de andere. Alles wat één map nodig heeft — de bestandsdialogen, de rapport- en badge-uitvoer, git-metadata, Run Tests with Coverage — neemt die van de actieve editor, en met meerdere mappen en geen editor vraagt de testrun welke. Een map die aan de werkruimte wordt toegevoegd of eruit wordt verwijderd, laadt de dekking vanzelf opnieuw. Voorheen namen twaalf plekken de eerste map en kreeg een tweede root voor alles de verkeerde basis.
- De run wordt gepubliceerd naar de eigen Test Coverage-weergave van VS Code. Met
fuciniCoverage.testCoverage.publish (standaard aan) gaat elke geladen run ook naar het native Test Coverage-paneel, zijn percentages per bestand in de Verkenner en de eigen schakelaar ‘Show Inline Coverage’ van de editor — regels, takken en functies, met de details op aanvraag geladen. Show in Test Coverage View publiceert de actieve run en opent het paneel, wat de instelling ook zegt; het statusbalkmenu biedt het aan achter quickActions.showTestCoverage.
- Een padherschrijfregel wordt voorgesteld wanneer bestanden niet overeenkomen. Het meest voorkomende ‘het is geladen maar er licht niets op’ is een tracefile waarvan de paden uit een container of een CI-checkout komen (
/build/src/a.c, /home/runner/work/repo/repo/src/a.c, C:\agent\_work\1\s\src\a.c) terwijl de werkruimte src/a.c heeft. Wanneer een lading bestanden zonder overeenkomst achterlaat, zoekt de extensie de bestandsnamen op in de werkruimte, leidt de prefixregel af die de meeste ervan verklaart, logt die als [FUCINI_REMAP_002], en biedt het laadresultaat Apply Suggested Remap aan — één klik voegt de regel toe aan fuciniCoverage.pathRemap en laadt opnieuw. Suggest Path Remap Rule voert dezelfde analyse op aanvraag uit. Zonder de klik wordt er niets geschreven.
fuciniCoverage.ignore: bestanden die nooit meetellen. Meegeleverde (vendored), gegenereerde of externe bestanden (vendor/**, **/*.generated.ts, build/**) vallen bij het laden uit de run, zodat de Coverage-weergave, statusbalk, drempels, badges, CodeLens, geschiedenis en exports allemaal zonder ze tellen; het laadresultaat zegt hoeveel er zijn weggelaten en de uitvoer noemt ze. Patronen komen overeen met het werkruimte-relatieve pad en het absolute pad; een patroon zonder / komt overeen met een map- of bestandsnaam op elke diepte, net als .gitignore. Voor hele bestanden — regels binnen een bestand blijven de eigen uitsluitingsmarkeringen van de tool gebruiken.
- Problems-items per regel, opt-in.
fuciniCoverage.problems.perLine (off, uncovered of uncoveredAndPartial; standaard uit) zet een Information-diagnose op elk aaneengesloten blok regels dat nooit liep — een dode functie van veertig regels is één item, niet veertig — en, in de tweede modus, op elke regel waarvan een tak nooit is genomen. Alleen voor documenten die open zijn, zodat een run van tweeduizend bestanden het paneel niet kan overspoelen; de items volgen hun regels terwijl de buffer wordt bewerkt en verdwijnen wanneer het document sluit. Het item per bestand achter problems.enabled is ongewijzigd.
- Een dekkingsbadge voor de README. Generate Coverage Badge schrijft een SVG in shields-stijl voor de actieve run naar de werkruimte (
fuciniCoverage.badge.outputPath, standaard coverage-badge.svg), zodat een README hem kan insluiten met  en zonder gehoste dienst. badge.metric kiest regels, takken, MC/DC of de gewogen score; de kleur volgt de colorScale-niveaus; badge.autoUpdate schrijft hem na elke lading opnieuw. De SVG-badge die Export Coverage Report al bood, gebruikt nu dezelfde renderer.
- Ongemeten tegenover ongedekt. Een bestand dat geen enkele test ooit heeft geladen, staat helemaal niet in de tracefile, dus de extensie heeft het altijd al gescheiden gehouden van een gemeten bestand met 0 treffers — en buiten de cijfers, wat precies is hoe een project waarvan de helft van de modules geen tests heeft ‘92%’ leest. Nu is het onderscheid zichtbaar: zo’n bestand openen zet
not measured in de statusbalk, en fuciniCoverage.unmeasured.mode bepaalt wat er verder gebeurt. list voegt een groep Unmeasured toe aan de Coverage-weergave met elk werkruimtebestand van een soort die de run heeft gemeten en dat niet in de run zit, telt ze in het laadresultaat, markeert ze met ? in de Verkenner wanneer badges aanstaan, en laat threshold.unmeasuredFiles Check Coverage Thresholds laten falen boven een gekozen aantal. count gaat verder: elk zo’n bestand komt als 0% in de run — één ongedekte regel per regel code — zodat de statusbalk, drempels, badges, geschiedenis, exports en de Test Coverage-weergave allemaal het eerlijke cijfer zien; het bestand wordt overal als ongemeten getekend, nooit als ‘komt niet meer overeen met zijn dekking’. unmeasured.exclude houdt headers en dergelijke erbuiten (standaard **/*.h, **/*.hpp, **/*.hh, **/*.inl, **/*.d.ts). Standaard uit; de statusbalktoestand is de ene verandering die altijd aanstaat. - De dekkingsweergave laat zien wat het samenvoegen heeft gedaan. Sinds 0.2026.63 vervangt de eigen herhaalde run van een module, geladen bovenop een run van het hele project, de cijfers van die run voor de bestanden van de module, en elke rij noemde het rapport waaruit ze komt — maar een rij waarvan de cijfers een ouder rapport hebben overstemd zag er precies zo uit als een rij die door één van meerdere rapporten is gemeten, en niets zei hoeveel van een rapport was overstemd. Nu is de tracefile-badge van zo’n rij omrand; elke tracefile-rij boven de boom telt wat het samenvoegen met haar bestanden heeft gedaan („42 bestanden · 7 overstemd door een nieuwer rapport”, „7 bestanden · overstemt 7 in oudere rapporten”); en een klik op een tracefile-rij licht de bestanden op die ze heeft gemeten in de volledige boom en dempt de rest, tot ze opnieuw wordt aangeklikt.
fuciniCoverage.coverageView.mergedMarks (standaard aan) schakelt de omranding en de markering uit; de tellingen blijven.
0.2026.68 — Teamseats vragen om de uitnodigingscode
2026-09-07
Opgelost
- Een Business- of Enterprise-gebruiker wordt nu om zijn uitnodigingscode gevraagd, niet om de bedrijfscode. Sinds 2 september weigert de licentieserver de gedeelde bedrijfscode voor een Business- of Enterprise-seat: een seat die daarmee werd geclaimd noemde niemand, dus elke teamseat is nu gekoppeld aan het adres waarop hij is uitgenodigd, en de code die er een activeert is de
FCI1…-uitnodigingscode uit die e-mail. De vragenlijst noemde het veld nog steeds ‘Bedrijfscode’, hintte om die aan de manager te vragen en toonde een FCB1…-voorbeeld — waarmee mensen werden aangezet om precies de ene code te plakken die niet meer werkt, en vervolgens te horen kregen dat ze een bedrijfscode moesten invoeren als ze het veld leeg lieten. In de teamplannen heet het veld nu ‘Uitnodigingscode’, de hint zegt waar de code vandaan komt en dat de gedeelde bedrijfscode geen seat activeert, het voorbeeld toont de vorm FCI1…, en de validatiemelding vraagt om de uitnodigingscode. Pro vraagt zijn abonnementscode onder die naam. Pro Plus is ongewijzigd: het houdt de gedeelde code met opzet. Alle 17 weergavetalen dragen de nieuwe formulering.
0.2026.67 — ${workspaceFolder} werkt in beide padinstellingen
2026-09-05
Opgelost
${workspaceFolder} werkt nu in coverageFile.paths, zoals het altijd al werkte in coverageFile.defaultLocation. De twee instellingen staan naast elkaar en slechts één ervan documenteerde de variabele, dus mensen schreven hem in beide — en een item dat met ${ begint is niet absoluut, dus het ging als letterlijke tekst onder de basismap de zoekglob in, vond niets, en de extensie meldde dat er geen dekking was. Zo’n item wordt nu eerst uitgebreid, waardoor het een absoluut pad wordt, en simpelweg gecontroleerd. Het blijft in de instelling staan zoals geschreven, wordt niet een tweede keer in een andere vorm geschreven als hetzelfde bestand wordt gekozen, en verdwijnt vanzelf uit de instelling wanneer het uit de Coverage-weergave wordt ontladen.- Een geconfigureerd tracebestand dat er niet is, wordt nu in de uitvoer gemeld. Een item met een verkeerd pad faalde op de ene manier die niets rapporteerde: ‘geen dekking gevonden’, niet te onderscheiden van een project dat er echt geen heeft.
[FUCINI_DISCOVERY] noemt nu elk item waarvoor geen bestand is gevonden en het pad waar is gezocht, één keer per item in plaats van bij elke herlading; een item met jokerteken wordt niet gemeld, omdat het kan wachten tot een build iets schrijft.
0.2026.66 — Takken, MC/DC en een score in de functie-CodeLens
2026-08-29
Toegevoegd
- De CodeLens per functie toont nu takken, MC/DC en een samengestelde score, niet alleen regels en treffers — ‘add: 92% gedekt (12/13 regels, 52 treffers, score 88%, takken 3/4 (75%), MC/DC 2/3 (66%))’. Elk ervan wordt bij een functie weggelaten wanneer de tracefile daar niets over te melden heeft — een build in kaal C zonder takgegevens, of een die niet met
-fcoverage-mcdc is geïnstrumenteerd — in plaats van een misleidende 0/0 te tonen; de score verschijnt evenzo alleen naast ten minste één van de andere twee, want met regels als enige metriek is hij per definitie hetzelfde getal waarmee de lens al begint.
- De tooltip van de herkomstbadge zegt hoe lang geleden elke tracefile is geschreven, niet alleen zijn tijdstempel — ‘Gemeten door module.info (2026-08-15 14:32 · 3 uur geleden), ter vervanging van wat lcov.info (2026-08-01 09:10) erover zei.’ De stappen lopen tot ‘zojuist’; na 30 dagen wordt alleen de absolute datum getoond.
- Een gelijke mtime van tracefiles gaat niet langer stilzwijgend voorbij. Twee rapporten die in dezelfde buildstap landen, of een bestandssysteem waarvan de mtime-resolutie grover is dan een seconde, kunnen voor bestanden die ze allebei meten exact dezelfde tijdstempel melden — voorheen viel de winnaar terug op de volgorde van
coverageFile.paths, zonder iets op het scherm dat dat uitlegde. Het uitvoerkanaal zegt het nu: [FUCINI_MERGE_TIE] noemt beide tracefiles en hoeveel bestanden ze delen.
- ‘Show What Changed Since Last Run’ in het
…-menu van een bestandsregel, zodra er een vorige run is om mee te vergelijken — hetzelfde verschil per bestand dat Compare with Last Run al berekent, gericht op het ene bestand waar je naar vroeg in plaats van op de hele boom. Een bestand waarin niets bewoog zegt dat gewoon, in plaats van niets aan te bieden.
- Opdracht Tune Colour Scale: probeer
colorScale.*-kleuren en -drempels tegen de live Coverage-weergave voordat je je erop vastlegt. Elke bewerking wordt rechtstreeks naar de instelling geschreven — de weergave tekent zichzelf al opnieuw bij elke wijziging van colorScale/threshold, dus de waarde schrijven is de voorvertoning — en een afsluitend ‘Behouden’ of ‘Terug naar de oorspronkelijke waarden’ rondt het af.
- Dekkingshiaten per bestand in het Problems-paneel, één item per geladen bronbestand onder
threshold.statement, achter het nieuwe fuciniCoverage.problems.enabled (standaard uit — de standaarddrempel voor statements is 100). Elk item vat samen wat ongedekt is (‘62% regels gedekt — 14 ongedekte regels, 2 ongedekte functies’) en draagt een snelle oplossing die de geïnstalleerde chatextensie opent (Copilot, Claude Code, …) met een prompt om een test voor het hiaat te schrijven — een diagnose per regel zou Problems op een echte codebase overspoelen, dus dit blijft op bestandsniveau, het niveau waarop een lezer echt iets kan doen.
Opgelost
- De reden bij een ontbrekend, afwijkend of geverifieerd bestand in de Coverage-weergave kan nu worden geselecteerd en gekopieerd. Die stond voorheen alleen in de native
title-tooltip van de regel, die — als tooltip van de browser zelf — niet te selecteren is; wie de exacte reden in een bugrapport wilde plakken, moest hem met de hand overtypen. Zweven toont nu dezelfde tekst in een echt, opgemaakt paneel, waar je net als over alle andere pagina-inhoud overheen kunt slepen. De tooltip van een gewoon bestand (alleen zijn pad) blijft onveranderd.
- Een functie waarvan de parameterlijst meerdere regels beslaat, wordt niet langer ten onrechte als verplaatst gemeld.
detectMismatch stond toe dat de vastgelegde regel van een declaratie hoogstens twee regels afweek van waar de naam werkelijk wordt gevonden — genoeg voor het gebruikelijke verschil tussen een signatuurregel, een regel met het retourtype en een openende accolade, maar niet voor een parameterlijst over meerdere regels, die de twee willekeurig ver uit elkaar kan zetten. void LOG_Emit(...) — zeven parameters, één per regel — vastgelegd bij zijn openende accolade op regel 163, werd gemeld als "LOG_Emit" is at line 3: de dichtstbijzijnde tekstuele overeenkomst, die toevallig de naam van de functie zelf in het kopcommentaar van het bestand was, nergens in de buurt van regel 163 of van de echte declaratie op regel 156. De controle accepteert nu ook een naam die verder terug is gevonden wanneer elke regel tussen die naam en de vastgelegde regel leest als één ononderbroken declaratie — geen lege regel, geen regel die het vorige statement of blok afsluit — wat voor een parameterlijst altijd geldt en voor een werkelijk verplaatste functie vrijwel nooit. Waar een afwijking wel echt is, is de gemelde regel nu de overeenkomst die het dichtst bij de vastgelegde ligt, in plaats van altijd de eerste in het bestand.
- De herkomstbadge zegt niet langer ‘+N’. Het eigen rapport van een module bovenop een bredere run laden, markeerde de badge van het bestand met de naam van de module plus het aantal andere tracefiles dat het ook dekte — bedoeld als ‘zoveel zijn overruled’, maar het las als ‘deze rapporten zijn het eens’, en uit de boom viel niet op te maken welke van de n er werden bedoeld. De badge noemt nu alleen nog de tracefile waarvan de cijfers op het scherm staan; de tooltip spelt nog steeds uit wat is overruled, en door wat.
- De herkomstbadge duwt de bestandsnaam ernaast niet langer over de rand van het paneel. De breedte van de badge lag vast (
flex: none), dus zodra een regel ruimte tekortkwam, ving de bestandsnaam het hele tekort op en werd als eerste afgekapt, hoewel de badge van de twee de minst belangrijke is. De badge geeft nu zijn eigen breedte op voordat de bestandsnaam ook maar één teken verliest; het percentage en de balk, die al boven de bestandsnaam gaan, blijven onaangeroerd.
0.2026.65 — De herhaalde run van een module vervangt wat een bredere run zei
2026-08-15
Gewijzigd
- De eigen herhaalde run van een module vervangt wat een bredere run erover zei, in plaats van eraan toe te voegen. Een projectbreed rapport laden en daar bovenop het eigen rapport van één module telde voorheen hun treffers op voor elk bestand dat de twee deelden — een herhaalde run van alleen de tests van die module blies de cijfers op die een bredere, inmiddels verouderde run al had gemeld, in plaats van ze te verversen. De tracefile met de nieuwste mtime op schijf wint nu zonder meer voor elk bestand dat hij meet: statements, takken, declaraties en de samenvattingen per bestand (tak-, MC/DC-, functie-, functieaanroep-, object- en mutatiesamenvattingen) komen allemaal uit dat ene rapport, ongeacht waar elk van beide paden in
coverageFile.paths staat — een herhaalde modulerun wint omdat hij werkelijk nieuwer is, niet omdat hij toevallig als laatste laadt. Een tracefile die voor een bestand helemaal geen statements meldt — een TRACE32-objectcode-export, een Stryker-mutatierapport naast een echt rapport — draagt nog steeds alleen de samenvatting bij die hij werkelijk bevat, en laat de regel- en takdetails van een eerder rapport ongemoeid; dat geval is ongewijzigd. Dit verhelpt ook een oud defect waarbij een MC/DC-samenvatting (of functie-, functieaanroep- of mutatiesamenvatting) per bestand die door twee runs was gemeten, zijn noemer samen met zijn teller opgeteld kreeg, waardoor het werkelijke percentage te laag uitviel. De tooltip van de herkomstbadge zegt nu ‘ter vervanging van wat _ erover zei’ in plaats van ‘bij elkaar opgeteld’.
Opgelost
- Een lange bestandsnaam in de Coverage-weergave wordt nu afgekapt in plaats van over te lopen. De naam-span van de regel miste
min-width: 0, de ene declaratie die overflow/text-overflow: ellipsis van een flex-item werkelijk laat aangrijpen — zonder die hield een lange naam zijn volle breedte zodra het paneel smal genoeg werd, en liep hij onder de herkomstbadge, het percentage en de balk erna door.
0.2026.64 — De Coverage-weergave sorteren op score
2026-08-01
Toegevoegd
- Sorteer de Coverage-weergave op score, niet alleen op naam. Elke regel draagt al een WHM-score en een uitsplitsing per metriek; het slechtste bestand in een grote boom vinden betekende een alfabetische lijst ernaar afzoeken. Een keuzelijst naast Collapse all / Expand all biedt nu Bestandsnaam, Samengestelde score, Regels, Takken en MC/DC — elke stand behalve Bestandsnaam mengt mappen en bestanden door elkaar, slechtste eerst volgens het eigen percentage van die metriek, zodat een slecht geteste map precies zo wordt gerangschikt als een slecht getest bestand in plaats van ervan weg te worden gegroepeerd. Een bestand zonder gegevens voor de gekozen metriek (een formaat dat nooit takken meldt, bijvoorbeeld) sorteert onderaan in plaats van als 0% te worden gelezen. De keuze wordt bij het maken naar de nieuwe instelling
fuciniCoverage.coverageView.sortBy geschreven, zodat ze een herlading van het venster overleeft in plaats van altijd weer bij Bestandsnaam te beginnen.
Opgelost
- Een functiesignatuur over meerdere regels wordt niet langer ten onrechte als ‘verplaatst’ gemarkeerd. De
fnMap van Istanbul geeft een functie twee regelverwijzingen — waar de naam staat en waar de body begint — en de parser gaf de voorkeur aan de body-regel voor de afwijkingscontrole die later in de brontekst naar de naam zoekt. Voor elke functie waarvan de parameterlijst meer dan twee regels beslaat (gangbaar in een codebase die op 100 kolommen afbreekt) lag de echte regel van de naam te ver van de vastgelegde, en werd het bestand in de Coverage-weergave gedimd met een onterechte waarschuwing ‘komt niet meer overeen met zijn dekking’. De parser geeft nu de voorkeur aan de regel van de naam zelf, waar de afwijkingscontrole altijd al naar zocht.
0.2026.63 — Elke regel noemt zijn tracefile
2026-07-20
Toegevoegd
- Elke regel zegt welk tracefile hem gemeten heeft. Het rapport van één module bovenop een projectbrede run laden is dezelfde bestanden, twee keer gemeten, en de boom zei niets over welk rapport een regel las. Met meer dan één tracefile geladen draagt elke bestandsregel nu de naam van het rapport dat hem mat — het laatst geladene, als er meerdere waren — met
+1 per ander rapport en een tooltip die ze noemt. Een samenvoeging telt hun treffers bij elkaar op in plaats van er één te laten winnen, en de tooltip zegt dat. Bij één tracefile wordt niets getekend, want er valt niets te onderscheiden.
Gewijzigd
- De eigen pagina van de extensie noemt elke instelling, met de echte standaardwaarde. Twintig instellingen hadden helemaal geen regel — de taal, drie drempels, één gewicht en de vijftien schakelaars voor snelle acties — en de telemetrieregel beweerde standaard aan te staan terwijl die al een tijd uit staat. Een test vergelijkt de pagina nu met het manifest, standaardwaarden inbegrepen.
Opgelost
- De hercontrole van bronnen onder
files.watcherExclude, toegevoegd in de vorige release, volgt nu staleWarning.enabled net als de rest van die controle, in plaats van een eigen instellingsnaam.
0.2026.62 — De Verkenner met rust gelaten, stilgezette bronnen opnieuw gecontroleerd
2026-07-06
Gewijzigd
- De Verkenner wordt met rust gelaten. Dekkingsbadges naast bestanden in de Verkenner staan standaard uit. Die kolom is van wie hem gebruikt — VS Code zet daar git’s eigen M en U neer, en er past maar één badge — en de dekkingsweergave toont dezelfde bestanden met dezelfde cijfers, op een plek die daarvoor bestaat.
explorerBadges.enabled zet ze ongewijzigd weer aan.
Opgelost
- Een bron onder
files.watcherExclude wordt ook opnieuw gecontroleerd. De live overeenkomst tussen een bestand en zijn dekking komt van opslaan en van een bestandssysteemwatcher, en die zwijgt over alles wat uitgesloten is — vooral gegenereerde bronnen onder build/, waar een verouderd merkteken het moeilijkst op te merken is. Die bestanden worden nu op dezelfde tweesecondentik als de tracefiles gepeild en alleen herlezen als ze echt veranderd zijn. Boven de tweehonderd zegt de uitvoer dat in plaats daarvan.
0.2026.61 — Eén vraag over de testrunner, niet één per run
2026-06-09
Toegevoegd
- Naar de testrunner wordt één keer gevraagd, niet bij elke run. Een werkruimte met meer dan één herkende runner — een jest-config en een
go.mod bijvoorbeeld — zette de keuzelijst vóór elke Run Tests with Coverage, en vroeg zo een toetsaanslag voor een beslissing die al genomen was. Het antwoord wordt nu voor de werkruimte onthouden, en de vraag zegt dat. Forget the Test Runner stelt de vraag opnieuw, en een onthouden runner die de werkruimte niet meer heeft wordt genegeerd in plaats van uitgevoerd.
Gewijzigd
- De eigen pagina van de extensie noemt elke opdracht. Veertien van de vierendertig waren uit de tabel weggezakt — hier en in de handleiding beschreven, maar niet op de pagina die mensen vóór het installeren lezen. Ze staan er nu allemaal, en een test houdt dat zo.
0.2026.60 · build 3 — Ongedaan maken haalt de stippen weer weg
2026-06-01
Opgelost
- Ongedaan maken haalt de stippen op bewerkte regels weer weg. Een buffer die sinds de run is bewerkt, toont grijze stippen op de herschreven regels, en de dekking trekt zich daar terug. Die bewerkingen ongedaan maken liet de stippen staan: elke wijziging telde, ook een wijziging die de tekst terugzette. Wat de buffer bevatte voordat iemand typte wordt nu onthouden, en zodra hij dat weer bevat verdwijnen de stippen en gelden de cijfers weer.
- De releasenummers worden tegen elkaar gecontroleerd. Het manifest, het bovenste changelog-item en de release-tag dragen alle drie versie en build, alle drie met de hand getypt, en ze zijn eerder uit elkaar gelopen. De testsuite vergelijkt ze nu en controleert dat de items van nieuw naar oud lopen, elk met een echte datum.
0.2026.59 — Een uitlading die blijft
2026-05-12
Gewijzigd
- Een uitgeladen tracefile blijft uitgeladen. Een bestand van de lijst in de dekkingsweergave halen duurde precies zo lang als het venster: zonder configuratie valt de detectie terug op de bekende namen en vond
lcov.info de volgende ochtend gewoon weer, en de enige manier om dat te voorkomen was een pad instellen om er één uit te sluiten. Die beslissing wordt nu voor de werkruimte onthouden. Ze wordt ongedaan gemaakt door het bestand opnieuw te kiezen of het in coverageFile.paths te noemen — een bestand dat de instelling noemt wordt nooit achtergehouden, dus er kan niets ontbreken zonder dat iemand dat gezegd heeft.
Opgelost
- Sneller opnieuw tekenen van een bewerkte buffer. De lijst met herschreven regels werd bij elke tekenbeurt opnieuw uit alle vastgelegde bewerkingen berekend, dus een lang bestand dat de hele middag bewerkt was, betaalde regelaantal maal bewerkingsaantal voor een antwoord dat sinds de laatste toetsaanslag niet veranderd was. Het wordt nu één keer per toetsaanslag berekend.
0.2026.58 · build 2 — Een testrun onthoudt zijn tracefile
2026-05-01
Gewijzigd
- Een testrun onthoudt zijn tracefile, net als een handmatige keuze. Run Tests with Coverage laadde wat de run schreef en vroeg dan of het aan
coverageFile.paths moest worden toegevoegd. Een met de hand gekozen bestand wordt daar sinds 0.2026.56 vanzelf geschreven, en een testrun is dezelfde handeling langs een andere weg, dus die schrijft het nu op dezelfde manier. Eén instelling, coverageFile.rememberPicks, bestuurt beide; de regel van de tracefile in de dekkingsweergave is waar beide er weer af komen.
Opgelost
- De achtergrondtimers stoppen wanneer de extensie stopt. De tracefile-watcher werd met het venster opgeruimd, maar de tweesecondenpeiling erachter en een nog wachtende broncontrole zijn gewone timers, die niets opruimt. De extensie uitschakelen, of een venster herladen met de extensie uit, liet ze doorlopen en een werkruimte lezen waar de extensie niets meer te zoeken had.
0.2026.57 · build 4 — Een gelabelde live preview, getekende vlaggen, elk formaat in het kiesvenster
2026-04-24
Toegevoegd
- De live preview zegt wat hij toont. De preview van het instellingenpaneel begint nu met Run: coverage/lcov.info · 12 bestanden en, als de actieve editor een bestand toont dat de run dekt, Actief bestand: src/a.c met het eigen oordeel van dat bestand onder dat van de run. Hij volgt de editor en elke lading, onder wat het formulier bevat — onopgeslagen wijzigingen inbegrepen. Met het paneel vooraan schakelt een klik in de Dekkingsweergave de preview naar dat bestand in plaats van het te openen.
- Het kiesvenster noemt elk formaat. Eerst Alle dekkingsformaten, dan LCOV; JSON (llvm-cov, Istanbul/nyc, coverage.py, SimpleCov, Coveralls, gcov, xccov, Stryker); XML (Cobertura, JaCoCo, Clover, OpenCover, GNATcoverage, Bullseye, SonarQube, VectorCAST, TRACE32, EMMA, UCIS/UCDB, NCover, dotCover, PIT); Go-dekkingsprofiel; gcov-listing en Testwell CTC++ — en
.lcov, .gcov, .txt en .coveragexml zijn niet meer grijs.
Gewijzigd
- De statusbalk-hovers dragen de kleurenschaal. De metriekbalken in de run- en bestandstooltips nemen de drie kleuren van
colorScale.*, ingedeeld naar de eigen drempel van elke metriek waar die is ingesteld en anders naar de breekpunten van de schaal; de oordeelpillen houden hun vaste statuskleuren.
- Getekende vlaggen in de taalinstelling. De vlag-emoji van 0.2026.56 verschijnen op Windows als twee kale letters. De keuzelijst noemt elke taal nu bij haar eigen naam — Nederlands (nl) — met eronder een rij kleine getekende vlaggen die in de lijst selecteren.
0.2026.56 · build 3 — Keuzes worden onthouden, tracebestanden in de Dekkingsweergave, vlaggen in de taalinstelling
2026-04-08
Toegevoegd
- Een keuze wordt onthouden. Een bestand gekozen met Pick Coverage File leefde alleen in het venster waarin het werd gekozen. Het gaat nu vanzelf naar
coverageFile.paths in de werkruimte-instellingen — relatief aan de basismap als het eronder staat, anders absoluut — zodat het volgende venster het laadt en de bewaker het herlaadt. coverageFile.rememberPicks (standaard aan) houdt het oude gedrag voor wie dat wil. Een absolute vermelding in die instelling noemt nu één bestand, waar het ook staat.
- Tracebestanden in de Dekkingsweergave. Boven de boom één rij per geladen tracebestand, met het aantal bestanden en een knop die het uit de run en uit de instellingen haalt; een knop Kiezen… ernaast voegt er een toe. Het laatste tracebestand verwijderen wist de run.
- Vlaggen in de taalinstelling. De taalkeuzelijst van het instellingenpaneel toonde kale codes; elke vermelding draagt nu een vlag en de eigen naam van de taal — 🇳🇱 Nederlands (nl), 🇯🇵 日本語 (ja), 🌐 Automatisch.
0.2026.55 — De laatste regel van een PHP-bestand is geen dekking voorbij het einde
2026-03-27
Opgelost
- De laatste regel van een PHP-bestand telt niet meer als dekking voorbij het einde. Xdebug en PCOV noteren de impliciete return aan het bestandseinde op de regel na de laatste regelovergang, dus php-code-coverage schrijft een treffer op „regel 252” van een bestand met 251 regels — en de afwijkingscontrole noemde dat een tegenspraak, op elk PHP-bestand met een afsluitende regelovergang. Eén regel voorbij een afsluitende regelovergang is nu toegestaan; een verwijzing verder, of voorbij een bestand zonder afsluitende regelovergang, blijft de tegenspraak die ze was.
0.2026.54 · build 2 — Een proefperiode-rij in What Community Includes
2026-03-24
Toegevoegd
- Een proefperiode-rij in What Community Includes, in de Community-editie. Die build had nooit een proefperiode, dus haar lijst begint nu met Start een Pro-proefperiode van 14 dagen…, dat de Pro-vermelding opent; de activatie van de Pro-build biedt daarna aan de Community-build uit de weg te ruimen. Community blijft gratis, wat je ook besluit.
0.2026.53 — Show Worst-Covered Folders
2026-03-03
Toegevoegd
- Show Worst-Covered Folders. Het mapniveau-antwoord op Show Worst-Covered Files: elke map gerangschikt op de dekking van alles eronder, slechtste eerst, uit dezelfde index waaruit de Verkenner-badges worden geschilderd; een keuze toont de map in de Verkenner. In het statusbalkmenu met
quickActions.worstCoveredFolders.
0.2026.52 — De drempelcontrole in het paneel Problemen
2026-01-23
Toegevoegd
- De drempelcontrole in het paneel Problemen. Met
compliance.diagnostics aan is elke falende threshold.*-metriek één fout in Problemen, op het tracebestand dat faalde, ververst bij elke lading en door Check Coverage Thresholds, gewist zodra de controle slaagt. Standaard uit, omdat de standaarddrempel voor statements 100 is.
Gewijzigd
- De beschrijving van
watch.enabled belooft geen vraag meer. Ze zei nog dat de gratis laag eerst gevraagd wordt vóór een herlading — waar tot 0.2026.48, daarna niet meer. Herschreven in alle 18 talen.
0.2026.51 · build 2 — Run Tests with Coverage
2025-12-08
Toegevoegd
- Run Tests with Coverage. Herkent vitest, jest, pytest, go, cargo, dotnet, maven, gradle, phpunit of ctest aan de werkruimtemap, draait het met dekking aan in een terminaltaak, laadt wat het schreef of de tests nu slaagden of niet, en biedt eenmalig aan dat pad aan
coverageFile.paths toe te voegen zodat de bewaker het laden voortaan doet. Meerdere runners worden ter keuze aangeboden; geen enkele stuurt je naar de recepten.
0.2026.50 — Dekking volgt de tekst in een bewerkte buffer
2025-10-23
Toegevoegd
- Dekking volgt de tekst in een bewerkte buffer. De bewerkingen in elke open buffer sinds de run werd geladen worden bijgehouden, en elk oppervlak dat regelnummers van de run leest — het raakaantal bij aanwijzen, de MC/DC-balk, de sinds-vorige-run-driehoek, de CodeLens, Next Uncovered — leest erdoorheen: een markering beweegt mee met haar regel en verdwijnt van een herschreven regel, waar een klein grijs puntje zegt waarom.
dirtyMarks.enabled zet de puntjes uit.
0.2026.49 — Sinds de vorige run, in de gutter
2025-09-26
Toegevoegd
- Sinds de vorige run, in de gutter. Elke regel die in de vorige run werd uitgevoerd en in deze niet krijgt een rode driehoek in de gutter, elke regel die de andere kant op ging een groene, elk met een streep in de overzichtsliniaal en de raakaantallen bij aanwijzen. Regels die niet veranderden tonen niets.
sinceLastRun.enabled zet het uit.
Gewijzigd
- De basis voor „vorige run” overleeft een herstart. Met
history.enabled aan neemt de nieuwste run in de geschiedenis die rol bij de eerste lading van een venster, zodat een build die klaar was voordat het venster openging nog steeds laat zien wat hij veranderde — in de gutter en in Compare with Last Run.
0.2026.48 · build 6 — Overal vanzelf herladen, de markering volgt het bestand, het exacte verschil bij aanwijzen
2025-09-19
Toegevoegd
- Het oordeel over een bestand blijft na het laden actueel. Een bestand werd één keer tegen zijn dekking gecontroleerd, bij het laden van het tracebestand, en daarna nooit meer: bewerk het een hele middag en de gutters bleven getallen schilderen over een versie die niet meer bestond. Nu controleert een opslaan in de editor dat bestand meteen opnieuw, en een wijziging van buiten de editor — een
git checkout, een formatter, een generator — controleert het even later opnieuw vanaf schijf. Een bestand dat zijn run gaat tegenspreken krijgt de markering; een checkout die de gemeten versie terugzet haalt haar weg.
- Het exacte verschil, bij aanwijzen. Waar een bestand niet meer overeenkomt met zijn dekking, zeggen de Dekkingsweergave en de tooltip in de Verkenner precies wat dat bewees: de regel zoals hij nu luidt tegenover wat het rapport vastlegde als het tracebestand de tekst bewaarde, de regel en een mislukte checksum als het een digest bewaarde, dekking voorbij het einde van het bestand, een functie die niet meer staat waar het rapport haar plaatst. Hetzelfde detail gaat naar het uitvoerkanaal, één regel per bestand, waar Toon welke op het laadresultaat uitkomt.
- Een schakelaar voor de badges in de Verkenner.
explorerBadges.enabled (standaard aan) verbergt de score, ✓ en ⚠ naast elk gedekt bestand in de Verkenner, en de tooltip per metriek erbij. Gutters, statusbalk en de Dekkingsweergave veranderen niet.
Gewijzigd
- Elke laag herlaadt vanzelf wanneer het tracebestand verandert. Sinds 2026-09-02 stopte de gratis laag bij een vraag nieuwe dekking gedetecteerd — laden?, terwijl betaalde licenties stil herlaadden. Een build is klaar, de getallen zijn nieuw, en wie bewaken heeft aangezet heeft die vraag al beantwoord — dus de vraag is weg op elke laag, en de melding die haar uitlegde ook.
- Ladingen die het product zelf doet tellen niet meer mee voor de daglimiet van de gratis laag. Een herlading door de bewaker of de ontdekking bij het opstarten is geen lading waar iemand om vroeg; ze meetellen zou het tegoed van een Community-installatie in één ochtend testruns opmaken en dan een oude run op het scherm laten zonder dat iets dat zegt. De limiet meet nu alleen de opdracht en de bestandskiezer.
- Een verplaatste tijdstempel alleen markeert geen bestand meer. De waarschuwing N bestand(en) gewijzigd sinds deze run kwam uit de mtime van elke bron, en een
git pull of een formatter verplaatst elke mtime zonder te veranderen wat gemeten is. Ze is weg, met haar markering in de statusbalk. Een bestand heet nu alleen gewijzigd als zijn inhoud de run tegenspreekt, en de statusbalk, het laadresultaat en een nieuwe uitvoerregel FUCINI_MISMATCH_001 lezen allemaal daaruit. staleWarning.enabled houdt zijn naam en beschrijft nu precies de inhoudscontrole.
- Bewaken van een map onder
files.watcherExclude wordt in de uitvoer gemeld. Build-uitvoer is het eerste wat mensen uitsluiten van de bewaker van VS Code, waarna alleen de peiling om de 2 s een nieuwe run opmerkt. Het uitvoerkanaal noemt nu de map en de glob wanneer de bewaker start.
0.2026.47 · build 2 — Niet-gekoppelde paden op het scherm, een eerste-keer-hint, twee toetsen extra
2025-08-09
Toegevoegd
- Een eerste-keer-hint voor een werkruimte zonder iets om te laden. Bewaken staat standaard aan en de startlading is stil, dus een verse installatie in een project zonder tracebestand zei helemaal niets. De eerste stille lading die leeg uitkomt zegt dat nu, één keer ooit, met de twee dingen die de moeite waard zijn: handmatig een dekkingsbestand kiezen, of de recepten openen om er een te maken met uw toolchain. Een lading die iemand zelf startte houdt zijn eigen melding.
- Toetsen voor Toggle Annotated Source en Load Coverage.
Alt+A wisselt het actieve tabblad tussen bron en geannoteerde weergave; Alt+Shift+R zoekt en herlaadt dekking (Ctrl+Alt+A / Ctrl+Alt+R op macOS). Herkoppelbaar zoals de twee uit 0.2026.45.
Gewijzigd
- Paden die nergens in de werkruimte op passen worden op het scherm geteld. Een tracebestandspad dat naar geen enkel werkruimtebestand leidt laadt en licht nooit op — het meest voorkomende "het werkte maar er is niets te zien" dat er is — en tot nu toe was het enige spoor een regel
FUCINI_REMAP_001 in het uitvoerkanaal, met de pathRemap-regel die het zou oplossen, ongelezen. Het laadresultaat telt ze nu, met Welke? voor de namen en de voorgestelde regel, en Instelling pathRemap openen voor de plek om die neer te zetten. - De bestandskiezer in het statusbalkmenu noemt de indelingen die hij leest. Zijn omschrijving noemde nog de vijf indelingen uit de eerste release; nu zegt hij vijfentwintig, van lcov, Cobertura en JaCoCo tot gcov, llvm-cov, TRACE32 en mutatierapporten.
0.2026.46 — Een uitweg uit de editieclash, en een stillere limiet
2025-08-06
Gewijzigd
- Beide edities geïnstalleerd: twee knoppen in plaats van instructies. Met Pro en Community allebei aanwezig kan geen van beide activeren — ze definiëren dezelfde opdrachten en weergaven — en de melding daarover eindigde met een routebeschrijving naar de Extensies-weergave. Beide oplossingen zijn één opdracht, dus het zijn nu knoppen: Deze houden verwijdert de andere editie en biedt de herlaadactie aan; Beide tonen in Extensies opent de Extensies-weergave op precies die twee. Mislukt het verwijderen, dan wordt het herladen alsnog aangeboden — een herlaadactie bepaalt hoe dan ook welke editie live is.
- Een gebruikslimiet wordt één keer volledig gemeld, daarna alleen in de statusbalk. De eerste keer dat een Community-limiet wordt bereikt verdient dat het hele antwoord — de cijfers, het abonnement, de telemetrie-ontgrendeling, de lijst van wat het niveau bevat. De vijfde keer, tien minuten later, niet. Binnen een sessie zetten verdere treffers op dezelfde limiet een regel van acht seconden in de statusbalk en onderbreken niets. Een sleutel invoeren begint opnieuw, want een nieuwe licentie is een nieuwe set limieten.
0.2026.45 — Toetsen voor Next / Previous Uncovered
2025-07-26
Toegevoegd
- Next / Previous Uncovered hebben toetsen. Het zijn de twee opdrachten die je keer op keer indrukt terwijl je een bestand leest, en tot nu toe betekende elke druk het opdrachtenpalet openen en de naam typen.
Alt+N springt naar het volgende niet-gedekte bereik en Alt+P naar het vorige (Ctrl+Alt+N / Ctrl+Alt+P op macOS, waar Option tekens typt). Beide gelden alleen in een gefocuste teksteditor en zijn net als elke andere standaard te herkoppelen onder Keyboard Shortcuts.
0.2026.44 · build 3 — De limieten van het gratis niveau, in één lijst
2025-07-24
Toegevoegd
- Wat Community bevat, als één lijst. Het gratis niveau begrenst acht acties en houdt twaalf functies achter, en elk van die beslissingen werd bij zijn eigen deur afgedwongen — dus de enige manier om de vorm van het niveau te leren was om midden in een taak tegen elke muur aan te lopen. Een nieuwe opdracht, What Community Includes, toont alles tegelijk: elke begrensde actie met hoeveel van de dag of maand al is gebruikt, elke achtergehouden functie bij naam, en de twee manieren om ze op te heffen — een betaald abonnement of de telemetrie-ontgrendeling.
- Aangeboden overal waar de vraag opkomt. Een item in het statusbalkmenu, een knop in de licentiebanner van de Coverage-weergave en een knop op de twee meldingen die een Community-installatie bij een muur tegenkomt — gebruikslimiet bereikt en deze actie is niet inbegrepen. De rijen worden afgeleid uit dezelfde rechtenset die de poorten afdwingen, dus wat de lijst zegt is wat er gebeurt.
Gewijzigd
- De watch-modus zegt wat hij op het gratis niveau zal doen. Het statusbalkitem beloofde iedereen "dekking automatisch te herladen", en op Community is dat een belofte die de watcher niet nakomt — hij merkt het op en vraagt. Het item zegt dat daar nu, en de opdracht heet Toggle Tracefile Watch, omdat "Toggle Watch" nooit zei wát er bewaakt werd. Het gedrag zelf is ongewijzigd.
0.2026.43 · build 3 — Een mislukte load zegt waarom, en verborgen bestanden worden geteld
2025-06-25
Gewijzigd
- Een tracebestand dat niet laadt zegt nu waarom, en wat te proberen. Elke mislukking gaf dezelfde melding — "no coverage could be parsed. See output." — met de reden één kanaal verderop als code en parserbericht. De melding begint nu met het bestand en sorteert de weigering naar wat ze was: geen indeling die deze extensie leest, niet welgevormd (meestal een build die het nog schreef), welgevormd maar zonder metingen (de run voerde geen geïnstrumenteerde code uit) of kon niet worden gelezen. De woorden van de parser zelf gaan mee, meerdere bestanden worden geteld en het uitvoerkanaal wordt aangeboden achter een knop Uitvoer tonen in plaats van geforceerd geopend.
- Bestanden die een tracebestand noemt maar waarin niets te meten valt, worden nu op het scherm geteld. Een header met alleen declaraties bleef altijd al buiten de Coverage-weergave in plaats van 100% te scoren op 0 van 0 — en zijn naam ging naar het uitvoerkanaal, en nergens anders heen. Het laadresultaat zegt nu N bestand(en) zonder instrumenteerbare code worden niet getoond, met een knop Welke? die het kanaal met de namen opent.
0.2025.42 · build 3 — NCover en dotCover, de .NET-dekking die nergens naartoe kon
2025-06-08
Toegevoegd
- NCover en JetBrains dotCover. Coverlet's Cobertura en OpenCover werden hier al gelezen, wat het meeste nieuwe .NET-werk dekt en niets van het oudere soort. Een build die nog steeds NCover's
Coverage.xml schrijft, of een bedrijf dat met dotCover meet, had dekking op schijf die deze extensie niet kon openen. Geen van beide formaten heeft een converter nodig: beide dragen al bestandsnamen en regelnummers. - Een uitgesloten NCover-punt wordt weggelaten, niet als niet-uitgevoerd geteld.
excluded="true" markeert code die bewust buiten de meting is gehouden — een lid met [ExcludeFromCodeCoverage], of een NCoverExplorer-filter. Het als niet-gedekt tellen zou een uitsluiting het getal lager maken dat het juist moest corrigeren. - dotCover heeft
/ReportType=DetailedXML nodig. Het andere XML-rapport is een rollup zonder regelnummers erin; dat rapport wordt herkend en afgewezen met de vlag die het oplost, in plaats van te falen als onbekend formaat. dotCover registreert per statement enkel ja of nee, nooit een bezoekaantal, dus een gedekt statement levert één hit op.
0.2025.41 · build 4 — Mutatietesten: PIT en Stryker
2025-05-28
Toegevoegd
- Mutatietesten. Dekking zegt dat een regel is uitgevoerd; een mutatiescore zegt dat er iets faalde toen die regel werd gewijzigd. Een suite kan elke regel van een bestand uitvoeren en geen van de geïnjecteerde fouten opmerken, en geen enkel dekkingsgetal zegt dat. PIT dekt Java, Kotlin en Scala; Stryker dekt JavaScript, TypeScript, C# en Scala.
- Het wordt nooit gemiddeld met dekking. Het mengen van "liep deze regel" met "merkte iets op toen ik hem wijzigde" beantwoordt geen van beide, dus het krijgt geen gewicht in de samengestelde score en wordt apart bewaakt via
fuciniCoverage.threshold.mutation — standaard 0, omdat een mutatiescore een doel is om naartoe te werken, geen lat die op dag één al gehaald moet worden. - Een mutant die nooit een eerlijke run kreeg telt in geen van beide helften. PIT's
NON_VIABLE en Stryker's CompileError en Ignored zijn mutaties die het hulpmiddel niet kon maken; ze als niet-gedetecteerd tellen zou een suite straffen voor een fout die haar nooit werd aangeboden.
0.2025.40 — gcov's platte-tekstlisting, voor compilers ouder dan GCC 9
2025-05-16
Toegevoegd
- De geannoteerde
.gcov-listing. gcov --json-format kwam met GCC 9, en embedded crosscompilers zijn vaak veel ouder; tot nu toe was het antwoord om eerst lcov of gcovr te installeren. De uitvoeringsteller heeft vijf schrijfwijzen en slechts twee zijn getallen, en branch/call/function-annotaties horen bij de buurregel in plaats van hun eigen regel — dit alles wordt nu correct gelezen. - Call-annotaties worden call-site-dekking.
call N returned X% is precies de function-call-metriek die in 0.2025.38 werd toegevoegd, en dit formaat droeg die al lang voordat hier ergens was om hem in te zetten.
0.2025.39 · build 2 — Objectcode-dekking, en daarmee assembly
2025-04-27
Toegevoegd
- Objectcode-dekking — hoeveel van de gebouwde binary daadwerkelijk heeft gedraaid. De enige metriek hier die helemaal niet uit de bron wordt gemeten: ze komt van een debugger die de instructiestroom observeert op het echte target, zonder enig probe-effect op de timing. Het is ook het eerlijke antwoord op de vraag "dekt dit assembly?" — handgeschreven assembly wordt nooit geïnstrumenteerd, en geen andere metriek hier kan die bereiken.
- Het is een eis, geen extra gewicht. Objectcode-dekking omvat statementdekking — 100% hier impliceert 100% daar, maar niet omgekeerd — dus krijgt het geen gewicht in de samengestelde score en wordt het in plaats daarvan bewaakt via een drempel, precies zoals DO-178C niveau A het bovenop MC/DC eist.
- Het gat is het resultaat. Een run met 100% regeldekking en minder dan 100% objectdekking heeft precies de door de compiler gegenereerde code gevonden die je bron niet verantwoordt; de compliance-kaart zegt "312 bytes nooit uitgevoerd, bij 100% regeldekking" in plaats van dat te verbergen als "94%". Het omgekeerde geval — een hele binary gemeld als uitgevoerd terwijl de bron dat niet was — wordt gemeld als een tegenspraak, geen lage score.
0.2025.38 · build 2 — Functieaanroepdekking, en VectorCAST en TRACE32 compleet
2025-04-01
Toegevoegd
- Functieaanroepdekking — was elke aanroeplocatie uitgevoerd. Een andere vraag dan functiedekking: een functie die eenmaal wordt aangeroepen vanaf een van haar drie aanroeplocaties is compleet onder Functies en hier een derde compleet. VectorCAST, TRACE32 en Cantata rapporteerden dit alle drie terwijl dit model nergens had om het getal te plaatsen.
- Dit maakt VectorCAST en TRACE32 compleet. Eerdere releases weigerden bewust deze gegevens in takdekking te vouwen, omdat het opblazen van een takpercentage een getal opblaast dat in een audit terechtkomt. Beide formaten laden nu wat ze altijd al verstuurden.
Gewijzigd
- De compliancepoort en de gewogen score kennen nu zeven metrieken, niet zes — twee nieuwe instellingen,
fuciniCoverage.whmWeights.functionCalls en fuciniCoverage.threshold.functionCalls, met beschrijvingen in alle 17 talen.
0.2025.37 — Functiedekking als een aantal, niet alleen als een plek
2025-02-16
Gewijzigd
- Functiedekking telt nu ook mee wanneer het hulpmiddel niet zegt waar de functies staan. TRACE32's
func-export, VectorCAST's zelfsluitende <method>-elementen, en EMMA's method, %-rollup vermelden alle drie een functieaantal zonder ergens een CodeLens te kunnen plaatsen — alle drie werden ze bij binnenkomst weggegooid. Declaraties blijven de voorkeursbron waar ze bestaan; het aantal wordt nu als terugval gebruikt waar die er niet zijn.
0.2025.36 · build 4 — UCIS en Aldec UCDB, en de nieuwe parsers tot de regel getest
2025-02-03
Toegevoegd
- UCIS en UCDB XML — VHDL en Verilog, rechtstreeks uit de simulator. Twee documenten beantwoorden aan deze naam en een project heeft welke zijn simulator ook schreef, dus beide worden gelezen: Accellera's standaard
<UCIS>-uitwisselingsvorm, en Aldec's eigen ux:ucdb, wat acdb2xml daadwerkelijk produceert uit Active-HDL en Riviera-PRO. Statement- en takdekking komen over; toggle-, FSM-, assertion- en functionele dekking worden niet gelezen, en een document dat alleen die bevat, zegt dat in plaats van leeg te laden. - Open-source VHDL had hier al niets nodig: GHDL's GCC-backend instrumenteert met
-Wc,-ftest-coverage -Wc,-fprofile-arcs, en het resultaat gaat via gcov, gcovr of lcov. Deze release is voor de commerciële simulators.
0.2025.35 · build 3 — EMMA XML, en Delphi heeft eindelijk een ingang
2025-01-22
Toegevoegd
- EMMA XML. Delphi had hier helemaal geen ingang — geen lcov, geen Cobertura — en DelphiCodeCoverage schrijft precies dit schema met
-xml. Het is ook wat een flinke hoeveelheid oudere Java-tooling nog steeds uitstoot, dus één parser opent een taal en ruimt tegelijk een erfenis op. - Voeg
-xmllines toe en het rapport krijgt echte regelgebonden hit-tellingen, dus gutters werken; zonder is er alleen een rollup-percentage, dat een bestandssamenvatting krijgt en geen gutters in plaats van een gok. Een gepunte pakketnaam wordt alleen een map wanneer het bestand een Java-achtige bron is; in een Delphi-rapport is datzelfde veld een unitnaam, en er een prefix aan geven zou een map verzinnen die niemand op schijf heeft.
0.2025.34 · build 3 — Lauterbach TRACE32, één metriek per export
2025-01-01
Toegevoegd
- TRACE32-dekkingsexports.
COVerage.EXPORT.ListModule schrijft wat een debugger heeft gemeten uit on-target trace — geen geïnstrumenteerde bron, maar de instructiestroom die de processor daadwerkelijk uitvoerde, op het echte target, zonder enig probe-effect op de timing. Een export draagt één metriek tegelijk: stmt wordt regeldekking; dec/cond worden takdekking; mcdc wordt MC/DC. Laad twee exports van dezelfde run en ze voegen samen op modulenaam. - Exports met
func-, call- of object-dekking werden bij naam geweigerd in plaats van leeg geladen, met vermelding van welke metriek het bestand bevat — alle drie hebben nu een thuis, respectievelijk in 0.2025.37, 0.2025.38 en 0.2025.39.
0.2025.33 · build 4 — Testwell CTC++, gelezen per kolom omdat de tekst niet door witruimte gescheiden is
2024-12-19
Toegevoegd
- Testwell CTC++ uitvoeringsprofiel-listings.
ctcpost zet MON.sym en MON.dat om in een tekstlisting met vaste breedte — het hulpmiddel dat tegenover Bullseye staat bij Europese embedded- en veiligheidsevaluaties, en dat multiconditie-dekking meet. Gelezen op kolompositie in plaats van door op witruimte te splitsen, omdat een omschrijving zelf met een cijfer kan beginnen. - Multiconditie is geen MC/DC, en wordt niet als MC/DC gerapporteerd. CTC++ telt combinaties van condities; MC/DC vraagt of is aangetoond dat elke conditie het resultaat onafhankelijk beïnvloedt. Deze getallen achter de MC/DC-poort zetten zou een auditor een getal geven onder een naam die het niet betekent, dus zijn ze hier takdekking, wat ze ook zijn.
0.2025.32 · build 4 — VectorCAST XML, en de MC/DC die stilletjes werd weggegooid
2024-12-08
Toegevoegd
- VectorCAST XML. VectorCAST schrijft een Cobertura-rapport tot en met de doctype, en voegt dan attributen toe voor wat gewone Cobertura niet kan zeggen. Dat betekende dat deze bestanden hier al laadden en compleet leken — met
mcdcpair-coverage die er stilletjes werd uitgegooid, van precies het publiek dat een tool kocht specifiek om het te produceren. Die paartellingen overleven nu. Ze voeden de MC/DC-poort, het percentage en de samengestelde score. - Functieaanroepdekking wordt bewust niet benaderd. Het invouwen ervan in takdekking zou een getal opblazen dat in een audit terechtkomt; het wacht tot het model er een naam voor heeft, wat gebeurt in 0.2025.38.
Gewijzigd
- De Cobertura-lezer draagt nu een dialect:
<coverage line-rate=…> is een familie, geen enkel formaat, en welk dialect wordt gelezen reist mee met de parse in plaats van per element te worden geraden.
0.2025.31 — Ada, Swift, en dekking die zichzelf herlaadt
2024-11-07
Toegevoegd
- GNATcoverage XML — eindelijk Ada. DO-178C-avionica- en EN 50128-spoorteams zijn precies het publiek waarvoor de veiligheidsgewogen score en de MC/DC-ondersteuning van dit product zijn gebouwd, en tot nu toe konden zij hier niets laden, tenzij hun
gnatcov nieuw genoeg was om ook Cobertura te schrijven — dat alles onder de regel weggooit. gnatcov coverage --annotate=xml schrijft een map in plaats van een bestand: laad de *.xml-bestanden per bronbestand — index.xml openen vertelt je waar de dekking werkelijk staat in plaats van onduidelijk te falen. Een gedeeltelijk gedekte regel blijft een gedekte regel met een ongedekte beslissing: het tekort verschijnt in branch- en MC/DC-dekking, waar het thuishoort. Vrijstellingsgebieden worden uitgesloten regels, een onbepaalde verplichting telt als niet gedekt in plaats van gedekt, en met --level=stmt+mcdc wordt MC/DC per conditie geteld en voedt het de drempel en de samengestelde score.
- BullseyeCoverage en Visual Studio
.coveragexml. Bullseye is het commerciële C/C++-gereedschap dat embedded- en veiligheidskritische teams daadwerkelijk bezitten; draai zijn eigen covxml en laad het resultaat. De belangrijkste maat is conditie-/beslissingsdekking en niet regeldekking, en die twee blijven hier gescheiden — bovendien wordt een probe met één uitkomst op één in plaats van op twee gescoord, zodat een volledig geteste switch niet als half gedekt wordt gerapporteerd. Visual Studio’s .coveragexml maakt .NET compleet voor teams op MSTest en vstest in plaats van Coverlet: converteer het binaire .coverage eerst met dotnet-coverage convert. Gedeeltelijk gedekte regels overleven de reis in beide gevallen.
- SonarQube generieke dekking — en een helder antwoord over Xcode. Vier attributen op twee elementen, en het telt omdat vrijwel elk gereedschap dat geen van de andere formaten kan schrijven, dit wél kan: een project waarvan deze extensie het dekkingsgereedschap nooit heeft gekend, heeft nu een ingang. Het is ook wat
xcresultparser schrijft, en zo komen Swift- en Objective-C-projecten hier binnen: .xcresult zelf heeft geen parser, en de documentatie zegt nu waarom in plaats van je te laten raden — xccov rapporteert percentages, geen gegevens per regel, en het archief met regelgegevens is slechts één bestand tegelijk leesbaar, in een document dat het beschreven bestand nooit benoemt.
- Gezipte tracefiles laden zoals ze zijn.
gcov --json-format schrijft standaard .gcov.json.gz, dus het formaat dat de documentatie aanprees was er een dat de meeste mensen niet konden laden. Detectie gebeurt op de magic bytes van het bestand zelf in plaats van op de naam, zodat een gecomprimeerd rapport dat zijn .gz kwijt is nog steeds werkt — en elk ondersteund formaat mag nu gezipt binnenkomen, niet alleen dat van gcov.
- Swift en Objective-C, uit Xcodes eigen rapport.
xcrun xccov view --report --json is het ene dekkingsdocument dat een iOS- of macOS-build zonder extra gereedschap oplevert. U krijgt bestandspercentages, uitvoeringstellingen per functie en CodeLens. Het bevat geen gegevens per regel, en Studio verzint die niet, dus de markeringen in de kantlijn blijven leeg bij dit formaat — een verzonnen markering is niet te onderscheiden van een gemeten. Voor dekking per regel in Swift gebruikt u llvm-cov export -format=lcov of slather; beide werkten al.
- Coveralls JSON — geschreven door reporters voor Elixir, Ruby, Python, Rust, Go en JavaScript. Per regel, dus de markeringen werken.
- Actieve dagen, geblokkeerde gates en de licentie waar een rollup bij hoort — drie toevoegingen aan het maandelijkse gebruiksoverzicht, voor installaties die telemetrie hebben aangezet.
Verwijderd
- De computernaam wordt niet meer verstuurd.
hostname zat vanaf het begin in de telemetriebasis — buiten elke gate om, verstuurd door iedereen met telemetrie aan. Een computernaam is heel vaak iemands naam, een bureaunummer of het project van een klant, en beantwoordde geen enkele vraag over gebruik die het besturingssysteem niet beter beantwoordde. Een installatie wordt nu alleen nog herkend aan haar willekeurige install-id. Daarmee verlaat niets wat u of uw machine benoemt die machine: niet de computernaam, niet de OS-gebruikersnaam, niet de thuismap, niet de netwerkinterfaces, niet uw bestandspaden, niet de mapnaam van uw project en geen ingelogd accountlabel. Wat overblijft is het besturingssysteem, de release en de architectuur — wat voor machine, niet welke.
- Telemetrie wordt nu uiterlijk binnen 90 dagen verwijderd, waar het beleid eerder alleen zei dat het werd “bewaard zolang het nuttig is”, wat helemaal geen termijn is.
Gewijzigd
- Een betaalde licentie herlaadt dekking nu zelf. Een tracebestand bewaken betekende altijd dat u na elke build werd gevraagd: “nieuwe dekking gevonden, laden?” — op elke laag, een vraag met één zinnig antwoord, meerdere keren per uur gesteld. Die vraag is nu het gedrag van de gratis Community-laag; een betaalde licentie laadt gewoon. Community houdt de bewaker, de detectie en de vraag die het altijd had.
- Een niet-overeenkomend bestand wordt benoemd, met de controle die het aantoonde, op een betaalde licentie. De detectie is niet afgeschermd en wordt dat niet: iemand vertellen dat zijn dekking zijn bestand niet meer beschrijft, verkoop je hem niet. Community krijgt de bevinding nog steeds, en de rij wordt nog steeds gedimd. Een betaalde licentie voegt de aanwijzer toe — de markering, de badge in de Verkenner, en de regel, functie of controlesom erachter.
- Telemetrie stuurt minder, en zegt bij wie het hoort. De maandelijkse samenvatting bevat geen bestandspaden, geen mapnaam van uw project en geen accountlabel meer. De ruil van gratis functies tegen telemetrie vraagt nu om een e-mailadres, zodat degene die ermee instemde kan horen wat zijn installatie verstuurt en het op verzoek kan laten verwijderen.
- Drie instellingsbeschrijvingen gecorrigeerd.
watch.enabled, staleWarning.enabled en telemetry.enabled weken elk af van wat de code doet — telemetry.enabled het meest: die beschreef dat er aanzienlijk meer werd verstuurd dan er wordt verstuurd.
Opgelost
- De bestandskiezer verbergt geen formaten meer die hij leest. Pick Coverage File filterde op
info, json en xml, waardoor Go’s coverage.out en gcovs .gcov.json.gz — beide formaten die deze extensie leest — grijs waren in juist het dialoogvenster dat je vraagt er een te kiezen.
- Een gewone Community-installatie stuurt geen pagina van haar broncode meer. De controle die het broncodemonster afschermde, behandelde elke Community-installatie alsof die de telemetrieruil had gedaan, niet alleen die het echt hadden gedaan.
- Eén waarschuwing per laadbeurt in plaats van twee — een bestand dat niet meer overeenkomt met zijn dekking is bijna altijd ook sinds de run bewerkt, en beide werden apart gemeld.
- Een verwijdering meldt niet langer de OS-gebruikersnaam en de thuismap van iemand wiens licentie dat verbiedt.
0.2025.30 · build 3 — Wat uw build toch al schrijft
2024-10-18
Toegevoegd
- Go-dekkingsprofielen.
go test -coverprofile is de enige dekkingsuitvoer die de standaard Go-toolchain produceert — er is geen lcov om op terug te vallen zoals bij Rust, Dart en Elixir — dus een Go-project had niets wat deze extensie kon lezen. Een profiel legt blokken vast in plaats van regels, en elke regel die een blok beslaat krijgt de telling ervan, inclusief de sluitende accolade, precies zoals go tool cover -html het markeert. coverage.out is toegevoegd aan de zoeknamen, zodat een Go-project zonder configuratie zijn profiel vindt zoals een C-project lcov.info vindt.
- Clover XML en OpenCover XML. Clover is wat PHP-projecten daadwerkelijk hebben:
php-code-coverage kan Cobertura uitvoeren, maar Clover is de standaard en wat vrijwel elke phpunit.xml instelt — dus PHP-dekking was hier onleesbaar terwijl een Cobertura-parser wachtte op uitvoer die bijna niemand genereert. De clover-reporter van Istanbul schrijft hetzelfde document, dus een zo geconfigureerd Jest-project is ook gedekt. OpenCover is de .NET-tegenhanger: C# en VB.NET kwamen al binnen als Cobertura, dat een beslissing platslaat tot de tekenreeks condition-coverage="50% (1/2)", zodat welke tak liep al verdwenen was voordat een parser hem zag. OpenCover bewaart een bezoekteller per tak — het verschil tussen weten dat de helft van een vertakking gedekt is en weten welke helft.
- coverage.py-JSON en gcov/gcovr-JSON. De Cobertura- en lcov-export van coverage.py moeten een
# pragma: no cover-regel ofwel gedekt ofwel ontbrekend noemen, omdat ze geen woord hebben voor "bewust uitgesloten" — en deze extensie heeft dat wel, dezelfde markering die haar LCOV_EXCL-markers zetten. De pragma's van een Python-project betekenen hier dus nu wat ze in het rapport van coverage.py zelf betekenen. GCC-dekking kwam intussen alleen binnen na een omweg via lcov of gcovr -x: een tweede tool om gegevens om te zetten die GCC al had geproduceerd. gcov --json-format --stdout en gcovr --json geven vrijwel identieke documenten, en één parser leest ze nu allebei.
Opgelost
- Commentaar wordt gelezen in de taal waarin het bestand is geschreven. De scanner voor niet-code was geschreven voor C en werd op elk bestand toegepast, wat klopte zolang elk formaat dat deze extensie las een taal uit de C-familie beschreef. Dat is niet langer zo: een C-scanner die
# don't tegenkomt, ziet de apostrof een tekenreeks openen, ziet hem nooit sluiten, en telt de commentaarregel als code — een getal dat stilletjes een beetje verkeerd is, zonder dat iets dat meldt. Het is nu # voor Python, Ruby, shell, Perl, R, Elixir en Julia; alle drie de vormen voor PHP, dat ze alle drie accepteert; en // met /* */ voor de rest, wat de standaard blijft voor een onbekende extensie — #define is code, en die uitsluiten zou de andere kant op fout zijn.
0.2025.29 · build 4 — Elke instelling, toegelicht
2024-10-15
Toegevoegd
- Elke
fuciniCoverage.*-instelling heeft nu een plek in dat paneel, niet alleen de dertien compliance-instellingen. Alle vijfenvijftig zijn gegroepeerd in dezelfde secties, in dezelfde volgorde, als de gepubliceerde instellingenreferentie, zodat de pagina waarmee u configureert en de pagina die u leest het eens zijn over waar een instelling thuishoort. Een zoekvak filtert op naam, sleutel of beschrijving; een sprongkoppelingenlijst verplaatst u tussen secties. Het formulier wordt tijdens de uitvoering afgeleid van het eigen meegeleverde manifest van de extensie — typen, standaardwaarden, grenzen, opsommingen en elk woord tekst — zodat niets over een instelling twee keer is vastgelegd en het paneel niet kan afwijken van de extensie die het bewerkt.
- De beschrijvingen volgen de taal die u hebt vastgezet. VS Code bepaalt de lokalisatie van een manifest bij het laden van de extensie op basis van de weergavetaal van de editor, en biedt geen manier om dat per extensie te overschrijven — dus
fuciniCoverage.language op Duits zetten in een Engelse editor vertaalde alles behalve de instellingen. Omdat het paneel die bestanden zelf leest en verwerkt, is het de enige plek die die keuze kan respecteren.
- De besturingselementen waar een JSON-schema niet om kan vragen. Niets in een instellingenschema markeert een tekenreeks als een pad, dus de standaardinterface kan er geen kiezer voor bieden; de drie instellingen die een map bevatten krijgen nu een knop Bladeren….
coverageFile.paths en pathRemap krijgen echte lijstbewerkers in plaats van een ruw JSON-vak, en elke colorScale-kleur krijgt een staal naast de hexwaarde.
Gewijzigd
- Opslaan schrijft wat u hebt gewijzigd, en niets anders. Bij dertien instellingen maakte het nauwelijks uit dat Opslaan alle dertien wegschreef; bij vijfenvijftig zou één bewerking de hele naamruimte stempelen in een
settings.json waar twee regels in stonden. Alleen instellingen waarvan de waarde daadwerkelijk is veranderd worden geschreven, en een waarde die gelijk is aan de standaardwaarde wist de overschrijving in plaats van te herhalen wat de extensie al levert.
- Uw licentiesleutel gaat altijd naar uw gebruikersinstellingen, en de rij zegt dat.
license.key is application-scoped verklaard, wat betekent dat VS Code hem alleen daar leest — hem naar een werkruimte schrijven is een opslagactie die lijkt te werken en niets verandert. Herstellen wist nu alle vijfenvijftig sleutels op het gekozen bereik in plaats van dertien, en vraagt daarom eerst. En een bewerking buiten het paneel kost u niet langer uw plek: de pagina vergelijkt voordat ze opnieuw tekent, dus Opslaan scrolt vijfenvijftig rijen niet meer terug naar boven.
0.2025.28 · build 3 — Dertien rijen, één beslissing
2024-10-12
Toegevoegd
- De compliancemodus, de zeven drempelcriteria en de zes gewichten van de samengestelde score hebben nu één editor. In de instellingen zijn het dertien losse rijen, in de praktijk één beslissing: een drempel doet niets zolang de geldende modus hem niet raadpleegt, en een gewicht doet niets zolang niet het gewogen criterium beslist. Fucini Coverage: Configure Coverage Compliance & Thresholds..., via de tandwielknop in de titelbalk van de Coverage-weergave, brengt de drie samen, legt elke modus uit waar de modus gekozen wordt, en benoemt de manieren waarop een criterium zo ingesteld kan raken dat het niets meer controleert — een strikte modus zonder ingestelde drempel per metriek, een gewogen modus met drempel
0, gewichten die allemaal 0 zijn — als waarschuwingen, terwijl je ernaar kijkt.
- Het toont het oordeel vooraf en schrijft via VS Code. De COMPLIANT / NON-COMPLIANT die het niet-opgeslagen formulier tegen de geladen uitvoering zou opleveren, wordt berekend door de compliance-engine van de extensie zelf en niet door een tweede kopie van de regels: een voorbeeld dat het met het criterium oneens kan zijn is slechter dan geen voorbeeld. Wijzigingen gaan via de gewone configuratie-API naar
settings.json — gebruiker of werkruimte, jouw keuze — zodat VS Code het bestand opmaakt en de commentaren bewaart; een wijziging met de hand of in een ander venster stroomt terug in het open formulier, of er nu een uitvoering geladen is of niet. Er is geen licentie nodig: Community krijgt dezelfde editor als Pro.
Opgelost
- De knop van de updatemelding las
Download && Install. De dubbele ampersand is de mnemonic-escape, en die hoort thuis in package.json-titels en op modale dialoogvensters — maar de actieknoppen van een melding nemen hun label als platte tekst, dus beide tekens werden precies zo afgedrukt als ze er stonden, in alle 17 talen, voor iedereen aan wie een update werd aangeboden.
0.2025.27 · build 7 — Een ruil waar je zelf voor kiest
2024-09-30
Gewijzigd
- Telemetrie staat standaard uit. Hij werd uitgeleverd met standaard aan, vanuit de redenering dat de evaluatieperiode die gegevens nodig had. Die redenering ging niet langer op zodra het Community-niveau van telemetrie aanzetten het middel maakte om elke Pro-functie gratis te ontgrendelen: een ruil betekent alleen iets als de persoon hem zelf maakt, en een ruil waar niemand voor gekozen heeft is geen ruil. Er wordt niets verstuurd tot je hem aanzet, en Community blijft hoe dan ook werken met zijn standaardset functies.
- De telemetrie-instelling zegt waar hij voor dient en verwijst voor de rest door. De beschrijving somde vroeger elk veld op dat een ping meestuurt, wat twee kopieën van die lijst betekende — één in de instelling, één in het privacybeleid — die eeuwig identiek moesten blijven en dat niet waren. Nu zegt hij wat aanzetten je oplevert en verwijst hij naar het privacybeleid voor de veldenlijst, zodat er één lijst is om kloppend te houden in plaats van twee.
- Deze release installeren heropent je evaluatieperiode, eenmalig. Iedereen van wie de proefperiode al was verlopen krijgt 14 nieuwe dagen, omdat deze release de voorwaarden verandert waaronder ze evalueerden: een proefperiode doorgebracht met telemetrie standaard aan was geen proefperiode van het product dat nu wordt aangeboden. Het is bewust gekoppeld aan een eenmalig token in plaats van aan de versie — bij elke release resetten zou betekenen dat de proefperiode nooit eindigt voor wie bijblijft, en dat is geen proefperiode maar een licentie zonder prijs met extra stappen. Het token wordt bij de eerste activering verbruikt en daarna gelden de gewone regels weer. Een betaalde licentie blijft onaangeroerd, omdat sleutelverificatie terugkeert voordat de proefperiode überhaupt wordt geraadpleegd, en Community wordt niet geraakt omdat die editie geen proefperiode heeft om te heropenen.
- Een licentiesleutel kost geen vragenlijst meer. De activeringsmeldingen, de licentiesleutel-instelling en het dialoogvenster aan het einde van de proefperiode presenteerden een sleutel allemaal als iets dat werd uitgegeven in ruil voor het beantwoorden van vragen. Dat is niet zo: de sleutel wordt op aanvraag automatisch uitgegeven, en de feedbackvragenlijst is vrijwillig en volledig los daarvan.
Opgelost
- Drie plekken beloofden nog steeds een proefperiode "tot en met 2026-12-31". Zo'n datum heeft nooit in het product bestaan — de proefperiode duurt 14 dagen, per installatie geteld vanaf het eerste gebruik. Twee eerdere releases vingen deze bewering in de instellingsbeschrijvingen en in de README; hij overleefde in de evaluatie-callout op deze pagina zelf, in de Gebruikershandleiding en in de README van de licentietooling. De Gebruikershandleiding was de ergste van de drie: daar stond dat het venster gold "voor elke installatie, wereldwijd, tegelijk (geen aftelling per installatie)", precies andersom, en dat het weergeven van dekking wordt gepauzeerd als de proefperiode afloopt, terwijl de extensie in werkelijkheid terugvalt op het gratis Community-niveau.
- Telemetrie-meldingsmails werden vanaf het verkeerde domein verstuurd. De
From:-header was een mailbox op fucini.consulting terwijl de server die ze verstuurt fucini.software is — precies de afstemming waar de eigen opmerking bij de instelling voor waarschuwt, en een betrouwbare manier om post in de spamfilter te laten belanden of ronduit geweigerd te krijgen.
0.2025.26 · build 2 — Grijs, niet weg
2024-08-27
Gewijzigd
- Een bestand dat het rapport noemt maar dat niet op schijf staat, wordt getoond waar het hoort — grijs, met uitleg. 0.2025.25 hield op met het verzinnen van locaties voor zulke bestanden, wat terecht was, maar liet ze met een relatief pad dat helemaal geen locatie is — dus maakte de boom nog steeds een project van het eerste segment ervan, en zaten de drie verwijderde bronnen van een submodule in een spook-
app náást de submodule waar ze vandaan kwamen. De onjuistheid was zichtbaar, dat was de bedoeling, maar op de verkeerde plek en zonder te zeggen wát er mis was.
- Het verschijnt nu in het project waaruit het gemeten is, in de map waar het rapport het plaatst — getekend in het middengrijs van het thema en cursief in plaats van in de gewone voorgrondkleur. Bij aanwijzen verschijnt het pad dat het gehad zou hebben, met de uitleg dat daar niets staat — hoogstwaarschijnlijk hernoemd of verwijderd nadat het rapport werd gemaakt — en dat de cijfers nog meetellen. Er wordt niets weggelaten en geen totaal verschuift: de regel is het eigen verslag van het rapport, en het grijs is wat voorkomt dat hij leest als een regel die opent.
- De gok blijft binnen de weergave. Het vastgelegde pad van het bestand is nog precies wat het rapport zei, want al het andere is erop gebaseerd — de verrijking van het externe rapport vergelijkt ermee, telemetrie maakt het relatief, de geannoteerde weergave opent het — en hun een vermoede locatie geven zou iets bekends inruilen voor iets verzonnens. Alleen de boom brengt de twee samen, en alleen voor een pad dat geen eigen locatie noemt: een absoluut pad dat er simpelweg niet is behoudt wat het rapport zei en wordt ter plekke grijs.
0.2025.25 · build 4 — Waar het gemeten is
2024-08-07
Opgelost
- De dekking van een submodule komt terecht waar de submodule echt staat, en de regels openen. Een git-submodule bouwt zijn eigen rapport naast zijn eigen boom, en gcovr schrijft daarin
<source>.</source> — "de map waarin dit bestand staat" — met bestandsnamen als app/Application.cpp eronder. Niets verankerde die . ergens: paden werden één keer opgelost, ná het samenvoegen, en toen wist de uitvoering niet meer uit welke invoer een bestand kwam — de enige overgebleven basis was de werkruimtewortel. Proberen met <workspace>/app/Application.cpp vond niets, elk pad bleef relatief, en de dekkingsweergave tekende ze als een project genaamd app — vernoemd naar het eerste segment van een pad dat nooit een locatie was — waarvan elke regel kopieerde en opende waar geen bestand stond.
- Paden worden nu per tracebestand opgelost, vóór het samenvoegen. Een relatieve
sourceRoot wordt verankerd aan de map waarin zijn tracebestand staat, dus . naast de coverage.xml van een submodule betekent die submodule. Vindt dat de bronnen niet, dan zoekt het omhoog vanaf het tracebestand — de gebruikelijke CMake-indeling schrijft dekking enkele niveaus diep in build/, en welke van beide vormen een project gebruikt staat nergens in het rapport, dus beantwoordt het bestandssysteem dat in plaats van configuratie. De zoektocht stopt bij de werkruimtewortel: daarboven zou een kaal src/main.c in een naburige checkout met dezelfde indeling kunnen belanden — een fout antwoord dat er goed uitziet. Een pad dat al absoluut en aanwezig is blijft precies zoals het was, dus gewone lcov-uitvoeringen veranderen niet.
- Een submodule blijft een eigen project in de dekkingsweergave. Bestanden die nu binnen de werkruimte oplossen zouden anders in de boom van de werkruimte zijn opgegaan — de mappen van de submodule verweven met die van de ouder, en zijn cijfers opgeteld bij het totaal van de ouder alsof één codebase twee keer was gemeten. Elk bestand onthoudt de wortel waarvandaan het gemeten is en de weergave groepeert daarop, dus een submodule houdt zijn eigen kop en eigen totalen, ook al ligt hij in de geopende map. Een uitvoering met toch al absolute paden heeft zo'n wortel niet en wordt gegroepeerd als voorheen.
- Een bestand dat het rapport noemt maar dat weg is, wordt nog steeds als ontbrekend gemeld. Het krijgt geen aannemelijk pad waar het niet ligt: een rapport dat inmiddels verwijderde bestanden noemt is een verouderd rapport, en ze op verzonnen locaties tekenen zou dat verbergen. Elk wordt in het uitvoerkanaal genoemd onder
FUCINI_REMAP_001, met het pad dat het gehad zou hebben.
0.2025.24 · build 3 — Waarom je plaats verdween
2024-07-27
Gewijzigd
- Een plaats die verdwijnt zegt nu waarom. Elke intrekking toonde dezelfde regel — je licentieplaats in dit abonnement is niet langer actief — en dat leest als een verwijt aan de verkeerde persoon. Een teamabonnement dat onder het aantal gebruikte plaatsen wordt verlaagd geeft het overschot nu na een respijtperiode vrij, en wie een plaats verliest deed niets anders dan degene zijn die hem het langst niet gebruikte. Waar de licentieserver iets zinnigs te melden heeft, zegt de extensie het: een plaats die is vrijgegeven om binnen een verlaagd abonnement te passen legt precies dat uit en wijst naar degene die het abonnement beheert, met Nieuwe sleutel aanvragen nog steeds aanwezig — want de weg terug is echt, en de pool heeft ruimte zodra die persoon een plaats vrijmaakt.
- Een beëindigd abonnement biedt geen knop. Uit een verlopen abonnement kan geen nieuwe sleutel worden uitgegeven, dus de enige actie op die melding kon alleen maar mislukken — en dat leest als een kapotte extensie in plaats van een afgelopen abonnement. Nu vertelt hij wat er gebeurd is en houdt het daarbij. Elke reden die deze build niet kent, houdt de algemene tekst: de licentieserver wordt doorlopend uitgerold en een geïnstalleerde extensie niet, dus een onbekende reden tegenkomen is het normale geval en niet de uitzondering — er verschijnt nooit een ruwe code, en het blijft nooit stil. Beide nieuwe meldingen zijn in alle zeventien talen vertaald.
0.2025.23 · build 5 — De extensie uit
2024-07-17
Toegevoegd
- De uitvoering kan er nu uit, in zes extra formaten. Tot nu toe waren er maar twee uitwegen: Fucini JSON, dat niets buiten de extensie leest, en een HTML-rapport, dat machinaal helemaal niets leest. Export Coverage Report... opent een formaatkeuze en schrijft de actieve uitvoering weg als CSV per bestand (gedekt/totaal/percentage voor regels, vertakkingen, functies, MC/DC, regio's en instantiaties, slechtst gedekte eerst, met een
TOTAL-regel), CSV per functie (aantal uitvoeringen, of hij liep, niet-gedekte vertakkingen erin, MC/DC-paren), een Markdown-samenvatting om in een pull request te plakken, een LCOV-tracebestand, Cobertura-XML, SARIF, of een zelfstandige SVG-badge voor een README. Te vinden in het opdrachtenpalet, in de titelbalk van de weergave Covered Files naast Generate Full HTML Report, en in het snelmenu van de statusbalk zodra quickActions.exportReport aanstaat.
- Nu een converter, niet alleen een viewer. De extensie leest al lcov, llvm-cov JSON, Cobertura, JaCoCo, Istanbul/nyc en SimpleCov; met de LCOV- en Cobertura-schrijvers kan het ook de andere kant op. Laad een JaCoCo-rapport, of meerdere rapporten samengevoegd tot één uitvoering, en schrijf het ene tracebestand weg dat genhtml, Codecov, Coveralls en SonarQube allemaal accepteren — of de XML die Jenkins, GitLab en Azure DevOps standaard inlezen. Beide gaan heen en weer door de eigen parsers van de extensie, en regelbereiken worden per regel uitgeschreven zodat de weggeschreven
LF/LH overeenkomen met het percentage op het scherm in plaats van het te benaderen.
- Elke schrijver zegt wat hij weglaat. Alles behalve de CSV's verliest informatie, en stilzwijgend: MC/DC, coderegio's en C++-instantiaties bestaan niet in LCOV, Cobertura of SARIF, en Cobertura noteert hoeveel voorwaarden van een regel gedekt waren, niet welke tak. Fucini JSON en de twee CSV's blijven de formaten die alles dragen wat gemeten is. In de CSV's blijven de cellen van een metriek die de uitvoering niet heeft leeg in plaats van nul — een lege cel zegt "dit gereedschap meldde geen vertakkingsgegevens", een
0 zou zeggen "geen enkele vertakking is geraakt", en een spreadsheet kan die twee achteraf niet uit elkaar houden. Alles wat een spreadsheet anders als formule zou uitvoeren — een veld dat begint met =, +, - of @, oftewel elk npm-scoped pad — wordt vóór het schrijven aangehaald en onschadelijk gemaakt.
- SARIF annoteert de diff; de badge heeft geen netwerk nodig. Niet-gedekte bereiken worden gemeld op niveau
note, niet warning: niet-gedekte code zegt iets over de testsuite, en code scanning behandelt een waarschuwing als iets dat zou moeten blokkeren — de poort die blokkeert blijft Check Coverage Thresholds. De badge wordt hier getekend in plaats van bij shields.io opgehaald, dus hij werkt ook in een afgesloten of on-premises repository, en neemt zijn kleur uit dezelfde colorScale als de kantlijn en de statusbalk. In de gratis Community-editie opent de keuze en werken beide CSV's, met een limiet van 20 exports per dag zoals Export Fucini JSON; de uitwisselingsformaten zijn betaald, op dezelfde lijn die deze editie altijd trok — je eigen cijfers lezen is gratis, een CI-pijplijn voeden niet.
0.2025.22 · build 3 — Niets te meten
2024-06-24
Opgelost
- Een bestand waarin niets te instrumenteren valt, wordt niet langer als 100% gedekt gemeld. Een header met alleen declaraties — prototypes, een macro, include guards — heeft geen functielichamen, dus de compiler produceert er geen dekkingsgegevens voor, en alles wat nul door nul deelt antwoordt 100%. Het stond groen in de boom, naast code die wél getest was. Beide lezers nemen nu de totalen van het gereedschap zelf als het verslag dat het bestand van zichzelf geeft —
LF/FNF/BRF in lcov, het summary-blok in llvm-cov-JSON — en een bestand waarvan alle totalen nul zijn, blijft buiten de run in plaats van een cijfer te krijgen. De regelgegevens onder die totalen worden bewust genegeerd: de expansie van een macro wordt toegeschreven aan de regel die haar definieert, terwijl de telling hoort bij de regel die haar gebruikt, in een ander bestand, en die geleende regel was de enige reden dat zo’n header ooit gemeten leek. Ook de runtotalen raken haar kwijt, dus het hoofdcijfer ligt iets lager en klopt veel beter. Elk weggelaten pad wordt in het uitvoerkanaal genoemd, en een rapport waarin elk bestand alleen declaraties bevat, behoudt ze allemaal.
Gewijzigd
- Een dekkingsbestand kiezen komt bij wat al geladen is in plaats van het te vervangen. Een build die per module één rapport schrijft heeft geen enkel bestand om vast te zetten, en het rapport van de tweede module kiezen ontlaadde stilletjes het eerste. Het dialoogvenster neemt nu meerdere bestanden tegelijk, elke keuze komt erbij, en alles wat gekozen is wordt samengevoegd tot één run — in het paneel getekend onder de eigen naam van elk project. De bewaking volgt ze allemaal, en een opnieuw gebouwd rapport haalt de andere niet meer van het scherm. Show Loaded Coverage Files eindigt met Gekozen bestanden ontladen, dat terugkeert naar de gewone detectie.
- Support heeft een adres op het eigen domein van het product:
support@fucini.software. Waar activering niet vanzelf lukt, gaven het licentiepaneel en de melding met de aanvraagcode je een fucini.consulting-adres — een ander domein dan elke andere link in de extensie, en een dat leest als een ander bedrijf. license@fucini.software blijft wat het is: daar komen sleutels vandaan, het is geen postbus om naar te schrijven.
0.2025.21 — Van wie is deze src
2024-06-21
Toegevoegd
- Elke boom in de Coverage-weergave zegt bij welk project hij hoort. In 0.2025.19 kreeg een samengevoegde run één benoemd blok per project, maar een gewone run tekende nog steeds een kale boom — een werkruimte die was teruggesnoeid tot zijn eigen map opende dus op
src, zonder dat erboven stond wélke src. Elke boom draagt nu zijn wortel: de mappen die naar het project leiden in de gedempte kleur, de eigen map van het project daarachter voluit. Een boom die is teruggesnoeid tot de werkruimtemap zegt nog steeds waartoe hij is teruggesnoeid, en twee codebases die tot één run zijn samengevoegd worden nooit als één boom gelezen. Het is een kop en geen rij — er valt niets uit te klappen, en de mappen eronder vouwen precies zoals voorheen. In een smal paneel korten de voorste mappen eerst in, zodat de map die het project daadwerkelijk benoemt als laatste verdwijnt, en zweven toont het hele pad.
0.2025.20 · build 7 — Het menu dat je verwachtte
2024-06-08
Toegevoegd
- De rijen in de Coverage-weergave hebben het contextmenu van de Verkenner zelf. Rechtsklikken op een bestand of map opende voorheen het Knippen/Kopiëren/Plakken van de webview — drie items zonder iets om op te werken. Nu opent het echte menu van VS Code: Openen, Open to the Side, Openen met…, Reveal in Explorer View, Reveal in File Explorer, Open in Integrated Terminal, Zoeken in map… voor een map, en Copy Path / Copy Relative Path — met de varianten met schuine strepen ernaast op Windows, waar de twee vormen verschillen. De knop
⋯ en het bijbehorende menu zijn ongewijzigd en vormen het laatste item van het nieuwe menu.
Gewijzigd
- Een metriek waarvoor je tracefile geen gegevens bevat, wordt niet meer beoordeeld. Een drempel voor MC/DC terwijl de build geen MC/DC meet, telde als een fout — zo stond een bestand dat 100% scoorde op elke metriek die de build wél leverde, onder een kaart met "3 van 5 gehaald", tegen een lat die niets in die tracefile ooit kon halen. Metrieken zonder gegevens worden nu overal overgeslagen waar een oordeel ontstaat: de statusbalk per bestand, de kaart voor de hele run, de banner boven de geannoteerde broncode en het HTML-rapport. Check Coverage Thresholds noemt een ontbrekende metriek nog steeds expliciet, want daar hoort dat thuis.
- Bestanden zonder iets meetbaars staan niet meer in de Coverage-weergave. Een header met declaraties, een bestand met alleen re-exports, een module met alleen types: geen enkele test die je schrijft verandert hun getal, en openen laat helemaal geen metrieken zien. In 0.2025.19 kregen ze een streepje; nu staan ze er simpelweg niet meer, en mappen die daardoor leeg blijven verdwijnen mee. Een run waarin niets meetbaar is, toont nog steeds alles.
Opgelost
- Een stationsletter kon nog steeds bovenaan de boom staan. Bij coverage waarvan de paden niet onder de geopende werkmap vallen — een samengevoegde tracefile uit een ander project, of een venster zonder geopende map — begon de boom bij
W:, of op Linux en macOS bij een rij zonder naam: één rij, met precies één kind, uitklapbaar zonder doel. De wortel van het bestandssysteem wordt nu nooit meer getekend, hoe de paden er ook uitzien, en elke rij houdt zijn echte absolute pad voor het menu en de editor.
0.2025.19 · build 6 — Paden, geen aanloop
2024-05-16
Toegevoegd
- Een rijmenu op elk bestand en elke map in de Coverage-weergave. De knop aan het eind van een rij kopieert dat pad in elk van de vier vormen die een editor, een shell of een prompt kan willen — absoluut of relatief aan de werkmap, met de scheidingstekens van het besturingssysteem of met schuine strepen — en biedt Reveal in File Explorer en Open in Integrated Terminal, waarbij een bestand de terminal in zijn eigen map opent. De varianten met schuine strepen staan er alleen waar ze van de eigen vorm verschillen, dus op Linux en macOS is het menu twee items korter. Een pad kopiëren betekende voorheen hetzelfde bestand nog een tweede keer opzoeken in de Verkenner.
- Knoppen om alles in of uit te klappen boven de boom. Alles inklappen en dan de ene map openen die je nodig hebt, is de snelste weg door een grote boom, en dat kostte eerder één klik per map. Wat je zo inklapt wordt net zo onthouden als een map die je met de hand hebt gesloten, dus een herlaadbeurt maakt het niet ongedaan.
- Een samengevoegde run over meerdere projecten tekent nu elk project apart, onder zijn eigen naam. Een tracefile uit een tweede codebase hing zijn mappen voorheen aan dezelfde boom als die van de werkruimte, waardoor
src twee keer verscheen zonder uitleg en de mappen van beide projecten alfabetisch door elkaar liepen. Elk project krijgt nu een eigen benoemd blok, gescheiden door een lijn, met dat van de werkruimte voorop. Een run over één project blijft ongewijzigd en krijgt geen kop — er zou niets zijn om hem van te onderscheiden.
Opgelost
- Een bestand zonder iets uitvoerbaars werd gerapporteerd als 0% gedekt. Een module die alleen uit
export *-doorexports bestaat, of alleen uit typedeclaraties, compileert naar niets wat een coveragetool kan meten — het tracefile bevat er dus geen enkele statement voor. De Coverage-weergave gaf dat 0% en zette het bestand in het rood naast code die écht ongetest is, terwijl er niets is om een test voor te schrijven; de Verkenner gaf datzelfde bestand ondertussen een groene 100%, omdat een leeg totaal leest als "alles van niets gedekt". Geen van beide getallen klopte en geen van beide wordt nog getoond: de rij in het paneel krijgt een streepje en een gestippelde omlijning, met een tooltip die uitlegt waarom, en de badge in de Verkenner blijft weg. Een map die alleen zulke bestanden bevat, blijft eveneens ongescoord. Een bestand dat 0% is van iets dat wél gemeten is, toont nog steeds 0% — het streepje betekent "niets te meten", niet "gemeten en gemist". - Rijen uit een samengevoegd project wezen naar de verkeerde plek. Hun paden werden opgebouwd vanaf de hoofdmap van de werkruimte in plaats van hun eigen, dus voor een bestand buiten de werkruimte kopieerde het rijmenu — en opende "Reveal in File Explorer" — een pad waar het bestand nooit stond. Ze dragen nu de hoofdmap waar ze werkelijk vandaan komen.
Gewijzigd
- De Coverage-weergave tekent de hoofdmap van de werkruimte niet meer. De boom begon bij de wortel van het bestandssysteem en liep door elke map boven het project — de schijf, dan de map waarin je projecten staan, dan het project zelf — voordat de eerste map kwam die echt van jou was. Dat waren meerdere niveaus inspringing, op elke rij, die herhaalden wat de venstertitel al zei. Paden beginnen nu bij de werkmap. Het volledige absolute pad is nog steeds wat het rijmenu kopieert en wat de editor opent.
0.2025.18 · build 4 — Blijft waar je het laat
2024-04-30
Opgelost
- Mappen die je in de Coverage-weergave had ingeklapt, klapten bij elke herlading weer open. Bewaken staat standaard aan, dus een build die coverage opnieuw genereert tekent het paneel opnieuw — en omdat elke map open werd getekend, hield inklappen het maar tot de volgende build vol. In een grote boom betekende dat hetzelfde werk een paar keer per uur overdoen. Het paneel onthoudt nu welke mappen je hebt gesloten en laat ze gesloten. Een map die pas in een latere run verschijnt, komt gewoon open te staan: onthouden wordt de bewuste handeling van sluiten, niet de standaardtoestand.
- Telemetrie uitzetten hield de uninstall-ping niet tegen. Die ping wordt verstuurd door een klein losstaand script dat VS Code bij het verwijderen uitvoert. Het heeft geen toegang tot de VS Code-API en kan je instellingen niet lezen, dus het enige wat het ooit vertelt níét te versturen is de afwezigheid van een bestand dat de extensie schrijft zolang telemetrie aanstaat — en dat bestand werd nooit verwijderd als je telemetrie uitzette. Wie het aan had en later uitzette, verstuurde bij het verwijderen alsnog zijn OS-gebruikersnaam, hostname en home directory. Het bestand wordt nu verwijderd zodra telemetrie uit is.
- Een Pro-verlenging kon succes melden voor een sleutel die je net had vervangen. De stille verlenging las je ingestelde sleutel twee keer: eerst om te beslissen of er verlengd moest worden, en daarna nog eens om te bepalen of er iets gezegd moest worden. Plakte je er ondertussen een nieuwe sleutel in, dan zag de tweede lezing een andere sleutel, en beschreef de melding "je Pro-abonnement is verlengd" de vervangen sleutel. Hij leest de sleutel nu één keer.
Gewijzigd
- Elke module in de extensie wordt nu door eigen tests gedekt. Voor een tool die als enige taak heeft je te vertellen wat je tests werkelijk raken, leek dat het goed doen de moeite waard: 53 van de 54 bronbestanden staan op 100% voor statements, branches, functies en regels, en het overgebleven bestand — de VS Code-bedradingslaag — op 95% van zijn functies. Bij het schrijven kwamen de bovenstaande fouten boven water, plus ruim twintig bewakingen die nooit konden draaien: terugvalpaden achter controles die ze al hadden uitgesloten, die als vangnet lezen maar niets opvangen. Die zijn weg, niet toegedekt met een test die niet kon falen.
0.2025.17 — Gevraagd op een moment dat antwoord verdient
2024-04-27
Gewijzigd
- De optionele enquête wacht nu tot je de extensie echt gebruikt hebt, en vraagt op een beter moment. Hij telde kalenderdagen sinds de installatie, en dat meet hoe lang geleden je dit installeerde in plaats van of je het ooit hebt zien werken — een installatie die een maand onaangeroerd bleef, kreeg de vraag een product te beoordelen dat haar nog niets had laten zien. Er zijn nu echte coverage-ladingen nodig naast verstreken tijd, en hij verschijnt niet meer terwijl je editor opstart: hij wacht tot een lading geslaagd is. Na een jaar volgt een derde en laatste uitnodiging, omdat twee binnen één kwartaal iedereen die toevallig druk was voorgoed uitsloot.
- De Nederlandse vertaling is niet langer formeel. Hij sprak je overal aan met «u», wat stijf leest voor een ontwikkelaarstool en bij niets anders in de stem van het product paste. Elke Nederlandse tekst gebruikt nu «je» — zin voor zin herschreven, omdat de wijziging de werkwoordsvormen meesleept.
0.2025.16 — Een code, geen bedrijf
2024-04-23
Gewijzigd
- Het activatieformulier vroeg eenpitters om een "company code". Wie Pro of Pro Plus als één persoon koopt, krijgt een code uit zijn eigen abonnement — er zit geen bedrijf achter, en ernaar gevraagd worden suggereert al snel dat je op het verkeerde formulier zit. Dat veld heet nu Subscription code voor Pro en Pro Plus, en blijft Company code voor Business en Enterprise, waar een team er werkelijk één deelt. De toelichting eronder was al per plan geschreven; alleen het label was algemeen gebleven.
0.2025.15 · build 3 — Gemeten aan wat je hebt ingesteld
2024-03-25
Opgelost
- Het gegenereerde HTML-rapport beoordeelde je code op 100%, welke drempels je ook had ingesteld. De statuskolom toetste elke metriek aan een verborgen 100, dus een project dat zijn grenzen op 80 zette en die haalde, zag een groene COMPLIANT-banner pal boven een kolom rode kruisjes — voor dezelfde run, op dezelfde pagina. De metriekenlegenda deed hetzelfde. Beide gebruiken nu je ingestelde drempels, en waar geen drempel geldt tonen ze een gedempt streepje in plaats van een verzonnen oordeel.
- De compliancebanner beweerde meer dan hij had gecontroleerd. Er stond altijd "alle ingestelde drempels gehaald", ook in de standaardmodus, die alleen de gewogen score toetst — zodat een run kon beweren dat elke drempel was gehaald terwijl er eentje zichtbaar faalde in de tabel eronder. Elke modus vertelt nu welke regel echt is toegepast.
- De README zei dat de extensie "gratis draait tot en met 2026-12-31". Die datum bestaat niet in het product. Een eerdere release corrigeerde die bewering in de instellingenbeschrijvingen maar miste de README — het eerste wat iemand op de Marketplace leest. Er staat nu wat er echt gebeurt: 14 dagen proef vanaf het eerste gebruik, daarna de gratis Community-laag, zonder datum waarna iets stopt.
0.2025.14 — Ze uit elkaar houden
2024-03-15
Gewijzigd
- De twee edities zien er in de Marketplace niet langer identiek uit. Pro en Community worden uit één broncodeboom gebouwd, en tot nu toe gold dat ook voor het pictogram — dus waren de twee vermeldingen dezelfde afbeelding met een ander onderschrift, naast elkaar in dezelfde zoekresultaten. Elke editie heeft nu een eigen pictogram: dezelfde illustratie met een gekleurde balk onderaan, turquoise voor Pro en leigrijs voor Community. Het woord onderscheidt ze wanneer het pictogram groot wordt getoond; in een zoekresultaatrij is het woord te klein om te lezen, dus doet de kleur dat.
0.2025.13 — Bereikbaar vanaf waar je staat
2024-02-26
Opgelost
- Het openen van de geannoteerde weergave verhindert niet langer dat je hem opnieuw opent. Het geannoteerde-bronpaneel is een webview en geen teksteditor, dus zolang het de focus had zag de extensie geen "huidig bestand" — en Open Annotated Source antwoordde daar met "open eerst een bestand met geladen dekking", tegen iemand die naar de geannoteerde weergave van een bestand mét dekking keek. Nu valt het terug op het bestand achter het paneel dat je voor je hebt. Datzelfde blok sloeg ook stilletjes de hercontrole over waarvoor een tweede aanroep bestaat: als er een llvm-cov-HTML-rapport is ingesteld, is het opnieuw uitvoeren van de opdracht juist wat het paneel naar de pagina van dat rapport omschakelt — dus als je coverage-build klaar was ná het openen van het paneel, was dat vanaf het paneel zelf onbereikbaar.
0.2025.12 · build 2 — Zeggen wat waar is
2024-02-15
Toegevoegd
- Een betaald Pro-abonnement verlengt zichzelf nu. Elke activeringssleutel loopt precies zo lang als de betaalde periode. De teamplannen pikken een verlengde periode op bij hun volgende check-in, maar individuele Pro checkt nooit in — die werkt volledig offline — dus niets bracht er een verlenging heen, en de sleutel van een maandabonnee zou ongeveer elke maand zijn verlopen hoe trouw hij ook betaalde. De extensie vraagt nu stilletjes om een nieuwe sleutel, alleen in de dagen rond de eigen vervaldatum en alleen met de code die bewijst dat een abonnement ervoor betaalde. Offline zijn in dat venster kost je niets: de sleutel blijft werken tot hij echt afloopt, en de eerstvolgende poging daarna herstelt hem.
- Activeren vanuit de aankoopmail gaat met één klik. De link geeft de extensie je plan en code rechtstreeks, in plaats van VS Code openen, de opdracht zoeken en de code handmatig plakken. Er wordt altijd om bevestiging gevraagd voordat een plaats wordt gebruikt. De code zelf invoeren werkt nog precies zoals eerst — de link is een snelkoppeling, nooit de enige weg — en hij werkt ook in de Community-build.
Opgelost
- Een instellingsbeschrijving beweerde dat de extensie "gratis is tot 2026-12-31". Die datum staat nergens in het product. Wat er werkelijk gebeurt, is een proefperiode van 14 dagen vanaf het eerste gebruik, waarna de extensie terugvalt op het gratis Community-niveau. Dat staat er nu, in elke taal.
- De drempelinstellingen noemen niet langer de release waarin hun standaardwaarden veranderden — een versienummer midden in een zin dat een vraag beantwoordt die niemand stelt bij het lezen van een instelling.
- Meerdere vertaalde beschrijvingen noemden een opdracht die geen enkele vertaalde VS Code toont. Ze verwezen naar de activeringsopdracht met de Engelse naam, dus wie niet in het Engels werkt, werd het opdrachtenpalet in gestuurd op zoek naar een tekst die daar niet staat.
0.2025.11 · build 3 — Tellen wat telt
2023-12-26
Opgelost
- Een project zonder MC/DC-beslissingen kon 0% totale dekking tonen. Sommige tools rapporteren een MC/DC-sectie ook als er niets in te meten valt, en dat werd gelezen als "0% gedekt" in plaats van "niets te dekken". Omdat de totaalscore naar nul zakt zodra één meetwaarde nul is, kon een volledig gedekt project 0% tonen. Een meetwaarde zonder iets te meten telt nu helemaal niet meer mee in de score, en de regel ervoor verdwijnt in plaats van te verschijnen als "0 / 0 voorwaarden gedekt".
- De licentiestatus is nu vertaald in alle 17 talen. Die bleef overal Engels, en omdat hij in zinnen staat die al wél vertaald waren, kreeg je een half vertaalde regel in de statusbalk, in meldingen en in het paneel Gedekte bestanden.
- De weergave Geannoteerde bron en de dekkingsinformatie bij hover zijn nu ook vertaald — de tabel met de nalevingsuitsplitsing, de navigatieknoppen en hun tooltips, en de tak- en MC/DC-details die bij hover verschijnen.
Gewijzigd
- Een betaald Pro-abonnement kan nu met een eigen code worden geactiveerd. De planlijst in het activatieverzoek heeft er een Pro-optie bij gekregen, zodat de code die bij een Pro-abonnement hoort eindelijk ergens naartoe kan. Individuele Pro-sleutels werken nog steeds volledig offline en nemen na activering nooit contact op met de server.
- Het pictogram in de activiteitenbalk is groter en beter zichtbaar naast de ingebouwde pictogrammen.
- Overstappen naar de Community-editie installeert die nu vanaf fucini.software. Eerder werd de Marketplace geprobeerd, waar de Community-editie niet is gepubliceerd, waardoor je na de overstap zonder extensie kon eindigen.
0.2025.10 · build 5 — Een zachtere landing
2023-12-08
Gewijzigd
- Een verlopen abonnement komt nu terecht op het gratis tier — als een individuele activeringssleutel afliep, bleef de extensie je eindeloos vragen te verlengen. Niet verlengen is een normaal einde van een abonnement, geen fout, dus valt de extensie nu terug op het permanente, gratis Community-tier. Teamplannen blijven bewust ongemoeid: een verlopen Pro Plus-, Business- of Enterprise-sleutel wordt nog steeds als verlopen gemeld, want daar moet een beheerder verlengen en het hele bedrijf stilletjes naar het gratis tier laten zakken zou dat verbergen.
Opgelost
- Telemetrie uitschakelen wordt nu in alle gevallen gerespecteerd. Eén codepad kon de controle overslaan wanneer de interne modus voor uitgebreide diagnostiek van de extensie aan stond. Die modus staat in elke gepubliceerde build uit, dus geen enkele release heeft zich ooit zo gedragen, maar de controle is nu onvoorwaardelijk.
- Instellingen worden direct toegepast in plaats van pas na een herlaadbeurt. Het aanpassen van pad-remapping, commentaaruitsluiting, git-diff-filtering of de totalen voor uitgesloten bestanden herlaadt de coverage nu meteen — pad-remapping in het bijzonder, want dat is precies de instelling die je erbij pakt omdat de paden niet overeenkomen.
- "Unlock Full Features" en "Switch to Community" konden halverwege blijven steken zonder dat te melden. Beide lopen nu tot het einde door.
- Je activeringssleutel blijft gekoppeld aan dezelfde machine-identiteit. Op sommige systemen kon die identiteit voorheen tussen sessies opnieuw worden gegenereerd, waardoor een al uitgegeven sleutel ongeldig werd.
0.2025.9 — Volledige vertalingen
2023-12-02
Toegevoegd
- Volledige vertalingen in alle 17 meegeleverde talen — ongeveer honderd van de nieuwere interfaceteksten, waaronder de dialogen voor activering en licenties, de optionele feedbackvragenlijst, de Community-ontgrendelflow en de meldingen voor automatische updates, vielen in elke niet-Engelse bundel nog terug op het Engels. Alle 17 talen dekken nu de volledige runtime-interface van de extensie.
Gewijzigd
- Opruimronde over broncommentaar, documentatie van buildscripts en de bestandslijst voor de packaging. De set bestanden die met de extensie wordt meegeleverd is ongewijzigd; geen functionele of gedragswijzigingen.
0.2025.8 — Edities kunnen niet meer botsen
2023-11-20
Opgelost
- De Pro- en Community-editie tegelijk installeren kon er bij het opstarten één laten crashen — ze registreren dezelfde opdrachten en dezelfde weergave met coverage-bestanden. Dit wordt nu vooraf gedetecteerd: als de andere editie ook is geïnstalleerd, stopt de activering netjes met een melding dat je er één moet verwijderen, in plaats van een onverklaarde activeringsfout.
0.2025.7 — Opruimwerk
2023-10-30
Onderhoudsrelease; geen functionele wijzigingen.
0.2024.6 — Community-tier & teamplannen
2023-10-17
Een permanent gratis tier, teamplannen die een seatpool delen, en een aparte Community-editie van de extensie.
Toegevoegd
- Een permanent, gratis Community-tier — in plaats van een harde stop zodra de proefperiode van 14 dagen afloopt, valt de extensie nu terug op Community: elke functie behalve MC/DC, een beperkte maandelijkse proeverij van het Full HTML Report en de blijvende Annotated Source-weergaven, royale daglimieten op een handvol automatiseerbare acties, en al het overige onbeperkt.
- Ontgrendel elke functie gratis — een nieuwe opdracht "Unlock Full Features" ruilt gedetailleerde gebruikstelemetrie in voor een volledige, onbeperkte toekenning, op elk moment terug te draaien. Een optionele feedbackvragenlijst in de app levert in plaats daarvan een sleutel van 30 dagen met alle functies op, zonder verplichtingen.
- Teamplannen: Pro Plus, Business en Enterprise — deze delen een seatpool (een bedrijfscode plus een aantal seats) in plaats van één sleutel per machine, met een check-in op de achtergrond die de toekenning van een seat actueel houdt en een ingetrokken of verminderde seat automatisch signaleert.
- Fucini Coverage Studio Community — een aparte, eigen listing gebouwd uit dezelfde broncode, waarin de code voor proefperiode, activering en teamplannen van de betaalde tiers echt ontbreekt in plaats van alleen verborgen te zijn. Zie de downloadpagina.
Gewijzigd
- Het genereren van het Full HTML Report en de blijvende Annotated Source-weergaven (gewoon en naast elkaar) zijn in de Community-basis nu functies van de betaalde tiers — alleen de wisselweergave ter plekke blijft over, maandelijks begrensd zoals voorheen. Ontgrendelen geeft nog steeds toegang tot alles.
- Een waarschuwing over de gebruikslimiet op het Community-tier biedt nu beide vervolgstappen in één melding: betaalde plannen bekijken, of ontgrendelen via telemetrie.
Opgelost
- Gedetailleerde, mogelijk identificerende telemetrie (OS-gebruikersnaam, thuismap, CPU-/RAM-specificaties, netwerkinterfaces en de volledige rapport-/broninhoud) kan voortaan alleen nog worden verzonden door Community of door een gratis toekenning met telemetrievoorwaarde — nooit door een betaalde Pro-/Pro Plus-/Business-/Enterprise-licentie, ongeacht de lokale telemetrie-instellingen.
- Een installatie die al op een eerdere build draaide, krijgt niet langer een nieuwe proefperiode toegekend alleen omdat er is geüpgraded — ze komt nu correct op het Community-tier terecht als haar oude proefperiode al was verlopen.
- De updatemelding, de downloadvoortgang en de foutmeldingen tonen nu de gewone
Major.Year.Minor-versie (gelijk aan wat de Extensions-weergave van VS Code toont) in plaats van het interne buildnummer prijs te geven, bijv. 0.2024.6 in plaats van 0.2024.6.2.
0.2024.5 — Fijnmazige licentiesleutels
2023-09-03
Activeringssleutels kunnen nu afzonderlijke functies apart begrenzen, en licentiebeheerders kunnen vanuit het dashboard handmatig een fijn afgestemde sleutel uitgeven.
Toegevoegd
- Gebruikslimieten per functie — activeringssleutels kunnen nu elke functie/actie afzonderlijk begrenzen (bijvoorbeeld HTML-rapportexports op 1 per maand) in plaats van één gedeelde limiet op het laden van coverage. Bestaande sleutels blijven ongewijzigd werken.
- Handmatige sleuteluitgifte — licentiebeheerders kunnen nu handmatig een sleutel uitgeven voor een aanvraagcode die buiten de vragenlijst in de editor is ontvangen, waarbij ze precies kiezen welke functies worden toegekend, een vervaldatum en limieten per functie, en waarbij de sleutel automatisch wordt gemaild als er een adres is opgegeven.
0.2024.4 — Betrouwbaarheid van de update-feed
2023-07-24
Lost een cachingprobleem op waardoor nieuwe releases verborgen konden blijven voor gebruikers achter bepaalde bedrijfsproxy's.
Opgelost
- Betrouwbaarheid van de zelfupdate-feed — het updatemanifest wordt nu geleverd met een strikte no-cache-header, zodat een cachende proxy tussen fucini.software en de lezer geen verouderde kopie meer kan serveren die nieuwe releases verbergt.
0.2024.3 — Kleine fixes & prestaties
2023-07-13
Een kleine onderhoudsupdate: een paar kleine bugfixes en prestatieverbeteringen.
Opgelost
- Bugfixes — kleine bugfixes en stabiliteitsverbeteringen.
- Prestaties — kleine prestatieverbeteringen bij het laden en weergeven van coverage.
0.2024.2 — Geautomatiseerde activering
2023-06-20
Activeringssleutels worden nu automatisch uitgegeven en toegepast — niet langer wachten op een e-mail.
Evaluatierelease. Elke installatie krijgt een gratis proefperiode van 14 dagen waarin alles ontgrendeld is, gerekend vanaf het eerste gebruik; daarna valt hij terug op het gratis Community-niveau in plaats van te stoppen. Een licentiesleutel wordt op aanvraag automatisch uitgegeven. Meer informatie →
Gewijzigd
- Geautomatiseerde activering — het aanvragen van een sleutel dient nu een korte vragenlijst in en past de ontvangen sleutel automatisch toe op je instellingen, zonder e-mailuitwisseling.
- Snellere verlengingen — een verlengingsaanvraag vraagt alleen naar gebruik en wensen; je contactgegevens van een eerdere aanvraag worden hergebruikt, nooit opnieuw gevraagd.
- Vast evaluatievenster — de proefperiode loopt nu voor iedereen tot en met 31-12-2026, in plaats van de vorige aftelling van 14 dagen vanaf installatie.
- Gelokaliseerde activeringsflow — de vernieuwingsvragenlijst en activeringsbevestigingen zijn nu vertaald in alle 18 ondersteunde talen, net als de rest van de extensie.
0.2024.1 · build 3 — Slimmere updatecontrole
2023-06-02
De extensie controleert nu zowel fucini.software als de VS Code Marketplace op updates en biedt altijd de nieuwste versie aan.
Opgelost
- Controle uit twee bronnen — controleert nu zowel fucini.software als de VS Code Marketplace en biedt de nieuwste versie aan.
0.2024.0 — Eerste release
2023-04-26
Eerste publieke release van Fucini Coverage Studio — native VS Code-coverage die tracebestanden van industriestandaarden inneemt, ze normaliseert naar één canoniek model, runs deterministisch samenvoegt en rapporteert via de ingebouwde Test Coverage API van VS Code.
Toegevoegd
- Ondersteuning voor meerdere formaten — LCOV, llvm-cov JSON, Cobertura XML, JaCoCo XML, Istanbul/nyc en SimpleCov JSON, automatisch gedetecteerd.
- Deterministisch samenvoegen — meerdere tracebestanden gecombineerd tot één run met vastgelegde herkomst, stabiel ongeacht de laadvolgorde.
- Native coverage-UI — regel-/branch-/functiegutters, overzichtslinaal en het ingebouwde Test Coverage-paneel.
- MC/DC-coverage — uitsplitsing per beslissing bij hover en een optionele gekleurde margin-gutter.
- Samengestelde score — een SIL-gewogen gewogen harmonisch gemiddelde over regels, branches, functies, regio's, MC/DC en C++-instantiëringen.
- Compliance-oordeel — COMPLIANT / NON-COMPLIANT-gating met de modi
strict, whm, both en either.
- Padherschrijving, diff-coverage, Explorer-badges en een projectbrede statusbalk.
- Analyse in de editor — functie-CodeLens, branch-hover, waarschuwingen voor dode code, waarschuwingen voor verouderde coverage en Next/Previous Uncovered.
- Weergave van gedekte bestanden, HTML-rapporten, geschiedenis & trends, watch-modus en Fucini JSON-export.