@@ -30,6 +30,10 @@ const { tmpdir } = require('os');
3030const { join, resolve, relative } = require ( 'path' ) ;
3131const { fileURLToPath, URL } = require ( 'internal/url' ) ;
3232const { kMappings, SourceMap } = require ( 'internal/source_map/source_map' ) ;
33+ const { Parser : AcornParser } =
34+ require ( 'internal/deps/acorn/acorn/dist/acorn' ) ;
35+ const { simple : acornWalkSimple } =
36+ require ( 'internal/deps/acorn/acorn-walk/dist/walk' ) ;
3337const {
3438 codes : {
3539 ERR_SOURCE_MAP_CORRUPT ,
@@ -38,10 +42,6 @@ const {
3842} = require ( 'internal/errors' ) ;
3943const { matchGlobPattern } = require ( 'internal/fs/glob' ) ;
4044const { constants : { kMockSearchParam } } = require ( 'internal/test_runner/mock/loader' ) ;
41- const { Parser : AcornParser } =
42- require ( 'internal/deps/acorn/acorn/dist/acorn' ) ;
43- const { simple : acornWalkSimple } =
44- require ( 'internal/deps/acorn/acorn-walk/dist/walk' ) ;
4545
4646// Statement types excluded from coverage: containers (BlockStatement)
4747// and empty statements that carry no executable semantics.
@@ -89,6 +89,7 @@ class TestCoverage {
8989 try {
9090 source ??= readFileSync ( fileURLToPath ( fileUrl ) , 'utf8' ) ;
9191 } catch {
92+ // The file can no longer be read. Leave it out of statement coverage.
9293 this . #sourceStatements. set ( fileUrl , null ) ;
9394 return null ;
9495 }
@@ -119,11 +120,14 @@ class TestCoverage {
119120 __proto__ : null ,
120121 ecmaVersion : 'latest' ,
121122 sourceType : 'script' ,
123+ allowHashBang : true ,
122124 allowReturnOutsideFunction : true ,
123125 allowImportExportEverywhere : true ,
124126 allowAwaitOutsideFunction : true ,
125127 } ) ;
126128 } catch {
129+ // Acorn could not parse the file (e.g. non-JS syntax, TypeScript).
130+ // Degrade gracefully — the file will report no statement coverage.
127131 this . #sourceStatements. set ( fileUrl , null ) ;
128132 return null ;
129133 }
@@ -248,6 +252,7 @@ class TestCoverage {
248252 try {
249253 source = readFileSync ( fileURLToPath ( url ) , 'utf8' ) ;
250254 } catch {
255+ // The file can no longer be read. Skip it entirely.
251256 continue ;
252257 }
253258
@@ -345,8 +350,7 @@ class TestCoverage {
345350
346351 for ( let ri = 0 ; ri < allRanges . length ; ++ ri ) {
347352 const range = allRanges [ ri ] ;
348- if ( range . startOffset <= stmt . startOffset &&
349- range . endOffset >= stmt . endOffset ) {
353+ if ( doesRangeContainOtherRange ( range , stmt ) ) {
350354 const size = range . endOffset - range . startOffset ;
351355 if ( size < bestSize ) {
352356 bestCount = range . count ;
@@ -846,7 +850,8 @@ function findLineForOffset(offset, lines) {
846850
847851 if ( offset >= line . startOffset && offset <= line . endOffset ) {
848852 return line ;
849- } else if ( offset > line . endOffset ) {
853+ }
854+ if ( offset > line . endOffset ) {
850855 start = mid + 1 ;
851856 } else {
852857 end = mid - 1 ;
0 commit comments