1 #![warn(clippy::or_fun_call)]
3 use std::collections::BTreeMap;
4 use std::collections::HashMap;
5 use std::time::Duration;
7 /// Checks implementation of the `OR_FUN_CALL` lint.
25 let with_enum = Some(Enum::A(1));
26 with_enum.unwrap_or(Enum::A(5));
28 let with_const_fn = Some(Duration::from_secs(1));
29 with_const_fn.unwrap_or(Duration::from_secs(5));
31 let with_constructor = Some(vec![1]);
32 with_constructor.unwrap_or(make());
34 let with_new = Some(vec![1]);
35 with_new.unwrap_or(Vec::new());
37 let with_const_args = Some(vec![1]);
38 with_const_args.unwrap_or(Vec::with_capacity(12));
40 let with_err: Result<_, ()> = Ok(vec![1]);
41 with_err.unwrap_or(make());
43 let with_err_args: Result<_, ()> = Ok(vec![1]);
44 with_err_args.unwrap_or(Vec::with_capacity(12));
46 let with_default_trait = Some(1);
47 with_default_trait.unwrap_or(Default::default());
49 let with_default_type = Some(1);
50 with_default_type.unwrap_or(u64::default());
52 let with_vec = Some(vec![1]);
53 with_vec.unwrap_or(vec![]);
55 // FIXME #944: ~|SUGGESTION with_vec.unwrap_or_else(|| vec![]);
57 let without_default = Some(Foo);
58 without_default.unwrap_or(Foo::new());
60 let mut map = HashMap::<u64, String>::new();
61 map.entry(42).or_insert(String::new());
63 let mut btree = BTreeMap::<u64, String>::new();
64 btree.entry(42).or_insert(String::new());
66 let stringy = Some(String::from(""));
67 let _ = stringy.unwrap_or("".to_owned());
71 let _ = opt.ok_or(format!("{} world.", hello));
75 struct Bar(String, Duration);
77 fn test_or_with_ctors() {
79 let opt_opt = Some(Some(1));
80 // we also test for const promotion, this makes sure we don't hit that
83 let _ = opt_opt.unwrap_or(Some(2));
84 let _ = opt_opt.unwrap_or(Some(two));
85 let _ = opt.ok_or(Some(2));
86 let _ = opt.ok_or(Some(two));
87 let _ = opt.ok_or(Foo(2));
88 let _ = opt.ok_or(Foo(two));
89 let _ = opt.or(Some(2));
90 let _ = opt.or(Some(two));
92 let _ = Some("a".to_string()).or(Some("b".to_string()));
94 let b = "b".to_string();
95 let _ = Some(Bar("a".to_string(), Duration::from_secs(1)))
96 .or(Some(Bar(b, Duration::from_secs(2))));