@@ -567,20 +567,37 @@ impl<'a> Parser<'a> {
567567 snapshot. recover_diff_marker ( ) ;
568568 }
569569 if self . token == token:: Colon {
570- // if next token is following a colon, it's likely a path
571- // and we can suggest a path separator
572- self . bump ( ) ;
573- if self . token . span . lo ( ) == self . prev_token . span . hi ( ) {
570+ // if a previous and next token of the current one is
571+ // integer literal (e.g. `1:42`), it's likely a range
572+ // expression for Pythonistas and we can suggest so.
573+ if self . prev_token . is_integer_lit ( )
574+ && self . may_recover ( )
575+ && self . look_ahead ( 1 , |token| token. is_integer_lit ( ) )
576+ {
577+ // FIXME(hkmatsumoto): Might be better to trigger
578+ // this only when parsing an index expression.
574579 err. span_suggestion_verbose (
575- self . prev_token . span ,
576- "maybe write a path separator here " ,
577- ":: " ,
580+ self . token . span ,
581+ "you might have meant a range expression " ,
582+ ".. " ,
578583 Applicability :: MaybeIncorrect ,
579584 ) ;
580- }
581- if self . sess . unstable_features . is_nightly_build ( ) {
582- // FIXME(Nilstrieb): Remove this again after a few months.
583- err. note ( "type ascription syntax has been removed, see issue #101728 <https://github.com/rust-lang/rust/issues/101728>" ) ;
585+ } else {
586+ // if next token is following a colon, it's likely a path
587+ // and we can suggest a path separator
588+ self . bump ( ) ;
589+ if self . token . span . lo ( ) == self . prev_token . span . hi ( ) {
590+ err. span_suggestion_verbose (
591+ self . prev_token . span ,
592+ "maybe write a path separator here" ,
593+ "::" ,
594+ Applicability :: MaybeIncorrect ,
595+ ) ;
596+ }
597+ if self . sess . unstable_features . is_nightly_build ( ) {
598+ // FIXME(Nilstrieb): Remove this again after a few months.
599+ err. note ( "type ascription syntax has been removed, see issue #101728 <https://github.com/rust-lang/rust/issues/101728>" ) ;
600+ }
584601 }
585602 }
586603
0 commit comments