Skip to content

feat(coverage-istanbul): read coverage data without babel#752

Merged
9aoy merged 2 commits intoweb-infra-dev:mainfrom
claneo:feat/readInitialCoverage
Dec 11, 2025
Merged

feat(coverage-istanbul): read coverage data without babel#752
9aoy merged 2 commits intoweb-infra-dev:mainfrom
claneo:feat/readInitialCoverage

Conversation

@claneo
Copy link
Copy Markdown
Collaborator

@claneo claneo commented Dec 10, 2025

Summary

Read coverage data from source code using string matching, babel is not required anymore.

Tested on a project containing 761 unused files, generateCoverageForUntestedFiles method's total execution time was reduced from 8.208s to 752.164ms.

Related Links

Checklist

  • Tests updated (or not required).
  • Documentation updated (or not required).

Copilot AI review requested due to automatic review settings December 10, 2025 06:29
@netlify
Copy link
Copy Markdown

netlify bot commented Dec 10, 2025

Deploy Preview for rstest-dev ready!

Name Link
🔨 Latest commit 9259550
🔍 Latest deploy log https://app.netlify.com/projects/rstest-dev/deploys/693917c8cbdf0b000889c8c3
😎 Deploy Preview https://deploy-preview-752--rstest-dev.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR refactors the coverage data extraction in @rstest/coverage-istanbul to use direct string parsing instead of babel/istanbul-lib-instrument, achieving a significant performance improvement (10.9x faster: 8.208s → 752ms for 761 files).

Key changes:

  • Introduces a new string-based parser (readInitialCoverage) that extracts coverage data by searching for a magic value and matching braces
  • Removes dependency on istanbul-lib-instrument and related babel packages
  • Simplifies the coverage data extraction logic in the provider

Reviewed changes

Copilot reviewed 4 out of 5 changed files in this pull request and generated 9 comments.

Show a summary per file
File Description
packages/coverage-istanbul/src/utils.ts New file containing string-based coverage data parser to replace babel parsing
packages/coverage-istanbul/src/provider.ts Simplified to use new local readInitialCoverage function instead of istanbul-lib-instrument
packages/coverage-istanbul/package.json Removed istanbul-lib-instrument and @types/istanbul-lib-instrument dependencies
pnpm-lock.yaml Updated lockfile reflecting removal of babel-related dependencies
packages/core/LICENSE.md Updated magic-string repository URL format (unrelated to main PR purpose)
Files not reviewed (1)
  • pnpm-lock.yaml: Language not supported

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +41 to +47
let remainCloseBraceCount = 1;
while (remainCloseBraceCount > 0) {
closeBraceIndex++;
if (closeBraceIndex >= code.length) throw new Error('');
const char = code[closeBraceIndex];
if (char === '{') remainCloseBraceCount++;
else if (char === '}') remainCloseBraceCount--;
Copy link

Copilot AI Dec 10, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The variable name remainCloseBraceCount is slightly misleading since it tracks the number of braces that still need to be matched (starting from inside the object), not the number remaining to be processed. Consider renaming to braceDepth or closeBraceBalance to better reflect its purpose as a counter that tracks nesting depth.

Suggested change
let remainCloseBraceCount = 1;
while (remainCloseBraceCount > 0) {
closeBraceIndex++;
if (closeBraceIndex >= code.length) throw new Error('');
const char = code[closeBraceIndex];
if (char === '{') remainCloseBraceCount++;
else if (char === '}') remainCloseBraceCount--;
let braceDepth = 1;
while (braceDepth > 0) {
closeBraceIndex++;
if (closeBraceIndex >= code.length) throw new Error('');
const char = code[closeBraceIndex];
if (char === '{') braceDepth++;
else if (char === '}') braceDepth--;

Copilot uses AI. Check for mistakes.
Comment on lines +31 to +47
let remainOpenBraceCount = 1;
while (remainOpenBraceCount > 0) {
openBraceIndex--;
if (openBraceIndex < 0) throw new Error('');
const char = code[openBraceIndex];
if (char === '}') remainOpenBraceCount++;
else if (char === '{') remainOpenBraceCount--;
}

let closeBraceIndex = magicValueIndex;
let remainCloseBraceCount = 1;
while (remainCloseBraceCount > 0) {
closeBraceIndex++;
if (closeBraceIndex >= code.length) throw new Error('');
const char = code[closeBraceIndex];
if (char === '{') remainCloseBraceCount++;
else if (char === '}') remainCloseBraceCount--;
Copy link

Copilot AI Dec 10, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The variable name remainOpenBraceCount is slightly misleading since it tracks the number of braces that still need to be matched (starting from inside the object), not the number remaining to be processed. Consider renaming to braceDepth or openBraceBalance to better reflect its purpose as a counter that tracks nesting depth.

Suggested change
let remainOpenBraceCount = 1;
while (remainOpenBraceCount > 0) {
openBraceIndex--;
if (openBraceIndex < 0) throw new Error('');
const char = code[openBraceIndex];
if (char === '}') remainOpenBraceCount++;
else if (char === '{') remainOpenBraceCount--;
}
let closeBraceIndex = magicValueIndex;
let remainCloseBraceCount = 1;
while (remainCloseBraceCount > 0) {
closeBraceIndex++;
if (closeBraceIndex >= code.length) throw new Error('');
const char = code[closeBraceIndex];
if (char === '{') remainCloseBraceCount++;
else if (char === '}') remainCloseBraceCount--;
let braceDepth = 1;
while (braceDepth > 0) {
openBraceIndex--;
if (openBraceIndex < 0) throw new Error('');
const char = code[openBraceIndex];
if (char === '}') braceDepth++;
else if (char === '{') braceDepth--;
}
let closeBraceIndex = magicValueIndex;
let braceDepth2 = 1;
while (braceDepth2 > 0) {
closeBraceIndex++;
if (closeBraceIndex >= code.length) throw new Error('');
const char = code[closeBraceIndex];
if (char === '{') braceDepth2++;
else if (char === '}') braceDepth2--;

Copilot uses AI. Check for mistakes.
@9aoy
Copy link
Copy Markdown
Collaborator

9aoy commented Dec 11, 2025

👍

@9aoy 9aoy merged commit b910f46 into web-infra-dev:main Dec 11, 2025
16 checks passed
@9aoy 9aoy mentioned this pull request Dec 15, 2025
@claneo claneo deleted the feat/readInitialCoverage branch December 15, 2025 12:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants