Clippy lints / Restriction
Clippy lint · Restriction · checked with Clippy 0.1.99
clippy::get_unwrap: called `.get().unwrap()` on a Vec
What it meansChecks for usage of .get().unwrap() (or .get_mut().unwrap) on a standard library type which implements Index It is in the restriction group and off by default.
What you see
warning: called `.get().unwrap()` on a Vec --> main.rs:4:12 | 4 | let last = some_vec.get(3).unwrap(); | ^^^^^^^^^^^^^^^^^^^^^^^^ | = help: for further information visit https://rust-lang.github.io/rust-clippy/stable/index.html#get_unwrap = note: requested on the command line with `-W clippy::get-unwrap` help: using `[]` is clearer and more concise | 4 - let last = some_vec.get(3).unwrap(); 4 + let last = &some_vec[3]; |
Real output of Clippy 0.1.99 (Rust 1.99) on the example below. Names and line numbers in yours will differ.
Does it matter?
Using the Index trait ([]) is more clear and more concise.
Lints that forbid language features for specific codebases (no unwrap, no indexing...). Off by default; pick them one by one, never the whole group.
How to fix it
Clippy can fix this one for you: run cargo clippy --fix (add --allow-dirty if you have uncommitted changes). Review the diff before you commit.
Flagged
let mut some_vec = vec![0, 1, 2, 3];
let last = some_vec.get(3).unwrap();
*some_vec.get_mut(0).unwrap() = 1;
Write this instead
let mut some_vec = vec![0, 1, 2, 3];
let last = some_vec[3];
some_vec[0] = 1;
Turn it off, or on
It is off by default. To use it, set it to warn or deny:
Whole crate (Cargo.toml)
[lints.clippy]
get_unwrap = "warn"In code
#![warn(clippy::get_unwrap)]One run
cargo clippy -- -W clippy::get-unwrapThe [lints] table needs Rust 1.74 or newer. In a workspace, put it under [workspace.lints.clippy] and add [lints] workspace = true to each member.
Clippy's own documentation
What it does
Checks for usage of .get().unwrap() (or
.get_mut().unwrap) on a standard library type which implements Index
Why restrict this?
Using the Index trait ([]) is more clear and more
concise.
Known problems
Not a replacement for error handling: Using either
.unwrap() or the Index trait ([]) carries the risk of causing a panic
if the value being accessed is None. If the use of .get().unwrap() is a
temporary placeholder for dealing with the Option type, then this does
not mitigate the need for error handling. If there is a chance that .get()
will be None in your program, then it is advisable that the None case
is handled in a future refactor instead of using .unwrap() or the Index
trait.
Example
let mut some_vec = vec![0, 1, 2, 3];
let last = some_vec.get(3).unwrap();
*some_vec.get_mut(0).unwrap() = 1;
The correct use would be:
let mut some_vec = vec![0, 1, 2, 3];
let last = some_vec[3];
some_vec[0] = 1;
From the Clippy lint list (0.1.99), part of the Rust project, MIT or Apache-2.0. Official entry.
Related lints
- unwrap_usedChecks for .unwrap() or .unwrap_err() calls on Results and .unwrap() call on Options
- module_name_repetitionsDetects public item names that are prefixed or suffixed by the containing public module’s name
- expect_usedChecks for .expect() or .expect_err() calls on Results and .expect() call on Options
- float_arithmeticChecks for float arithmetic
- float_cmp_conststrict comparison of `f32` or `f64` constant
- fn_to_numeric_cast_anycasting function pointer `fn1` to `usize`
- host_endian_bytesuse of `to_ne_bytes`
- if_then_some_else_noneChecks for if-else that could be written using either bool::then or bool::then_some
- impl_trait_in_paramsLints when impl Trait is being used in a function’s parameters
All 847 Clippy lints · Rust compiler errors · Cargo.toml checker
Up next
Related lintclippy::unwrap_usedChecks for .unwrap() or .unwrap_err() calls on Results and .unwrap() call on OptionsRead it next →Did this answer your question?