@@ -92,7 +92,7 @@ pub struct Replacement {
92
92
pub replacement : String ,
93
93
}
94
94
95
- fn parse_snippet ( span : & DiagnosticSpan ) -> Snippet {
95
+ fn parse_snippet ( span : & DiagnosticSpan ) -> Option < Snippet > {
96
96
// unindent the snippet
97
97
let indent = span. text
98
98
. iter ( )
@@ -103,8 +103,7 @@ fn parse_snippet(span: &DiagnosticSpan) -> Snippet {
103
103
. count ( ) ;
104
104
std:: cmp:: min ( indent, line. highlight_start )
105
105
} )
106
- . min ( )
107
- . expect ( "text to replace is empty" ) ;
106
+ . min ( ) ?;
108
107
let start = span. text [ 0 ] . highlight_start - 1 ;
109
108
let end = span. text [ 0 ] . highlight_end - 1 ;
110
109
let lead = span. text [ 0 ] . text [ indent..start] . to_string ( ) ;
@@ -120,7 +119,7 @@ fn parse_snippet(span: &DiagnosticSpan) -> Snippet {
120
119
body. push_str ( & last. text [ indent..last. highlight_end - 1 ] ) ;
121
120
}
122
121
tail. push_str ( & last. text [ last. highlight_end - 1 ..] ) ;
123
- Snippet {
122
+ Some ( Snippet {
124
123
file_name : span. file_name . clone ( ) ,
125
124
line_range : LineRange {
126
125
start : LinePosition {
@@ -134,16 +133,13 @@ fn parse_snippet(span: &DiagnosticSpan) -> Snippet {
134
133
} ,
135
134
range : ( span. byte_start as usize ) ..( span. byte_end as usize ) ,
136
135
text : ( lead, body, tail) ,
137
- }
136
+ } )
138
137
}
139
138
140
139
fn collect_span ( span : & DiagnosticSpan ) -> Option < Replacement > {
141
- span. suggested_replacement
142
- . clone ( )
143
- . map ( |replacement| Replacement {
144
- snippet : parse_snippet ( span) ,
145
- replacement,
146
- } )
140
+ let snippet = parse_snippet ( span) ?;
141
+ let replacement = span. suggested_replacement . clone ( ) ?;
142
+ Some ( Replacement { snippet, replacement } )
147
143
}
148
144
149
145
pub fn collect_suggestions < S : :: std:: hash:: BuildHasher > (
@@ -166,7 +162,7 @@ pub fn collect_suggestions<S: ::std::hash::BuildHasher>(
166
162
let snippets = diagnostic
167
163
. spans
168
164
. iter ( )
169
- . map ( |span| parse_snippet ( span) )
165
+ . filter_map ( |span| parse_snippet ( span) )
170
166
. collect ( ) ;
171
167
172
168
let solutions: Vec < _ > = diagnostic
0 commit comments