make [or_fun_call] and [unwrap_or_default] recursive.
This commit is contained in:
parent
0cbbee1e6e
commit
cc1bb8f57a
4 changed files with 183 additions and 47 deletions
|
|
@ -330,4 +330,39 @@ mod issue_10228 {
|
|||
}
|
||||
}
|
||||
|
||||
// issue #12973
|
||||
fn fn_call_in_nested_expr() {
|
||||
struct Foo {
|
||||
val: String,
|
||||
}
|
||||
|
||||
fn f() -> i32 {
|
||||
1
|
||||
}
|
||||
let opt: Option<i32> = Some(1);
|
||||
|
||||
//~v ERROR: use of `unwrap_or` followed by a function call
|
||||
let _ = opt.unwrap_or_else(f); // suggest `.unwrap_or_else(f)`
|
||||
//
|
||||
//~v ERROR: use of `unwrap_or` followed by a function call
|
||||
let _ = opt.unwrap_or_else(|| f() + 1); // suggest `.unwrap_or_else(|| f() + 1)`
|
||||
//
|
||||
//~v ERROR: use of `unwrap_or` followed by a function call
|
||||
let _ = opt.unwrap_or_else(|| {
|
||||
let x = f();
|
||||
x + 1
|
||||
});
|
||||
//~v ERROR: use of `map_or` followed by a function call
|
||||
let _ = opt.map_or_else(|| f() + 1, |v| v); // suggest `.map_or_else(|| f() + 1, |v| v)`
|
||||
//
|
||||
//~v ERROR: use of `unwrap_or` to construct default value
|
||||
let _ = opt.unwrap_or_default();
|
||||
|
||||
let opt_foo = Some(Foo {
|
||||
val: String::from("123"),
|
||||
});
|
||||
//~v ERROR: use of `unwrap_or` followed by a function call
|
||||
let _ = opt_foo.unwrap_or_else(|| Foo { val: String::default() });
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
|
|
|
|||
|
|
@ -330,4 +330,39 @@ mod issue_10228 {
|
|||
}
|
||||
}
|
||||
|
||||
// issue #12973
|
||||
fn fn_call_in_nested_expr() {
|
||||
struct Foo {
|
||||
val: String,
|
||||
}
|
||||
|
||||
fn f() -> i32 {
|
||||
1
|
||||
}
|
||||
let opt: Option<i32> = Some(1);
|
||||
|
||||
//~v ERROR: use of `unwrap_or` followed by a function call
|
||||
let _ = opt.unwrap_or({ f() }); // suggest `.unwrap_or_else(f)`
|
||||
//
|
||||
//~v ERROR: use of `unwrap_or` followed by a function call
|
||||
let _ = opt.unwrap_or(f() + 1); // suggest `.unwrap_or_else(|| f() + 1)`
|
||||
//
|
||||
//~v ERROR: use of `unwrap_or` followed by a function call
|
||||
let _ = opt.unwrap_or({
|
||||
let x = f();
|
||||
x + 1
|
||||
});
|
||||
//~v ERROR: use of `map_or` followed by a function call
|
||||
let _ = opt.map_or(f() + 1, |v| v); // suggest `.map_or_else(|| f() + 1, |v| v)`
|
||||
//
|
||||
//~v ERROR: use of `unwrap_or` to construct default value
|
||||
let _ = opt.unwrap_or({ i32::default() });
|
||||
|
||||
let opt_foo = Some(Foo {
|
||||
val: String::from("123"),
|
||||
});
|
||||
//~v ERROR: use of `unwrap_or` followed by a function call
|
||||
let _ = opt_foo.unwrap_or(Foo { val: String::default() });
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
|
|
|
|||
|
|
@ -196,5 +196,53 @@ error: use of `unwrap_or_else` to construct default value
|
|||
LL | let _ = stringy.unwrap_or_else(String::new);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `unwrap_or_default()`
|
||||
|
||||
error: aborting due to 32 previous errors
|
||||
error: use of `unwrap_or` followed by a function call
|
||||
--> tests/ui/or_fun_call.rs:345:17
|
||||
|
|
||||
LL | let _ = opt.unwrap_or({ f() }); // suggest `.unwrap_or_else(f)`
|
||||
| ^^^^^^^^^^^^^^^^^^ help: try: `unwrap_or_else(f)`
|
||||
|
||||
error: use of `unwrap_or` followed by a function call
|
||||
--> tests/ui/or_fun_call.rs:348:17
|
||||
|
|
||||
LL | let _ = opt.unwrap_or(f() + 1); // suggest `.unwrap_or_else(|| f() + 1)`
|
||||
| ^^^^^^^^^^^^^^^^^^ help: try: `unwrap_or_else(|| f() + 1)`
|
||||
|
||||
error: use of `unwrap_or` followed by a function call
|
||||
--> tests/ui/or_fun_call.rs:351:17
|
||||
|
|
||||
LL | let _ = opt.unwrap_or({
|
||||
| _________________^
|
||||
LL | | let x = f();
|
||||
LL | | x + 1
|
||||
LL | | });
|
||||
| |______^
|
||||
|
|
||||
help: try
|
||||
|
|
||||
LL ~ let _ = opt.unwrap_or_else(|| {
|
||||
LL + let x = f();
|
||||
LL + x + 1
|
||||
LL ~ });
|
||||
|
|
||||
|
||||
error: use of `map_or` followed by a function call
|
||||
--> tests/ui/or_fun_call.rs:356:17
|
||||
|
|
||||
LL | let _ = opt.map_or(f() + 1, |v| v); // suggest `.map_or_else(|| f() + 1, |v| v)`
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^ help: try: `map_or_else(|| f() + 1, |v| v)`
|
||||
|
||||
error: use of `unwrap_or` to construct default value
|
||||
--> tests/ui/or_fun_call.rs:359:17
|
||||
|
|
||||
LL | let _ = opt.unwrap_or({ i32::default() });
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `unwrap_or_default()`
|
||||
|
||||
error: use of `unwrap_or` followed by a function call
|
||||
--> tests/ui/or_fun_call.rs:365:21
|
||||
|
|
||||
LL | let _ = opt_foo.unwrap_or(Foo { val: String::default() });
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `unwrap_or_else(|| Foo { val: String::default() })`
|
||||
|
||||
error: aborting due to 38 previous errors
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue