summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cli/tests/coverage/complex.ts3
-rw-r--r--cli/tests/coverage/expected_complex.lcov3
-rw-r--r--cli/tests/coverage/expected_complex.out4
-rw-r--r--cli/tools/coverage.rs34
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;
}
}