@@ -796,10 +796,6 @@ impl<'a> Parser<'a> {
796
796
. chain ( inedible. iter ( ) . map ( |x| TokenType :: Token ( x. clone ( ) ) ) )
797
797
. chain ( self . expected_tokens . iter ( ) . cloned ( ) )
798
798
. collect :: < Vec < _ > > ( ) ;
799
- let expects_semi = expected. iter ( ) . any ( |t| match t {
800
- TokenType :: Token ( token:: Semi ) => true ,
801
- _ => false ,
802
- } ) ;
803
799
expected. sort_by_cached_key ( |x| x. to_string ( ) ) ;
804
800
expected. dedup ( ) ;
805
801
let expect = tokens_to_string ( & expected[ ..] ) ;
@@ -839,17 +835,6 @@ impl<'a> Parser<'a> {
839
835
Applicability :: MaybeIncorrect ,
840
836
) ;
841
837
}
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
- ) ;
853
838
let sp = if self . token == token:: Token :: Eof {
854
839
// This is EOF, don't want to point at the following char, but rather the last token
855
840
self . prev_span
@@ -866,14 +851,28 @@ impl<'a> Parser<'a> {
866
851
}
867
852
}
868
853
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
+ ) ;
869
868
let cm = self . sess . source_map ( ) ;
870
869
match ( cm. lookup_line ( self . span . lo ( ) ) , cm. lookup_line ( sp. lo ( ) ) ) {
871
870
( Ok ( ref a) , Ok ( ref b) ) if a. line != b. line && is_semi_suggestable => {
872
871
// The spans are in different lines, expected `;` and found `let` or `return`.
873
872
// High likelihood that it is only a missing `;`.
874
873
err. span_suggestion_short (
875
874
label_sp,
876
- "missing semicolon here" ,
875
+ "a semicolon may be missing here" ,
877
876
";" . to_string ( ) ,
878
877
Applicability :: MaybeIncorrect ,
879
878
) ;
0 commit comments