3
3
use std:: iter:: once;
4
4
use std:: ops:: Range ;
5
5
6
- use rustc_errors:: { Applicability , DiagCtxt } ;
6
+ use rustc_errors:: { Applicability , DiagCtxt , ErrorGuaranteed } ;
7
7
use rustc_lexer:: unescape:: { EscapeError , Mode } ;
8
8
use rustc_span:: { BytePos , Span } ;
9
9
@@ -21,7 +21,7 @@ pub(crate) fn emit_unescape_error(
21
21
// range of the error inside `lit`
22
22
range : Range < usize > ,
23
23
error : EscapeError ,
24
- ) {
24
+ ) -> Option < ErrorGuaranteed > {
25
25
debug ! (
26
26
"emit_unescape_error: {:?}, {:?}, {:?}, {:?}, {:?}" ,
27
27
lit, full_lit_span, mode, range, error
@@ -31,12 +31,12 @@ pub(crate) fn emit_unescape_error(
31
31
let span = err_span. with_lo ( err_span. hi ( ) - BytePos ( c. len_utf8 ( ) as u32 ) ) ;
32
32
( c, span)
33
33
} ;
34
- match error {
34
+ Some ( match error {
35
35
EscapeError :: LoneSurrogateUnicodeEscape => {
36
- dcx. emit_err ( UnescapeError :: InvalidUnicodeEscape { span : err_span, surrogate : true } ) ;
36
+ dcx. emit_err ( UnescapeError :: InvalidUnicodeEscape { span : err_span, surrogate : true } )
37
37
}
38
38
EscapeError :: OutOfRangeUnicodeEscape => {
39
- dcx. emit_err ( UnescapeError :: InvalidUnicodeEscape { span : err_span, surrogate : false } ) ;
39
+ dcx. emit_err ( UnescapeError :: InvalidUnicodeEscape { span : err_span, surrogate : false } )
40
40
}
41
41
EscapeError :: MoreThanOneChar => {
42
42
use unicode_normalization:: { char:: is_combining_mark, UnicodeNormalization } ;
@@ -106,7 +106,7 @@ pub(crate) fn emit_unescape_error(
106
106
span : full_lit_span,
107
107
note,
108
108
suggestion : sugg,
109
- } ) ;
109
+ } )
110
110
}
111
111
EscapeError :: EscapeOnlyChar => {
112
112
let ( c, char_span) = last_char ( ) ;
@@ -116,15 +116,15 @@ pub(crate) fn emit_unescape_error(
116
116
escaped_sugg : c. escape_default ( ) . to_string ( ) ,
117
117
escaped_msg : escaped_char ( c) ,
118
118
byte : mode == Mode :: Byte ,
119
- } ) ;
119
+ } )
120
120
}
121
121
EscapeError :: BareCarriageReturn => {
122
122
let double_quotes = mode. in_double_quotes ( ) ;
123
- dcx. emit_err ( UnescapeError :: BareCr { span : err_span, double_quotes } ) ;
123
+ dcx. emit_err ( UnescapeError :: BareCr { span : err_span, double_quotes } )
124
124
}
125
125
EscapeError :: BareCarriageReturnInRawString => {
126
126
assert ! ( mode. in_double_quotes( ) ) ;
127
- dcx. emit_err ( UnescapeError :: BareCrRawString ( err_span) ) ;
127
+ dcx. emit_err ( UnescapeError :: BareCrRawString ( err_span) )
128
128
}
129
129
EscapeError :: InvalidEscape => {
130
130
let ( c, span) = last_char ( ) ;
@@ -161,16 +161,14 @@ pub(crate) fn emit_unescape_error(
161
161
<https://doc.rust-lang.org/reference/tokens.html#literals>",
162
162
) ;
163
163
}
164
- diag. emit ( ) ;
165
- }
166
- EscapeError :: TooShortHexEscape => {
167
- dcx. emit_err ( UnescapeError :: TooShortHexEscape ( err_span) ) ;
164
+ diag. emit ( )
168
165
}
166
+ EscapeError :: TooShortHexEscape => dcx. emit_err ( UnescapeError :: TooShortHexEscape ( err_span) ) ,
169
167
EscapeError :: InvalidCharInHexEscape | EscapeError :: InvalidCharInUnicodeEscape => {
170
168
let ( c, span) = last_char ( ) ;
171
169
let is_hex = error == EscapeError :: InvalidCharInHexEscape ;
172
170
let ch = escaped_char ( c) ;
173
- dcx. emit_err ( UnescapeError :: InvalidCharInEscape { span, is_hex, ch } ) ;
171
+ dcx. emit_err ( UnescapeError :: InvalidCharInEscape { span, is_hex, ch } )
174
172
}
175
173
EscapeError :: NonAsciiCharInByte => {
176
174
let ( c, span) = last_char ( ) ;
@@ -213,23 +211,23 @@ pub(crate) fn emit_unescape_error(
213
211
Applicability :: MaybeIncorrect ,
214
212
) ;
215
213
}
216
- err. emit ( ) ;
214
+ err. emit ( )
217
215
}
218
216
EscapeError :: OutOfRangeHexEscape => {
219
- dcx. emit_err ( UnescapeError :: OutOfRangeHexEscape ( err_span) ) ;
217
+ dcx. emit_err ( UnescapeError :: OutOfRangeHexEscape ( err_span) )
220
218
}
221
219
EscapeError :: LeadingUnderscoreUnicodeEscape => {
222
220
let ( c, span) = last_char ( ) ;
223
221
dcx. emit_err ( UnescapeError :: LeadingUnderscoreUnicodeEscape {
224
222
span,
225
223
ch : escaped_char ( c) ,
226
- } ) ;
224
+ } )
227
225
}
228
226
EscapeError :: OverlongUnicodeEscape => {
229
- dcx. emit_err ( UnescapeError :: OverlongUnicodeEscape ( err_span) ) ;
227
+ dcx. emit_err ( UnescapeError :: OverlongUnicodeEscape ( err_span) )
230
228
}
231
229
EscapeError :: UnclosedUnicodeEscape => {
232
- dcx. emit_err ( UnescapeError :: UnclosedUnicodeEscape ( err_span, err_span. shrink_to_hi ( ) ) ) ;
230
+ dcx. emit_err ( UnescapeError :: UnclosedUnicodeEscape ( err_span, err_span. shrink_to_hi ( ) ) )
233
231
}
234
232
EscapeError :: NoBraceInUnicodeEscape => {
235
233
let mut suggestion = "\\ u{" . to_owned ( ) ;
@@ -248,35 +246,31 @@ pub(crate) fn emit_unescape_error(
248
246
} else {
249
247
( Some ( err_span) , NoBraceUnicodeSub :: Help )
250
248
} ;
251
- dcx. emit_err ( UnescapeError :: NoBraceInUnicodeEscape { span : err_span, label, sub } ) ;
249
+ dcx. emit_err ( UnescapeError :: NoBraceInUnicodeEscape { span : err_span, label, sub } )
252
250
}
253
251
EscapeError :: UnicodeEscapeInByte => {
254
- dcx. emit_err ( UnescapeError :: UnicodeEscapeInByte ( err_span) ) ;
252
+ dcx. emit_err ( UnescapeError :: UnicodeEscapeInByte ( err_span) )
255
253
}
256
254
EscapeError :: EmptyUnicodeEscape => {
257
- dcx. emit_err ( UnescapeError :: EmptyUnicodeEscape ( err_span) ) ;
258
- }
259
- EscapeError :: ZeroChars => {
260
- dcx. emit_err ( UnescapeError :: ZeroChars ( err_span) ) ;
261
- }
262
- EscapeError :: LoneSlash => {
263
- dcx. emit_err ( UnescapeError :: LoneSlash ( err_span) ) ;
264
- }
265
- EscapeError :: NulInCStr => {
266
- dcx. emit_err ( UnescapeError :: NulInCStr { span : err_span } ) ;
255
+ dcx. emit_err ( UnescapeError :: EmptyUnicodeEscape ( err_span) )
267
256
}
257
+ EscapeError :: ZeroChars => dcx. emit_err ( UnescapeError :: ZeroChars ( err_span) ) ,
258
+ EscapeError :: LoneSlash => dcx. emit_err ( UnescapeError :: LoneSlash ( err_span) ) ,
259
+ EscapeError :: NulInCStr => dcx. emit_err ( UnescapeError :: NulInCStr { span : err_span } ) ,
268
260
EscapeError :: UnskippedWhitespaceWarning => {
269
261
let ( c, char_span) = last_char ( ) ;
270
262
dcx. emit_warn ( UnescapeError :: UnskippedWhitespace {
271
263
span : err_span,
272
264
ch : escaped_char ( c) ,
273
265
char_span,
274
266
} ) ;
267
+ return None ;
275
268
}
276
269
EscapeError :: MultipleSkippedLinesWarning => {
277
270
dcx. emit_warn ( UnescapeError :: MultipleSkippedLinesWarning ( err_span) ) ;
271
+ return None ;
278
272
}
279
- }
273
+ } )
280
274
}
281
275
282
276
/// Pushes a character to a message string for error reporting
0 commit comments