@@ -24,6 +24,9 @@ export class JestFileCoverage extends vscode.FileCoverage {
2424 return this . iCoverage ;
2525 }
2626
27+ private isInvalidRange = ( range : Range ) : boolean =>
28+ range . start . line === undefined || range . end . line === undefined ;
29+
2730 public loadDetails ( ) : vscode . FileCoverageDetail [ ] {
2831 if ( this . details ) {
2932 return this . details ;
@@ -40,9 +43,14 @@ export class JestFileCoverage extends vscode.FileCoverage {
4043 return statement . location . end . character ;
4144 }
4245 } ;
46+
4347 // transform istanbul line number from 1-based to vscode 0-based
4448 // and replace null end-column with the end of line, if available
45- const transformRange = ( range : Range ) : vscode . Range => {
49+ const transformRange = ( range : Range ) : vscode . Range | undefined => {
50+ if ( this . isInvalidRange ( range ) ) {
51+ return ;
52+ }
53+
4654 const endColumn = range . end . column ?? getEOL ( range . end . line ) ?? range . start . column ;
4755 return new vscode . Range (
4856 range . start . line - 1 ,
@@ -57,6 +65,9 @@ export class JestFileCoverage extends vscode.FileCoverage {
5765 Object . entries ( transformed . statementMap ) . forEach ( ( [ statementId , range ] ) => {
5866 const executionCount = transformed . s [ statementId ] ;
5967 const vRange = transformRange ( range ) ;
68+ if ( ! vRange ) {
69+ return ;
70+ }
6071 const statementCoverage = new vscode . StatementCoverage ( executionCount , vRange ) ;
6172 details . push ( statementCoverage ) ;
6273 statementByLine [ vRange . start . line ] = statementCoverage ;
@@ -67,6 +78,9 @@ export class JestFileCoverage extends vscode.FileCoverage {
6778 branch . locations . forEach ( ( location , index ) => {
6879 const branchExecutionCount = transformed . b [ branchId ] [ index ] ;
6980 const vRange = transformRange ( location ) ;
81+ if ( ! vRange ) {
82+ return ;
83+ }
7084 const branchCoverage = new vscode . BranchCoverage (
7185 branchExecutionCount > 0 ,
7286 vRange ,
@@ -83,6 +97,9 @@ export class JestFileCoverage extends vscode.FileCoverage {
8397 Object . entries ( transformed . fnMap ) . forEach ( ( [ functionId , func ] ) => {
8498 const executionCount = transformed . f [ functionId ] ;
8599 const vRange = transformRange ( func . loc ) ;
100+ if ( ! vRange ) {
101+ return ;
102+ }
86103 details . push ( new vscode . DeclarationCoverage ( func . name , executionCount , vRange ) ) ;
87104 } ) ;
88105 } catch ( e ) {
0 commit comments