mirror of
https://github.com/rust-lang/rust-clippy
synced 2024-11-23 21:23:56 +00:00
Adding handling and tests for custom type with implemented expect method
This commit is contained in:
parent
fe8c9d5965
commit
1ead12c500
3 changed files with 63 additions and 37 deletions
|
@ -1006,11 +1006,13 @@ fn lint_expect_fun_call(cx: &LateContext, expr: &hir::Expr, method_span: Span, n
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
let self_ty = cx.tables.expr_ty(self_expr);
|
let self_type = cx.tables.expr_ty(self_expr);
|
||||||
let closure = match match_type(cx, self_ty, &paths::OPTION) {
|
let known_types = &[&paths::OPTION, &paths::RESULT];
|
||||||
true => "||",
|
|
||||||
false => "|_|",
|
// if not a known type, return early
|
||||||
};
|
if known_types.iter().all(|&k| !match_type(cx, self_type, k)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// don't lint for constant values
|
// don't lint for constant values
|
||||||
let owner_def = cx.tcx.hir.get_parent_did(arg.id);
|
let owner_def = cx.tcx.hir.get_parent_did(arg.id);
|
||||||
|
@ -1019,6 +1021,11 @@ fn lint_expect_fun_call(cx: &LateContext, expr: &hir::Expr, method_span: Span, n
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let closure = match match_type(cx, self_type, &paths::OPTION) {
|
||||||
|
true => "||",
|
||||||
|
false => "|_|",
|
||||||
|
};
|
||||||
|
|
||||||
let sugg: Cow<_> = snippet(cx, arg.span, "..");
|
let sugg: Cow<_> = snippet(cx, arg.span, "..");
|
||||||
let span_replace_word = method_span.with_hi(span.hi());
|
let span_replace_word = method_span.with_hi(span.hi());
|
||||||
|
|
||||||
|
|
|
@ -344,6 +344,16 @@ fn or_fun_call() {
|
||||||
|
|
||||||
/// Checks implementation of the `EXPECT_FUN_CALL` lint
|
/// Checks implementation of the `EXPECT_FUN_CALL` lint
|
||||||
fn expect_fun_call() {
|
fn expect_fun_call() {
|
||||||
|
struct Foo;
|
||||||
|
|
||||||
|
impl Foo {
|
||||||
|
fn new() -> Self { Foo }
|
||||||
|
|
||||||
|
fn expect(&self, msg: &str) {
|
||||||
|
panic!("{}", msg)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
let with_some = Some("value");
|
let with_some = Some("value");
|
||||||
with_some.expect("error");
|
with_some.expect("error");
|
||||||
|
|
||||||
|
@ -369,6 +379,15 @@ fn expect_fun_call() {
|
||||||
|
|
||||||
let with_err_and_as_str: Result<(), ()> = Err(());
|
let with_err_and_as_str: Result<(), ()> = Err(());
|
||||||
with_err_and_as_str.expect(format!("Error {}: fake error", error_code).as_str());
|
with_err_and_as_str.expect(format!("Error {}: fake error", error_code).as_str());
|
||||||
|
|
||||||
|
let with_dummy_type = Foo::new();
|
||||||
|
with_dummy_type.expect("another test string");
|
||||||
|
|
||||||
|
let with_dummy_type_and_format = Foo::new();
|
||||||
|
with_dummy_type_and_format.expect(&format!("Error {}: fake error", error_code));
|
||||||
|
|
||||||
|
let with_dummy_type_and_as_str = Foo::new();
|
||||||
|
with_dummy_type_and_as_str.expect(format!("Error {}: fake error", error_code).as_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Checks implementation of `ITER_NTH` lint
|
/// Checks implementation of `ITER_NTH` lint
|
||||||
|
|
|
@ -424,105 +424,105 @@ error: use of `unwrap_or` followed by a function call
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| "".to_owned())`
|
| ^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| "".to_owned())`
|
||||||
|
|
||||||
error: use of `expect` followed by a function call
|
error: use of `expect` followed by a function call
|
||||||
--> $DIR/methods.rs:355:26
|
--> $DIR/methods.rs:365:26
|
||||||
|
|
|
|
||||||
355 | with_none_and_format.expect(&format!("Error {}: fake error", error_code));
|
365 | with_none_and_format.expect(&format!("Error {}: fake error", error_code));
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| panic!(&format!("Error {}: fake error", error_code)))`
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| panic!(&format!("Error {}: fake error", error_code)))`
|
||||||
|
|
|
|
||||||
= note: `-D expect-fun-call` implied by `-D warnings`
|
= note: `-D expect-fun-call` implied by `-D warnings`
|
||||||
|
|
||||||
error: use of `expect` followed by a function call
|
error: use of `expect` followed by a function call
|
||||||
--> $DIR/methods.rs:358:26
|
--> $DIR/methods.rs:368:26
|
||||||
|
|
|
|
||||||
358 | with_none_and_as_str.expect(format!("Error {}: fake error", error_code).as_str());
|
368 | with_none_and_as_str.expect(format!("Error {}: fake error", error_code).as_str());
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| panic!(format!("Error {}: fake error", error_code).as_str()))`
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|| panic!(format!("Error {}: fake error", error_code).as_str()))`
|
||||||
|
|
||||||
error: use of `expect` followed by a function call
|
error: use of `expect` followed by a function call
|
||||||
--> $DIR/methods.rs:368:25
|
--> $DIR/methods.rs:378:25
|
||||||
|
|
|
|
||||||
368 | with_err_and_format.expect(&format!("Error {}: fake error", error_code));
|
378 | with_err_and_format.expect(&format!("Error {}: fake error", error_code));
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|_| panic!(&format!("Error {}: fake error", error_code)))`
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|_| panic!(&format!("Error {}: fake error", error_code)))`
|
||||||
|
|
||||||
error: use of `expect` followed by a function call
|
error: use of `expect` followed by a function call
|
||||||
--> $DIR/methods.rs:371:25
|
--> $DIR/methods.rs:381:25
|
||||||
|
|
|
|
||||||
371 | with_err_and_as_str.expect(format!("Error {}: fake error", error_code).as_str());
|
381 | with_err_and_as_str.expect(format!("Error {}: fake error", error_code).as_str());
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|_| panic!(format!("Error {}: fake error", error_code).as_str()))`
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `unwrap_or_else(|_| panic!(format!("Error {}: fake error", error_code).as_str()))`
|
||||||
|
|
||||||
error: called `.iter().nth()` on a Vec. Calling `.get()` is both faster and more readable
|
error: called `.iter().nth()` on a Vec. Calling `.get()` is both faster and more readable
|
||||||
--> $DIR/methods.rs:382:23
|
--> $DIR/methods.rs:401:23
|
||||||
|
|
|
|
||||||
382 | let bad_vec = some_vec.iter().nth(3);
|
401 | let bad_vec = some_vec.iter().nth(3);
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
= note: `-D iter-nth` implied by `-D warnings`
|
= note: `-D iter-nth` implied by `-D warnings`
|
||||||
|
|
||||||
error: called `.iter().nth()` on a slice. Calling `.get()` is both faster and more readable
|
error: called `.iter().nth()` on a slice. Calling `.get()` is both faster and more readable
|
||||||
--> $DIR/methods.rs:383:26
|
--> $DIR/methods.rs:402:26
|
||||||
|
|
|
|
||||||
383 | let bad_slice = &some_vec[..].iter().nth(3);
|
402 | let bad_slice = &some_vec[..].iter().nth(3);
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
error: called `.iter().nth()` on a slice. Calling `.get()` is both faster and more readable
|
error: called `.iter().nth()` on a slice. Calling `.get()` is both faster and more readable
|
||||||
--> $DIR/methods.rs:384:31
|
--> $DIR/methods.rs:403:31
|
||||||
|
|
|
|
||||||
384 | let bad_boxed_slice = boxed_slice.iter().nth(3);
|
403 | let bad_boxed_slice = boxed_slice.iter().nth(3);
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
error: called `.iter().nth()` on a VecDeque. Calling `.get()` is both faster and more readable
|
error: called `.iter().nth()` on a VecDeque. Calling `.get()` is both faster and more readable
|
||||||
--> $DIR/methods.rs:385:29
|
--> $DIR/methods.rs:404:29
|
||||||
|
|
|
|
||||||
385 | let bad_vec_deque = some_vec_deque.iter().nth(3);
|
404 | let bad_vec_deque = some_vec_deque.iter().nth(3);
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
error: called `.iter_mut().nth()` on a Vec. Calling `.get_mut()` is both faster and more readable
|
error: called `.iter_mut().nth()` on a Vec. Calling `.get_mut()` is both faster and more readable
|
||||||
--> $DIR/methods.rs:390:23
|
--> $DIR/methods.rs:409:23
|
||||||
|
|
|
|
||||||
390 | let bad_vec = some_vec.iter_mut().nth(3);
|
409 | let bad_vec = some_vec.iter_mut().nth(3);
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
error: called `.iter_mut().nth()` on a slice. Calling `.get_mut()` is both faster and more readable
|
error: called `.iter_mut().nth()` on a slice. Calling `.get_mut()` is both faster and more readable
|
||||||
--> $DIR/methods.rs:393:26
|
--> $DIR/methods.rs:412:26
|
||||||
|
|
|
|
||||||
393 | let bad_slice = &some_vec[..].iter_mut().nth(3);
|
412 | let bad_slice = &some_vec[..].iter_mut().nth(3);
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
error: called `.iter_mut().nth()` on a VecDeque. Calling `.get_mut()` is both faster and more readable
|
error: called `.iter_mut().nth()` on a VecDeque. Calling `.get_mut()` is both faster and more readable
|
||||||
--> $DIR/methods.rs:396:29
|
--> $DIR/methods.rs:415:29
|
||||||
|
|
|
|
||||||
396 | let bad_vec_deque = some_vec_deque.iter_mut().nth(3);
|
415 | let bad_vec_deque = some_vec_deque.iter_mut().nth(3);
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
error: called `skip(x).next()` on an iterator. This is more succinctly expressed by calling `nth(x)`
|
error: called `skip(x).next()` on an iterator. This is more succinctly expressed by calling `nth(x)`
|
||||||
--> $DIR/methods.rs:408:13
|
--> $DIR/methods.rs:427:13
|
||||||
|
|
|
|
||||||
408 | let _ = some_vec.iter().skip(42).next();
|
427 | let _ = some_vec.iter().skip(42).next();
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
= note: `-D iter-skip-next` implied by `-D warnings`
|
= note: `-D iter-skip-next` implied by `-D warnings`
|
||||||
|
|
||||||
error: called `skip(x).next()` on an iterator. This is more succinctly expressed by calling `nth(x)`
|
error: called `skip(x).next()` on an iterator. This is more succinctly expressed by calling `nth(x)`
|
||||||
--> $DIR/methods.rs:409:13
|
--> $DIR/methods.rs:428:13
|
||||||
|
|
|
|
||||||
409 | let _ = some_vec.iter().cycle().skip(42).next();
|
428 | let _ = some_vec.iter().cycle().skip(42).next();
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
error: called `skip(x).next()` on an iterator. This is more succinctly expressed by calling `nth(x)`
|
error: called `skip(x).next()` on an iterator. This is more succinctly expressed by calling `nth(x)`
|
||||||
--> $DIR/methods.rs:410:13
|
--> $DIR/methods.rs:429:13
|
||||||
|
|
|
|
||||||
410 | let _ = (1..10).skip(10).next();
|
429 | let _ = (1..10).skip(10).next();
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
error: called `skip(x).next()` on an iterator. This is more succinctly expressed by calling `nth(x)`
|
error: called `skip(x).next()` on an iterator. This is more succinctly expressed by calling `nth(x)`
|
||||||
--> $DIR/methods.rs:411:14
|
--> $DIR/methods.rs:430:14
|
||||||
|
|
|
|
||||||
411 | let _ = &some_vec[..].iter().skip(3).next();
|
430 | let _ = &some_vec[..].iter().skip(3).next();
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
error: used unwrap() on an Option value. If you don't want to handle the None case gracefully, consider using expect() to provide a better panic message
|
error: used unwrap() on an Option value. If you don't want to handle the None case gracefully, consider using expect() to provide a better panic message
|
||||||
--> $DIR/methods.rs:420:13
|
--> $DIR/methods.rs:439:13
|
||||||
|
|
|
|
||||||
420 | let _ = opt.unwrap();
|
439 | let _ = opt.unwrap();
|
||||||
| ^^^^^^^^^^^^
|
| ^^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
= note: `-D option-unwrap-used` implied by `-D warnings`
|
= note: `-D option-unwrap-used` implied by `-D warnings`
|
||||||
|
|
Loading…
Reference in a new issue