diff options
-rw-r--r-- | cli/tests/coverage/complex.ts | 3 | ||||
-rw-r--r-- | cli/tests/coverage/expected_complex.lcov | 3 | ||||
-rw-r--r-- | cli/tests/coverage/expected_complex.out | 4 | ||||
-rw-r--r-- | cli/tools/coverage.rs | 34 |
4 files changed, 22 insertions, 22 deletions
diff --git a/cli/tests/coverage/complex.ts b/cli/tests/coverage/complex.ts index a54c3437b..47d4ffa79 100644 --- a/cli/tests/coverage/complex.ts +++ b/cli/tests/coverage/complex.ts @@ -66,3 +66,6 @@ export function ƒ(): number { 0 ); } + +// This arrow function should also show up as uncovered. +console.log("%s", () => 1); diff --git a/cli/tests/coverage/expected_complex.lcov b/cli/tests/coverage/expected_complex.lcov index 0182b3de7..962ebee96 100644 --- a/cli/tests/coverage/expected_complex.lcov +++ b/cli/tests/coverage/expected_complex.lcov @@ -47,6 +47,7 @@ DA:65,0 DA:66,0 DA:67,0 DA:68,1 +DA:71,0 LH:22 -LF:36 +LF:37 end_of_record diff --git a/cli/tests/coverage/expected_complex.out b/cli/tests/coverage/expected_complex.out index 1dee78a87..e9f9a453f 100644 --- a/cli/tests/coverage/expected_complex.out +++ b/cli/tests/coverage/expected_complex.out @@ -1,4 +1,4 @@ -cover [WILDCARD]/coverage/complex.ts ... 61.111% (22/36) +cover [WILDCARD]/coverage/complex.ts ... 59.459% (22/37) 46 | export function unused( 47 | foo: string, 48 | bar: string, @@ -15,3 +15,5 @@ cover [WILDCARD]/coverage/complex.ts ... 61.111% (22/36) 65 | return ( 66 | 0 67 | ); +-----|----- + 71 | console.log("%s", () => 1); diff --git a/cli/tools/coverage.rs b/cli/tools/coverage.rs index eb7c5e932..9e97688a3 100644 --- a/cli/tools/coverage.rs +++ b/cli/tools/coverage.rs @@ -295,22 +295,19 @@ impl CoverageReporter for LcovCoverageReporter { } } - // Reset the count if any block intersects with the current line has a count of - // zero. - // - // We check for intersection instead of inclusion here because a block may be anywhere - // inside a line. + // We reset the count if any block with a zero count overlaps with the line range. for function in &script_coverage.functions { for range in &function.ranges { if range.count > 0 { continue; } - if (range.start_offset < *line_start_offset - && range.end_offset > *line_start_offset) - || (range.start_offset < *line_end_offset - && range.end_offset > *line_end_offset) - { + let overlaps = std::cmp::max(line_end_offset, &range.end_offset) + - std::cmp::min(line_start_offset, &range.start_offset) + < (line_end_offset - line_start_offset) + + (range.end_offset - range.start_offset); + + if overlaps { count = 0; } } @@ -435,22 +432,19 @@ impl CoverageReporter for PrettyCoverageReporter { } } - // Reset the count if any block intersects with the current line has a count of - // zero. - // - // We check for intersection instead of inclusion here because a block may be anywhere - // inside a line. + // We reset the count if any block with a zero count overlaps with the line range. for function in &script_coverage.functions { for range in &function.ranges { if range.count > 0 { continue; } - if (range.start_offset < *line_start_offset - && range.end_offset > *line_start_offset) - || (range.start_offset < *line_end_offset - && range.end_offset > *line_end_offset) - { + let overlaps = std::cmp::max(line_end_offset, &range.end_offset) + - std::cmp::min(line_start_offset, &range.start_offset) + < (line_end_offset - line_start_offset) + + (range.end_offset - range.start_offset); + + if overlaps { count = 0; } } |