mirror of
https://github.com/rust-lang/rust-clippy
synced 2025-02-17 06:28:42 +00:00
Full fix of get unwrap issue
This commit is contained in:
parent
de8d233b06
commit
523ba2a009
2 changed files with 26 additions and 15 deletions
|
@ -1404,22 +1404,33 @@ fn lint_get_unwrap(cx: &LateContext<'_, '_>, expr: &hir::Expr, get_args: &[hir::
|
||||||
// Note: we don't want to lint `get_mut().unwrap` for HashMap or BTreeMap,
|
// Note: we don't want to lint `get_mut().unwrap` for HashMap or BTreeMap,
|
||||||
// because they do not implement `IndexMut`
|
// because they do not implement `IndexMut`
|
||||||
let expr_ty = cx.tables.expr_ty(&get_args[0]);
|
let expr_ty = cx.tables.expr_ty(&get_args[0]);
|
||||||
|
let get_args_str = if get_args.len() > 1 {
|
||||||
|
snippet(cx, get_args[1].span, "_")
|
||||||
|
} else {
|
||||||
|
return; // not linting on a .get().unwrap() chain or variant
|
||||||
|
};
|
||||||
|
let needs_ref;
|
||||||
let caller_type = if derefs_to_slice(cx, &get_args[0], expr_ty).is_some() {
|
let caller_type = if derefs_to_slice(cx, &get_args[0], expr_ty).is_some() {
|
||||||
|
needs_ref = get_args_str.parse::<usize>().is_ok();
|
||||||
"slice"
|
"slice"
|
||||||
} else if match_type(cx, expr_ty, &paths::VEC) {
|
} else if match_type(cx, expr_ty, &paths::VEC) {
|
||||||
|
needs_ref = get_args_str.parse::<usize>().is_ok();
|
||||||
"Vec"
|
"Vec"
|
||||||
} else if match_type(cx, expr_ty, &paths::VEC_DEQUE) {
|
} else if match_type(cx, expr_ty, &paths::VEC_DEQUE) {
|
||||||
|
needs_ref = get_args_str.parse::<usize>().is_ok();
|
||||||
"VecDeque"
|
"VecDeque"
|
||||||
} else if !is_mut && match_type(cx, expr_ty, &paths::HASHMAP) {
|
} else if !is_mut && match_type(cx, expr_ty, &paths::HASHMAP) {
|
||||||
|
needs_ref = true;
|
||||||
"HashMap"
|
"HashMap"
|
||||||
} else if !is_mut && match_type(cx, expr_ty, &paths::BTREEMAP) {
|
} else if !is_mut && match_type(cx, expr_ty, &paths::BTREEMAP) {
|
||||||
|
needs_ref = true;
|
||||||
"BTreeMap"
|
"BTreeMap"
|
||||||
} else {
|
} else {
|
||||||
return; // caller is not a type that we want to lint
|
return; // caller is not a type that we want to lint
|
||||||
};
|
};
|
||||||
|
|
||||||
let mut_str = if is_mut { "_mut" } else { "" };
|
let mut_str = if is_mut { "_mut" } else { "" };
|
||||||
let borrow_str = if is_mut { "&mut " } else { "&" };
|
let borrow_str = if !needs_ref { "" } else if is_mut { "&mut " } else { "&" };
|
||||||
span_lint_and_sugg(
|
span_lint_and_sugg(
|
||||||
cx,
|
cx,
|
||||||
GET_UNWRAP,
|
GET_UNWRAP,
|
||||||
|
@ -1431,10 +1442,10 @@ fn lint_get_unwrap(cx: &LateContext<'_, '_>, expr: &hir::Expr, get_args: &[hir::
|
||||||
),
|
),
|
||||||
"try this",
|
"try this",
|
||||||
format!(
|
format!(
|
||||||
"({}{}[{}])",
|
"{}{}[{}]",
|
||||||
borrow_str,
|
borrow_str,
|
||||||
snippet(cx, get_args[0].span, "_"),
|
snippet(cx, get_args[0].span, "_"),
|
||||||
snippet(cx, get_args[1].span, "_")
|
get_args_str
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,7 +2,7 @@ error: called `.get().unwrap()` on a slice. Using `[]` is more clear and more co
|
||||||
--> $DIR/get_unwrap.rs:27:17
|
--> $DIR/get_unwrap.rs:27:17
|
||||||
|
|
|
|
||||||
27 | let _ = boxed_slice.get(1).unwrap();
|
27 | let _ = boxed_slice.get(1).unwrap();
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `(&boxed_slice[1])`
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&boxed_slice[1]`
|
||||||
|
|
|
|
||||||
= note: `-D clippy::get-unwrap` implied by `-D warnings`
|
= note: `-D clippy::get-unwrap` implied by `-D warnings`
|
||||||
|
|
||||||
|
@ -10,67 +10,67 @@ error: called `.get().unwrap()` on a slice. Using `[]` is more clear and more co
|
||||||
--> $DIR/get_unwrap.rs:28:17
|
--> $DIR/get_unwrap.rs:28:17
|
||||||
|
|
|
|
||||||
28 | let _ = some_slice.get(0).unwrap();
|
28 | let _ = some_slice.get(0).unwrap();
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `(&some_slice[0])`
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&some_slice[0]`
|
||||||
|
|
||||||
error: called `.get().unwrap()` on a Vec. Using `[]` is more clear and more concise
|
error: called `.get().unwrap()` on a Vec. Using `[]` is more clear and more concise
|
||||||
--> $DIR/get_unwrap.rs:29:17
|
--> $DIR/get_unwrap.rs:29:17
|
||||||
|
|
|
|
||||||
29 | let _ = some_vec.get(0).unwrap();
|
29 | let _ = some_vec.get(0).unwrap();
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `(&some_vec[0])`
|
| ^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&some_vec[0]`
|
||||||
|
|
||||||
error: called `.get().unwrap()` on a VecDeque. Using `[]` is more clear and more concise
|
error: called `.get().unwrap()` on a VecDeque. Using `[]` is more clear and more concise
|
||||||
--> $DIR/get_unwrap.rs:30:17
|
--> $DIR/get_unwrap.rs:30:17
|
||||||
|
|
|
|
||||||
30 | let _ = some_vecdeque.get(0).unwrap();
|
30 | let _ = some_vecdeque.get(0).unwrap();
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `(&some_vecdeque[0])`
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&some_vecdeque[0]`
|
||||||
|
|
||||||
error: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise
|
error: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise
|
||||||
--> $DIR/get_unwrap.rs:31:17
|
--> $DIR/get_unwrap.rs:31:17
|
||||||
|
|
|
|
||||||
31 | let _ = some_hashmap.get(&1).unwrap();
|
31 | let _ = some_hashmap.get(&1).unwrap();
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `(&some_hashmap[&1])`
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&some_hashmap[&1]`
|
||||||
|
|
||||||
error: called `.get().unwrap()` on a BTreeMap. Using `[]` is more clear and more concise
|
error: called `.get().unwrap()` on a BTreeMap. Using `[]` is more clear and more concise
|
||||||
--> $DIR/get_unwrap.rs:32:17
|
--> $DIR/get_unwrap.rs:32:17
|
||||||
|
|
|
|
||||||
32 | let _ = some_btreemap.get(&1).unwrap();
|
32 | let _ = some_btreemap.get(&1).unwrap();
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `(&some_btreemap[&1])`
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&some_btreemap[&1]`
|
||||||
|
|
||||||
error: called `.get_mut().unwrap()` on a slice. Using `[]` is more clear and more concise
|
error: called `.get_mut().unwrap()` on a slice. Using `[]` is more clear and more concise
|
||||||
--> $DIR/get_unwrap.rs:37:10
|
--> $DIR/get_unwrap.rs:37:10
|
||||||
|
|
|
|
||||||
37 | *boxed_slice.get_mut(0).unwrap() = 1;
|
37 | *boxed_slice.get_mut(0).unwrap() = 1;
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `(&mut boxed_slice[0])`
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&mut boxed_slice[0]`
|
||||||
|
|
||||||
error: called `.get_mut().unwrap()` on a slice. Using `[]` is more clear and more concise
|
error: called `.get_mut().unwrap()` on a slice. Using `[]` is more clear and more concise
|
||||||
--> $DIR/get_unwrap.rs:38:10
|
--> $DIR/get_unwrap.rs:38:10
|
||||||
|
|
|
|
||||||
38 | *some_slice.get_mut(0).unwrap() = 1;
|
38 | *some_slice.get_mut(0).unwrap() = 1;
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `(&mut some_slice[0])`
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&mut some_slice[0]`
|
||||||
|
|
||||||
error: called `.get_mut().unwrap()` on a Vec. Using `[]` is more clear and more concise
|
error: called `.get_mut().unwrap()` on a Vec. Using `[]` is more clear and more concise
|
||||||
--> $DIR/get_unwrap.rs:39:10
|
--> $DIR/get_unwrap.rs:39:10
|
||||||
|
|
|
|
||||||
39 | *some_vec.get_mut(0).unwrap() = 1;
|
39 | *some_vec.get_mut(0).unwrap() = 1;
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `(&mut some_vec[0])`
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&mut some_vec[0]`
|
||||||
|
|
||||||
error: called `.get_mut().unwrap()` on a VecDeque. Using `[]` is more clear and more concise
|
error: called `.get_mut().unwrap()` on a VecDeque. Using `[]` is more clear and more concise
|
||||||
--> $DIR/get_unwrap.rs:40:10
|
--> $DIR/get_unwrap.rs:40:10
|
||||||
|
|
|
|
||||||
40 | *some_vecdeque.get_mut(0).unwrap() = 1;
|
40 | *some_vecdeque.get_mut(0).unwrap() = 1;
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `(&mut some_vecdeque[0])`
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&mut some_vecdeque[0]`
|
||||||
|
|
||||||
error: called `.get().unwrap()` on a Vec. Using `[]` is more clear and more concise
|
error: called `.get().unwrap()` on a Vec. Using `[]` is more clear and more concise
|
||||||
--> $DIR/get_unwrap.rs:48:17
|
--> $DIR/get_unwrap.rs:48:17
|
||||||
|
|
|
|
||||||
48 | let _ = some_vec.get(0..1).unwrap().to_vec();
|
48 | let _ = some_vec.get(0..1).unwrap().to_vec();
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `(&some_vec[0..1])`
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `some_vec[0..1]`
|
||||||
|
|
||||||
error: called `.get_mut().unwrap()` on a Vec. Using `[]` is more clear and more concise
|
error: called `.get_mut().unwrap()` on a Vec. Using `[]` is more clear and more concise
|
||||||
--> $DIR/get_unwrap.rs:49:17
|
--> $DIR/get_unwrap.rs:49:17
|
||||||
|
|
|
|
||||||
49 | let _ = some_vec.get_mut(0..1).unwrap().to_vec();
|
49 | let _ = some_vec.get_mut(0..1).unwrap().to_vec();
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `(&mut some_vec[0..1])`
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `some_vec[0..1]`
|
||||||
|
|
||||||
error: aborting due to 12 previous errors
|
error: aborting due to 12 previous errors
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue