1 #![warn(clippy::collapsible_match)]
3 clippy::needless_return,
6 clippy::equatable_if_let
9 fn lint_cases(opt_opt: Option<Option<u32>>, res_opt: Result<Option<u32>, String>) {
10 // match without block
12 Ok(val) => match val {
21 Ok(val) => match val {
29 if let Ok(val) = res_opt {
30 if let Some(n) = val {
35 // if let else, if let else
36 if let Ok(val) = res_opt {
37 if let Some(n) = val {
47 if let Ok(val) = res_opt {
57 if let Some(n) = val {
65 if let Ok(val) = res_opt {
77 if let Some(n) = val {
86 // None in inner match same as outer wild branch
88 Ok(val) => match val {
95 // None in outer match same as inner wild branch
97 Some(val) => match val {
105 fn negative_cases(res_opt: Result<Option<u32>, String>, res_res: Result<Result<u32, String>, String>) {
106 while let Some(x) = make() {
111 // no wild pattern in outer match
113 Ok(val) => match val {
120 // inner branch is not wild or None
122 Ok(val) => match val {
129 // statement before inner match
141 // statement after inner match
153 // wild branches do not match
155 Ok(val) => match val {
165 // binding used in if guard
167 Ok(val) if val.is_some() => match val {
174 // binding used in inner match body
176 Ok(val) => match val {
177 Some(_) => take(val),
183 // if guard on inner match
186 Ok(val) => match val {
187 Some(n) if make() => foo(n),
193 Ok(val) => match val {
195 _ if make() => return,
201 // differing macro contexts
212 Ok(val) => mac!(val),
223 match make::<E<Option<u32>>>() {
224 E::A(val) | E::B(val) => match val {
230 match make::<Option<E<u32>>>() {
231 Some(val) => match val {
232 E::A(val) | E::B(val) => foo(val),
237 if let Ok(val) = res_opt {
238 if let Some(n) = val {
241 println!("{:?}", val);
245 let _: &dyn std::any::Any = match &Some(Some(1)) {
250 // else branch looks the same but the binding is different
259 fn foo<T, U>(t: T) -> U {