parent
b29a1e00f8
commit
e65c060d78
@ -756,6 +756,11 @@ pub fn is_numeric_lit(&self) -> bool {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Returns `true` if the token is the integer literal.
|
||||||
|
pub fn is_integer_lit(&self) -> bool {
|
||||||
|
matches!(self.kind, Literal(Lit { kind: LitKind::Integer, .. }))
|
||||||
|
}
|
||||||
|
|
||||||
/// Returns `true` if the token is a non-raw identifier for which `pred` holds.
|
/// Returns `true` if the token is a non-raw identifier for which `pred` holds.
|
||||||
pub fn is_non_raw_ident_where(&self, pred: impl FnOnce(Ident) -> bool) -> bool {
|
pub fn is_non_raw_ident_where(&self, pred: impl FnOnce(Ident) -> bool) -> bool {
|
||||||
match self.ident() {
|
match self.ident() {
|
||||||
|
@ -567,6 +567,22 @@ pub(crate) fn parse_block_tail(
|
|||||||
snapshot.recover_diff_marker();
|
snapshot.recover_diff_marker();
|
||||||
}
|
}
|
||||||
if self.token == token::Colon {
|
if self.token == token::Colon {
|
||||||
|
// if a previous and next token of the current one is
|
||||||
|
// integer literal (e.g. `1:42`), it's likely a range
|
||||||
|
// expression for Pythonistas and we can suggest so.
|
||||||
|
if self.prev_token.is_integer_lit()
|
||||||
|
&& self.look_ahead(1, |token| token.is_integer_lit())
|
||||||
|
{
|
||||||
|
// TODO(hkmatsumoto): Might be better to trigger
|
||||||
|
// this only when parsing an index expression.
|
||||||
|
err.span_suggestion_verbose(
|
||||||
|
self.token.span,
|
||||||
|
"you might have meant to make a slice with range index",
|
||||||
|
"..",
|
||||||
|
Applicability::MaybeIncorrect,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
// if next token is following a colon, it's likely a path
|
// if next token is following a colon, it's likely a path
|
||||||
// and we can suggest a path separator
|
// and we can suggest a path separator
|
||||||
self.bump();
|
self.bump();
|
||||||
|
8
tests/ui/suggestions/range-index-instead-of-colon.rs
Normal file
8
tests/ui/suggestions/range-index-instead-of-colon.rs
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
// edition:2021
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
&[1, 2, 3][1:2];
|
||||||
|
//~^ ERROR: expected one of
|
||||||
|
//~| HELP: you might have meant to make a slice with range index
|
||||||
|
//~| HELP: maybe write a path separator here
|
||||||
|
}
|
18
tests/ui/suggestions/range-index-instead-of-colon.stderr
Normal file
18
tests/ui/suggestions/range-index-instead-of-colon.stderr
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
error: expected one of `.`, `?`, `]`, or an operator, found `:`
|
||||||
|
--> $DIR/range-index-instead-of-colon.rs:4:17
|
||||||
|
|
|
||||||
|
LL | &[1, 2, 3][1:2];
|
||||||
|
| ^ expected one of `.`, `?`, `]`, or an operator
|
||||||
|
|
|
||||||
|
= note: type ascription syntax has been removed, see issue #101728 <https://github.com/rust-lang/rust/issues/101728>
|
||||||
|
help: you might have meant to make a slice with range index
|
||||||
|
|
|
||||||
|
LL | &[1, 2, 3][1..2];
|
||||||
|
| ~~
|
||||||
|
help: maybe write a path separator here
|
||||||
|
|
|
||||||
|
LL | &[1, 2, 3][1::2];
|
||||||
|
| ~~
|
||||||
|
|
||||||
|
error: aborting due to previous error
|
||||||
|
|
Loading…
Reference in New Issue
Block a user