@@ -4,9 +4,9 @@ use super::{
44 TokenExpectType , TokenType ,
55} ;
66use crate :: errors:: {
7- AmbiguousPlus , BadQPathStage2 , BadTypePlus , BadTypePlusSub , ExpectedIdentifier , InInTypo ,
8- IncorrectAwait , IncorrectSemicolon , IncorrectUseOfAwait , SuggEscapeToUseAsIdentifier ,
9- SuggRemoveComma , UseEqInstead ,
7+ AmbiguousPlus , BadQPathStage2 , BadTypePlus , BadTypePlusSub , ExpectedIdentifier , ExpectedSemi ,
8+ ExpectedSemiSugg , InInTypo , IncorrectAwait , IncorrectSemicolon , IncorrectUseOfAwait ,
9+ SuggEscapeToUseAsIdentifier , SuggRemoveComma , UseEqInstead ,
1010} ;
1111
1212use crate :: lexer:: UnmatchedBrace ;
@@ -388,8 +388,8 @@ impl<'a> Parser<'a> {
388388 expected. dedup ( ) ;
389389
390390 let sm = self . sess . source_map ( ) ;
391- let msg = format ! ( "expected `;`, found {}" , super :: token_descr ( & self . token ) ) ;
392- let appl = Applicability :: MachineApplicable ;
391+
392+ // Special-case "expected `;`" errors
393393 if expected. contains ( & TokenType :: Token ( token:: Semi ) ) {
394394 if self . token . span == DUMMY_SP || self . prev_token . span == DUMMY_SP {
395395 // Likely inside a macro, can't provide meaningful suggestions.
@@ -417,11 +417,13 @@ impl<'a> Parser<'a> {
417417 //
418418 // let x = 32:
419419 // let y = 42;
420+ self . sess . emit_err ( ExpectedSemi {
421+ span : self . token . span ,
422+ token_descr : super :: token_descr_struct ( & self . token ) ,
423+ unexpected_token_label : None ,
424+ sugg : ExpectedSemiSugg :: ChangeToSemi ( self . token . span ) ,
425+ } ) ;
420426 self . bump ( ) ;
421- let sp = self . prev_token . span ;
422- self . struct_span_err ( sp, & msg)
423- . span_suggestion_short ( sp, "change this to `;`" , ";" , appl)
424- . emit ( ) ;
425427 return Ok ( true ) ;
426428 } else if self . look_ahead ( 0 , |t| {
427429 t == & token:: CloseDelim ( Delimiter :: Brace )
@@ -439,11 +441,13 @@ impl<'a> Parser<'a> {
439441 //
440442 // let x = 32
441443 // let y = 42;
442- let sp = self . prev_token . span . shrink_to_hi ( ) ;
443- self . struct_span_err ( sp, & msg)
444- . span_label ( self . token . span , "unexpected token" )
445- . span_suggestion_short ( sp, "add `;` here" , ";" , appl)
446- . emit ( ) ;
444+ let span = self . prev_token . span . shrink_to_hi ( ) ;
445+ self . sess . emit_err ( ExpectedSemi {
446+ span,
447+ token_descr : super :: token_descr_struct ( & self . token ) ,
448+ unexpected_token_label : Some ( self . token . span ) ,
449+ sugg : ExpectedSemiSugg :: AddSemi ( span) ,
450+ } ) ;
447451 return Ok ( true ) ;
448452 }
449453 }
@@ -480,6 +484,7 @@ impl<'a> Parser<'a> {
480484 )
481485 } ;
482486 self . last_unexpected_token_span = Some ( self . token . span ) ;
487+ // FIXME: translation requires list formatting (for `expect`)
483488 let mut err = self . struct_span_err ( self . token . span , & msg_exp) ;
484489
485490 if let TokenKind :: Ident ( symbol, _) = & self . prev_token . kind {
@@ -488,7 +493,7 @@ impl<'a> Parser<'a> {
488493 self . prev_token . span ,
489494 & format ! ( "write `fn` instead of `{symbol}` to declare a function" ) ,
490495 "fn" ,
491- appl ,
496+ Applicability :: MachineApplicable ,
492497 ) ;
493498 }
494499 }
@@ -502,7 +507,7 @@ impl<'a> Parser<'a> {
502507 self . prev_token . span ,
503508 "write `pub` instead of `public` to make the item public" ,
504509 "pub" ,
505- appl ,
510+ Applicability :: MachineApplicable ,
506511 ) ;
507512 }
508513
0 commit comments