@@ -246,14 +246,27 @@ impl<'a> StringReader<'a> {
246
246
self . err_span ( self . mk_sp ( from_pos, to_pos) , m)
247
247
}
248
248
249
+ /// Pushes a character to a message string for error reporting
250
+ fn push_escaped_char_for_msg ( m : & mut String , c : char ) {
251
+ match c {
252
+ '\u{20}' ...'\u{7e}' => {
253
+ // Don't escape \, ' or " for user-facing messages
254
+ m. push ( c) ;
255
+ }
256
+ _ => {
257
+ for c in c. escape_default ( ) {
258
+ m. push ( c) ;
259
+ }
260
+ }
261
+ }
262
+ }
263
+
249
264
/// Report a lexical error spanning [`from_pos`, `to_pos`), appending an
250
265
/// escaped character to the error message
251
266
fn fatal_span_char ( & self , from_pos : BytePos , to_pos : BytePos , m : & str , c : char ) -> FatalError {
252
267
let mut m = m. to_string ( ) ;
253
268
m. push_str ( ": " ) ;
254
- for c in c. escape_default ( ) {
255
- m. push ( c)
256
- }
269
+ Self :: push_escaped_char_for_msg ( & mut m, c) ;
257
270
self . fatal_span_ ( from_pos, to_pos, & m[ ..] )
258
271
}
259
272
fn struct_fatal_span_char ( & self ,
@@ -264,9 +277,7 @@ impl<'a> StringReader<'a> {
264
277
-> DiagnosticBuilder < ' a > {
265
278
let mut m = m. to_string ( ) ;
266
279
m. push_str ( ": " ) ;
267
- for c in c. escape_default ( ) {
268
- m. push ( c)
269
- }
280
+ Self :: push_escaped_char_for_msg ( & mut m, c) ;
270
281
self . sess . span_diagnostic . struct_span_fatal ( self . mk_sp ( from_pos, to_pos) , & m[ ..] )
271
282
}
272
283
@@ -275,9 +286,7 @@ impl<'a> StringReader<'a> {
275
286
fn err_span_char ( & self , from_pos : BytePos , to_pos : BytePos , m : & str , c : char ) {
276
287
let mut m = m. to_string ( ) ;
277
288
m. push_str ( ": " ) ;
278
- for c in c. escape_default ( ) {
279
- m. push ( c)
280
- }
289
+ Self :: push_escaped_char_for_msg ( & mut m, c) ;
281
290
self . err_span_ ( from_pos, to_pos, & m[ ..] ) ;
282
291
}
283
292
fn struct_err_span_char ( & self ,
@@ -288,9 +297,7 @@ impl<'a> StringReader<'a> {
288
297
-> DiagnosticBuilder < ' a > {
289
298
let mut m = m. to_string ( ) ;
290
299
m. push_str ( ": " ) ;
291
- for c in c. escape_default ( ) {
292
- m. push ( c)
293
- }
300
+ Self :: push_escaped_char_for_msg ( & mut m, c) ;
294
301
self . sess . span_diagnostic . struct_span_err ( self . mk_sp ( from_pos, to_pos) , & m[ ..] )
295
302
}
296
303
0 commit comments