@@ -796,10 +796,6 @@ impl<'a> Parser<'a> {
796796 . chain ( inedible. iter ( ) . map ( |x| TokenType :: Token ( x. clone ( ) ) ) )
797797 . chain ( self . expected_tokens . iter ( ) . cloned ( ) )
798798 . collect :: < Vec < _ > > ( ) ;
799- let expects_semi = expected. iter ( ) . any ( |t| match t {
800- TokenType :: Token ( token:: Semi ) => true ,
801- _ => false ,
802- } ) ;
803799 expected. sort_by_cached_key ( |x| x. to_string ( ) ) ;
804800 expected. dedup ( ) ;
805801 let expect = tokens_to_string ( & expected[ ..] ) ;
@@ -839,17 +835,6 @@ impl<'a> Parser<'a> {
839835 Applicability :: MaybeIncorrect ,
840836 ) ;
841837 }
842- let is_semi_suggestable = expects_semi && (
843- self . token . is_keyword ( keywords:: Break ) ||
844- self . token . is_keyword ( keywords:: Continue ) ||
845- self . token . is_keyword ( keywords:: For ) ||
846- self . token . is_keyword ( keywords:: If ) ||
847- self . token . is_keyword ( keywords:: Let ) ||
848- self . token . is_keyword ( keywords:: Loop ) ||
849- self . token . is_keyword ( keywords:: Match ) ||
850- self . token . is_keyword ( keywords:: Return ) ||
851- self . token . is_keyword ( keywords:: While )
852- ) ;
853838 let sp = if self . token == token:: Token :: Eof {
854839 // This is EOF, don't want to point at the following char, but rather the last token
855840 self . prev_span
@@ -866,14 +851,28 @@ impl<'a> Parser<'a> {
866851 }
867852 }
868853
854+ let is_semi_suggestable = expected. iter ( ) . any ( |t| match t {
855+ TokenType :: Token ( token:: Semi ) => true , // we expect a `;` here
856+ _ => false ,
857+ } ) && ( // a `;` would be expected before the current keyword
858+ self . token . is_keyword ( keywords:: Break ) ||
859+ self . token . is_keyword ( keywords:: Continue ) ||
860+ self . token . is_keyword ( keywords:: For ) ||
861+ self . token . is_keyword ( keywords:: If ) ||
862+ self . token . is_keyword ( keywords:: Let ) ||
863+ self . token . is_keyword ( keywords:: Loop ) ||
864+ self . token . is_keyword ( keywords:: Match ) ||
865+ self . token . is_keyword ( keywords:: Return ) ||
866+ self . token . is_keyword ( keywords:: While )
867+ ) ;
869868 let cm = self . sess . source_map ( ) ;
870869 match ( cm. lookup_line ( self . span . lo ( ) ) , cm. lookup_line ( sp. lo ( ) ) ) {
871870 ( Ok ( ref a) , Ok ( ref b) ) if a. line != b. line && is_semi_suggestable => {
872871 // The spans are in different lines, expected `;` and found `let` or `return`.
873872 // High likelihood that it is only a missing `;`.
874873 err. span_suggestion_short (
875874 label_sp,
876- "missing semicolon here" ,
875+ "a semicolon may be missing here" ,
877876 ";" . to_string ( ) ,
878877 Applicability :: MaybeIncorrect ,
879878 ) ;
0 commit comments