1
- use rustc_middle:: mir:: coverage:: FunctionCoverageInfo ;
2
1
use rustc_span:: source_map:: SourceMap ;
3
2
use rustc_span:: { BytePos , Pos , SourceFile , Span } ;
4
3
use tracing:: debug;
@@ -19,11 +18,10 @@ use crate::coverageinfo::mapgen::LocalFileId;
19
18
pub ( crate ) fn make_coverage_span (
20
19
file_id : LocalFileId ,
21
20
source_map : & SourceMap ,
22
- fn_cov_info : & FunctionCoverageInfo ,
23
21
file : & SourceFile ,
24
22
span : Span ,
25
23
) -> Option < ffi:: CoverageSpan > {
26
- let span = ensure_non_empty_span ( source_map, fn_cov_info , span) ?;
24
+ let span = ensure_non_empty_span ( source_map, span) ?;
27
25
28
26
let lo = span. lo ( ) ;
29
27
let hi = span. hi ( ) ;
@@ -55,36 +53,22 @@ pub(crate) fn make_coverage_span(
55
53
} )
56
54
}
57
55
58
- fn ensure_non_empty_span (
59
- source_map : & SourceMap ,
60
- fn_cov_info : & FunctionCoverageInfo ,
61
- span : Span ,
62
- ) -> Option < Span > {
56
+ fn ensure_non_empty_span ( source_map : & SourceMap , span : Span ) -> Option < Span > {
63
57
if !span. is_empty ( ) {
64
58
return Some ( span) ;
65
59
}
66
60
67
- let lo = span. lo ( ) ;
68
- let hi = span. hi ( ) ;
69
-
70
- // The span is empty, so try to expand it to cover an adjacent '{' or '}',
71
- // but only within the bounds of the body span.
72
- let try_next = hi < fn_cov_info. body_span . hi ( ) ;
73
- let try_prev = fn_cov_info. body_span . lo ( ) < lo;
74
- if !( try_next || try_prev) {
75
- return None ;
76
- }
77
-
61
+ // The span is empty, so try to enlarge it to cover an adjacent '{' or '}'.
78
62
source_map
79
63
. span_to_source ( span, |src, start, end| try {
80
64
// Adjusting span endpoints by `BytePos(1)` is normally a bug,
81
65
// but in this case we have specifically checked that the character
82
66
// we're skipping over is one of two specific ASCII characters, so
83
67
// adjusting by exactly 1 byte is correct.
84
- if try_next && src. as_bytes ( ) [ end] == b'{' {
85
- Some ( span. with_hi ( hi + BytePos ( 1 ) ) )
86
- } else if try_prev && src. as_bytes ( ) [ start - 1 ] == b'}' {
87
- Some ( span. with_lo ( lo - BytePos ( 1 ) ) )
68
+ if src. as_bytes ( ) . get ( end) . copied ( ) == Some ( b'{' ) {
69
+ Some ( span. with_hi ( span . hi ( ) + BytePos ( 1 ) ) )
70
+ } else if start > 0 && src. as_bytes ( ) [ start - 1 ] == b'}' {
71
+ Some ( span. with_lo ( span . lo ( ) - BytePos ( 1 ) ) )
88
72
} else {
89
73
None
90
74
}
0 commit comments