@@ -201,6 +201,29 @@ impl<'a> StringReader<'a> {
201
201
FatalError . raise ( ) ;
202
202
}
203
203
204
+ fn fail_incorrect_raw_string_delimiter ( & mut self , start : BytePos ) -> ! {
205
+ loop {
206
+ match self . ch {
207
+ Some ( '#' ) | Some ( '"' ) => break ,
208
+ _ => self . bump ( ) ,
209
+ }
210
+ }
211
+ let end = self . pos ;
212
+ let span = self . mk_sp ( start, end) ;
213
+ let mut err = self . sess . span_diagnostic . struct_span_fatal (
214
+ span,
215
+ "found invalid character; only `#` is allowed in raw string delimitation" ,
216
+ ) ;
217
+ err. span_suggestion_hidden (
218
+ span,
219
+ "replace with `#`" ,
220
+ format ! ( "{}" , "#" . repeat( ( end. 0 - start. 0 ) as usize ) ) ,
221
+ Applicability :: MachineApplicable ,
222
+ ) ;
223
+ err. emit ( ) ;
224
+ FatalError . raise ( ) ;
225
+ }
226
+
204
227
fn fatal ( & self , m : & str ) -> FatalError {
205
228
self . fatal_span ( self . peek_span , m)
206
229
}
@@ -330,16 +353,6 @@ impl<'a> StringReader<'a> {
330
353
self . err_span ( self . mk_sp ( from_pos, to_pos) , m)
331
354
}
332
355
333
- /// Report a lexical error spanning [`from_pos`, `to_pos`), appending an
334
- /// escaped character to the error message
335
- fn fatal_span_char ( & self , from_pos : BytePos , to_pos : BytePos , m : & str , c : char ) -> FatalError {
336
- let mut m = m. to_string ( ) ;
337
- m. push_str ( ": " ) ;
338
- push_escaped_char ( & mut m, c) ;
339
-
340
- self . fatal_span_ ( from_pos, to_pos, & m[ ..] )
341
- }
342
-
343
356
fn struct_span_fatal ( & self , from_pos : BytePos , to_pos : BytePos , m : & str )
344
357
-> DiagnosticBuilder < ' a >
345
358
{
@@ -1357,16 +1370,7 @@ impl<'a> StringReader<'a> {
1357
1370
vec ! [ self . mk_sp( self . pos, self . pos) ]
1358
1371
) ,
1359
1372
Some ( '"' ) => { } ,
1360
- Some ( c) => {
1361
- let last_bpos = self . pos ;
1362
- self . fatal_span_char (
1363
- start_bpos,
1364
- last_bpos,
1365
- "found invalid character; only `#` is allowed \
1366
- in raw string delimitation",
1367
- c
1368
- ) . raise ( ) ;
1369
- }
1373
+ Some ( _) => self . fail_incorrect_raw_string_delimiter ( self . pos ) ,
1370
1374
}
1371
1375
1372
1376
self . bump ( ) ;
0 commit comments