fn main() {
let x = vec![1,2,3];
match x[..] {
[1, 2, 3] => println!("123"),
_ => println!("not 123"),
}
}
Clippy output:
error: indexing into a vector may panic
--> src/main.rs:3:11
|
3 | match x[..] {
| ^^^^^ help: try this: `x.get(..)`
|
= note: `#[deny(clippy::match_on_vec_items)]` on by default
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_on_vec_items
error: aborting due to previous error
However, this use of indexing is infallible.
(note that I'm silencing this lint globally anyway because I don't consider it useful)
cc @CrazyRoka This lint shouldn't trigger on wild [..] patterns.
@goffrie Why do you think this lint isn't useful? x.get(/*...*/) can never panic, while x[/*...*/] can. IMO using get is a clear improvement, since you get a compile time guarantee.
When I updated clippy a number of callsites lit up with the lint where it
was impossible for the indexing to panic (usually because the length was
just checked in some way). Using get would have made the the code less
clear.
Though I feel that this is more of a "teaching" lint for people writing new
code.
On Fri., May 1, 2020, 05:24 Philipp Krones, notifications@github.com
wrote:
cc @CrazyRoka https://github.com/CrazyRoka This lint shouldn't trigger
on wild [..] patterns.@goffrie https://github.com/goffrie Why do you think this lint is not
useful? x.get(/.../) can never panic, while x[/.../] can. IMO using
get is a clear improvement.—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/rust-lang/rust-clippy/issues/5551#issuecomment-622366954,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AAJO2TXUKOP6UEDS6XO6MR3RPK5OXANCNFSM4MW2ODTQ
.
Alright, that is a fair point. I'll move the lint to pedantic (allow-by-default)