33use std:: iter:: once;
44use std:: ops:: Range ;
55
6- use rustc_errors:: { Applicability , DiagCtxt } ;
6+ use rustc_errors:: { Applicability , DiagCtxt , ErrorGuaranteed } ;
77use rustc_lexer:: unescape:: { EscapeError , Mode } ;
88use rustc_span:: { BytePos , Span } ;
99
@@ -21,7 +21,7 @@ pub(crate) fn emit_unescape_error(
2121 // range of the error inside `lit`
2222 range : Range < usize > ,
2323 error : EscapeError ,
24- ) {
24+ ) -> Option < ErrorGuaranteed > {
2525 debug ! (
2626 "emit_unescape_error: {:?}, {:?}, {:?}, {:?}, {:?}" ,
2727 lit, full_lit_span, mode, range, error
@@ -31,12 +31,12 @@ pub(crate) fn emit_unescape_error(
3131 let span = err_span. with_lo ( err_span. hi ( ) - BytePos ( c. len_utf8 ( ) as u32 ) ) ;
3232 ( c, span)
3333 } ;
34- match error {
34+ Some ( match error {
3535 EscapeError :: LoneSurrogateUnicodeEscape => {
36- dcx. emit_err ( UnescapeError :: InvalidUnicodeEscape { span : err_span, surrogate : true } ) ;
36+ dcx. emit_err ( UnescapeError :: InvalidUnicodeEscape { span : err_span, surrogate : true } )
3737 }
3838 EscapeError :: OutOfRangeUnicodeEscape => {
39- dcx. emit_err ( UnescapeError :: InvalidUnicodeEscape { span : err_span, surrogate : false } ) ;
39+ dcx. emit_err ( UnescapeError :: InvalidUnicodeEscape { span : err_span, surrogate : false } )
4040 }
4141 EscapeError :: MoreThanOneChar => {
4242 use unicode_normalization:: { char:: is_combining_mark, UnicodeNormalization } ;
@@ -106,7 +106,7 @@ pub(crate) fn emit_unescape_error(
106106 span : full_lit_span,
107107 note,
108108 suggestion : sugg,
109- } ) ;
109+ } )
110110 }
111111 EscapeError :: EscapeOnlyChar => {
112112 let ( c, char_span) = last_char ( ) ;
@@ -116,15 +116,15 @@ pub(crate) fn emit_unescape_error(
116116 escaped_sugg : c. escape_default ( ) . to_string ( ) ,
117117 escaped_msg : escaped_char ( c) ,
118118 byte : mode == Mode :: Byte ,
119- } ) ;
119+ } )
120120 }
121121 EscapeError :: BareCarriageReturn => {
122122 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 } )
124124 }
125125 EscapeError :: BareCarriageReturnInRawString => {
126126 assert ! ( mode. in_double_quotes( ) ) ;
127- dcx. emit_err ( UnescapeError :: BareCrRawString ( err_span) ) ;
127+ dcx. emit_err ( UnescapeError :: BareCrRawString ( err_span) )
128128 }
129129 EscapeError :: InvalidEscape => {
130130 let ( c, span) = last_char ( ) ;
@@ -161,16 +161,14 @@ pub(crate) fn emit_unescape_error(
161161 <https://doc.rust-lang.org/reference/tokens.html#literals>",
162162 ) ;
163163 }
164- diag. emit ( ) ;
165- }
166- EscapeError :: TooShortHexEscape => {
167- dcx. emit_err ( UnescapeError :: TooShortHexEscape ( err_span) ) ;
164+ diag. emit ( )
168165 }
166+ EscapeError :: TooShortHexEscape => dcx. emit_err ( UnescapeError :: TooShortHexEscape ( err_span) ) ,
169167 EscapeError :: InvalidCharInHexEscape | EscapeError :: InvalidCharInUnicodeEscape => {
170168 let ( c, span) = last_char ( ) ;
171169 let is_hex = error == EscapeError :: InvalidCharInHexEscape ;
172170 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 } )
174172 }
175173 EscapeError :: NonAsciiCharInByte => {
176174 let ( c, span) = last_char ( ) ;
@@ -213,23 +211,23 @@ pub(crate) fn emit_unescape_error(
213211 Applicability :: MaybeIncorrect ,
214212 ) ;
215213 }
216- err. emit ( ) ;
214+ err. emit ( )
217215 }
218216 EscapeError :: OutOfRangeHexEscape => {
219- dcx. emit_err ( UnescapeError :: OutOfRangeHexEscape ( err_span) ) ;
217+ dcx. emit_err ( UnescapeError :: OutOfRangeHexEscape ( err_span) )
220218 }
221219 EscapeError :: LeadingUnderscoreUnicodeEscape => {
222220 let ( c, span) = last_char ( ) ;
223221 dcx. emit_err ( UnescapeError :: LeadingUnderscoreUnicodeEscape {
224222 span,
225223 ch : escaped_char ( c) ,
226- } ) ;
224+ } )
227225 }
228226 EscapeError :: OverlongUnicodeEscape => {
229- dcx. emit_err ( UnescapeError :: OverlongUnicodeEscape ( err_span) ) ;
227+ dcx. emit_err ( UnescapeError :: OverlongUnicodeEscape ( err_span) )
230228 }
231229 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 ( ) ) )
233231 }
234232 EscapeError :: NoBraceInUnicodeEscape => {
235233 let mut suggestion = "\\ u{" . to_owned ( ) ;
@@ -248,35 +246,31 @@ pub(crate) fn emit_unescape_error(
248246 } else {
249247 ( Some ( err_span) , NoBraceUnicodeSub :: Help )
250248 } ;
251- dcx. emit_err ( UnescapeError :: NoBraceInUnicodeEscape { span : err_span, label, sub } ) ;
249+ dcx. emit_err ( UnescapeError :: NoBraceInUnicodeEscape { span : err_span, label, sub } )
252250 }
253251 EscapeError :: UnicodeEscapeInByte => {
254- dcx. emit_err ( UnescapeError :: UnicodeEscapeInByte ( err_span) ) ;
252+ dcx. emit_err ( UnescapeError :: UnicodeEscapeInByte ( err_span) )
255253 }
256254 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) )
267256 }
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 } ) ,
268260 EscapeError :: UnskippedWhitespaceWarning => {
269261 let ( c, char_span) = last_char ( ) ;
270262 dcx. emit_warn ( UnescapeError :: UnskippedWhitespace {
271263 span : err_span,
272264 ch : escaped_char ( c) ,
273265 char_span,
274266 } ) ;
267+ return None ;
275268 }
276269 EscapeError :: MultipleSkippedLinesWarning => {
277270 dcx. emit_warn ( UnescapeError :: MultipleSkippedLinesWarning ( err_span) ) ;
271+ return None ;
278272 }
279- }
273+ } )
280274}
281275
282276/// Pushes a character to a message string for error reporting
0 commit comments