mirror of
https://github.com/rust-lang/rust-clippy
synced 2024-11-23 21:23:56 +00:00
Split up some single_match UI tests
This moves only the single_match tests over to the new file.
This commit is contained in:
parent
62d595b3dc
commit
641f0685d0
4 changed files with 321 additions and 314 deletions
|
@ -6,11 +6,6 @@
|
||||||
#![allow(unused, if_let_redundant_pattern_matching)]
|
#![allow(unused, if_let_redundant_pattern_matching)]
|
||||||
#![warn(single_match_else, match_same_arms)]
|
#![warn(single_match_else, match_same_arms)]
|
||||||
|
|
||||||
use std::borrow::Cow;
|
|
||||||
|
|
||||||
enum Foo { Bar, Baz(u8) }
|
|
||||||
use Foo::*;
|
|
||||||
|
|
||||||
enum ExprNode {
|
enum ExprNode {
|
||||||
ExprAddrOf,
|
ExprAddrOf,
|
||||||
Butterflies,
|
Butterflies,
|
||||||
|
@ -29,67 +24,6 @@ fn unwrap_addr() -> Option<&'static ExprNode> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn single_match(){
|
|
||||||
let x = Some(1u8);
|
|
||||||
|
|
||||||
match x {
|
|
||||||
Some(y) => { println!("{:?}", y); }
|
|
||||||
_ => ()
|
|
||||||
};
|
|
||||||
|
|
||||||
let z = (1u8,1u8);
|
|
||||||
match z {
|
|
||||||
(2...3, 7...9) => dummy(),
|
|
||||||
_ => {}
|
|
||||||
};
|
|
||||||
|
|
||||||
// Not linted (pattern guards used)
|
|
||||||
match x {
|
|
||||||
Some(y) if y == 0 => println!("{:?}", y),
|
|
||||||
_ => ()
|
|
||||||
}
|
|
||||||
|
|
||||||
// Not linted (no block with statements in the single arm)
|
|
||||||
match z {
|
|
||||||
(2...3, 7...9) => println!("{:?}", z),
|
|
||||||
_ => println!("nope"),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn single_match_know_enum() {
|
|
||||||
let x = Some(1u8);
|
|
||||||
let y : Result<_, i8> = Ok(1i8);
|
|
||||||
|
|
||||||
match x {
|
|
||||||
Some(y) => dummy(),
|
|
||||||
None => ()
|
|
||||||
};
|
|
||||||
|
|
||||||
match y {
|
|
||||||
Ok(y) => dummy(),
|
|
||||||
Err(..) => ()
|
|
||||||
};
|
|
||||||
|
|
||||||
let c = Cow::Borrowed("");
|
|
||||||
|
|
||||||
match c {
|
|
||||||
Cow::Borrowed(..) => dummy(),
|
|
||||||
Cow::Owned(..) => (),
|
|
||||||
};
|
|
||||||
|
|
||||||
let z = Foo::Bar;
|
|
||||||
// no warning
|
|
||||||
match z {
|
|
||||||
Bar => println!("42"),
|
|
||||||
Baz(_) => (),
|
|
||||||
}
|
|
||||||
|
|
||||||
match z {
|
|
||||||
Baz(_) => println!("42"),
|
|
||||||
Bar => (),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn match_bool() {
|
fn match_bool() {
|
||||||
let test: bool = true;
|
let test: bool = true;
|
||||||
|
|
||||||
|
|
|
@ -1,473 +1,426 @@
|
||||||
error: you seem to be trying to use match for destructuring a single pattern. Consider using `if let`
|
error: you seem to be trying to use match for destructuring a single pattern. Consider using `if let`
|
||||||
--> $DIR/matches.rs:26:5
|
--> $DIR/matches.rs:21:5
|
||||||
|
|
|
|
||||||
26 | / match ExprNode::Butterflies {
|
21 | / match ExprNode::Butterflies {
|
||||||
27 | | ExprNode::ExprAddrOf => Some(&NODE),
|
22 | | ExprNode::ExprAddrOf => Some(&NODE),
|
||||||
28 | | _ => { let x = 5; None },
|
23 | | _ => { let x = 5; None },
|
||||||
29 | | }
|
24 | | }
|
||||||
| |_____^ help: try this: `if let ExprNode::ExprAddrOf = ExprNode::Butterflies { Some(&NODE) } else { let x = 5; None }`
|
| |_____^ help: try this: `if let ExprNode::ExprAddrOf = ExprNode::Butterflies { Some(&NODE) } else { let x = 5; None }`
|
||||||
|
|
|
|
||||||
= note: `-D single-match-else` implied by `-D warnings`
|
= note: `-D single-match-else` implied by `-D warnings`
|
||||||
|
|
||||||
error: you seem to be trying to use match for destructuring a single pattern. Consider using `if let`
|
|
||||||
--> $DIR/matches.rs:35:5
|
|
||||||
|
|
|
||||||
35 | / match x {
|
|
||||||
36 | | Some(y) => { println!("{:?}", y); }
|
|
||||||
37 | | _ => ()
|
|
||||||
38 | | };
|
|
||||||
| |_____^ help: try this: `if let Some(y) = x { println!("{:?}", y); }`
|
|
||||||
|
|
|
||||||
= note: `-D single-match` implied by `-D warnings`
|
|
||||||
|
|
||||||
error: you seem to be trying to use match for destructuring a single pattern. Consider using `if let`
|
|
||||||
--> $DIR/matches.rs:41:5
|
|
||||||
|
|
|
||||||
41 | / match z {
|
|
||||||
42 | | (2...3, 7...9) => dummy(),
|
|
||||||
43 | | _ => {}
|
|
||||||
44 | | };
|
|
||||||
| |_____^ help: try this: `if let (2...3, 7...9) = z { dummy() }`
|
|
||||||
|
|
||||||
error: you seem to be trying to use match for destructuring a single pattern. Consider using `if let`
|
|
||||||
--> $DIR/matches.rs:63:5
|
|
||||||
|
|
|
||||||
63 | / match x {
|
|
||||||
64 | | Some(y) => dummy(),
|
|
||||||
65 | | None => ()
|
|
||||||
66 | | };
|
|
||||||
| |_____^ help: try this: `if let Some(y) = x { dummy() }`
|
|
||||||
|
|
||||||
error: you seem to be trying to use match for destructuring a single pattern. Consider using `if let`
|
|
||||||
--> $DIR/matches.rs:68:5
|
|
||||||
|
|
|
||||||
68 | / match y {
|
|
||||||
69 | | Ok(y) => dummy(),
|
|
||||||
70 | | Err(..) => ()
|
|
||||||
71 | | };
|
|
||||||
| |_____^ help: try this: `if let Ok(y) = y { dummy() }`
|
|
||||||
|
|
||||||
error: you seem to be trying to use match for destructuring a single pattern. Consider using `if let`
|
|
||||||
--> $DIR/matches.rs:75:5
|
|
||||||
|
|
|
||||||
75 | / match c {
|
|
||||||
76 | | Cow::Borrowed(..) => dummy(),
|
|
||||||
77 | | Cow::Owned(..) => (),
|
|
||||||
78 | | };
|
|
||||||
| |_____^ help: try this: `if let Cow::Borrowed(..) = c { dummy() }`
|
|
||||||
|
|
||||||
error: this boolean expression can be simplified
|
error: this boolean expression can be simplified
|
||||||
--> $DIR/matches.rs:117:11
|
--> $DIR/matches.rs:51:11
|
||||||
|
|
|
|
||||||
117 | match test && test {
|
51 | match test && test {
|
||||||
| ^^^^^^^^^^^^ help: try: `test`
|
| ^^^^^^^^^^^^ help: try: `test`
|
||||||
|
|
|
|
||||||
= note: `-D nonminimal-bool` implied by `-D warnings`
|
= note: `-D nonminimal-bool` implied by `-D warnings`
|
||||||
|
|
||||||
error: you seem to be trying to match on a boolean expression
|
error: you seem to be trying to match on a boolean expression
|
||||||
--> $DIR/matches.rs:96:5
|
--> $DIR/matches.rs:30:5
|
||||||
|
|
|
|
||||||
96 | / match test {
|
30 | / match test {
|
||||||
97 | | true => 0,
|
31 | | true => 0,
|
||||||
98 | | false => 42,
|
32 | | false => 42,
|
||||||
99 | | };
|
33 | | };
|
||||||
| |_____^ help: consider using an if/else expression: `if test { 0 } else { 42 }`
|
| |_____^ help: consider using an if/else expression: `if test { 0 } else { 42 }`
|
||||||
|
|
|
|
||||||
= note: `-D match-bool` implied by `-D warnings`
|
= note: `-D match-bool` implied by `-D warnings`
|
||||||
|
|
||||||
error: you seem to be trying to match on a boolean expression
|
error: you seem to be trying to match on a boolean expression
|
||||||
--> $DIR/matches.rs:102:5
|
--> $DIR/matches.rs:36:5
|
||||||
|
|
|
|
||||||
102 | / match option == 1 {
|
36 | / match option == 1 {
|
||||||
103 | | true => 1,
|
37 | | true => 1,
|
||||||
104 | | false => 0,
|
38 | | false => 0,
|
||||||
105 | | };
|
39 | | };
|
||||||
| |_____^ help: consider using an if/else expression: `if option == 1 { 1 } else { 0 }`
|
| |_____^ help: consider using an if/else expression: `if option == 1 { 1 } else { 0 }`
|
||||||
|
|
||||||
error: you seem to be trying to match on a boolean expression
|
error: you seem to be trying to match on a boolean expression
|
||||||
--> $DIR/matches.rs:107:5
|
--> $DIR/matches.rs:41:5
|
||||||
|
|
|
|
||||||
107 | / match test {
|
41 | / match test {
|
||||||
108 | | true => (),
|
42 | | true => (),
|
||||||
109 | | false => { println!("Noooo!"); }
|
43 | | false => { println!("Noooo!"); }
|
||||||
110 | | };
|
44 | | };
|
||||||
| |_____^ help: consider using an if/else expression: `if !test { println!("Noooo!"); }`
|
| |_____^ help: consider using an if/else expression: `if !test { println!("Noooo!"); }`
|
||||||
|
|
||||||
error: you seem to be trying to match on a boolean expression
|
error: you seem to be trying to match on a boolean expression
|
||||||
--> $DIR/matches.rs:112:5
|
--> $DIR/matches.rs:46:5
|
||||||
|
|
|
|
||||||
112 | / match test {
|
46 | / match test {
|
||||||
113 | | false => { println!("Noooo!"); }
|
47 | | false => { println!("Noooo!"); }
|
||||||
114 | | _ => (),
|
48 | | _ => (),
|
||||||
115 | | };
|
49 | | };
|
||||||
| |_____^ help: consider using an if/else expression: `if !test { println!("Noooo!"); }`
|
| |_____^ help: consider using an if/else expression: `if !test { println!("Noooo!"); }`
|
||||||
|
|
||||||
error: you seem to be trying to match on a boolean expression
|
error: you seem to be trying to match on a boolean expression
|
||||||
--> $DIR/matches.rs:117:5
|
--> $DIR/matches.rs:51:5
|
||||||
|
|
|
|
||||||
117 | / match test && test {
|
51 | / match test && test {
|
||||||
118 | | false => { println!("Noooo!"); }
|
52 | | false => { println!("Noooo!"); }
|
||||||
119 | | _ => (),
|
53 | | _ => (),
|
||||||
120 | | };
|
54 | | };
|
||||||
| |_____^ help: consider using an if/else expression: `if !(test && test) { println!("Noooo!"); }`
|
| |_____^ help: consider using an if/else expression: `if !(test && test) { println!("Noooo!"); }`
|
||||||
|
|
||||||
error: equal expressions as operands to `&&`
|
error: equal expressions as operands to `&&`
|
||||||
--> $DIR/matches.rs:117:11
|
--> $DIR/matches.rs:51:11
|
||||||
|
|
|
|
||||||
117 | match test && test {
|
51 | match test && test {
|
||||||
| ^^^^^^^^^^^^
|
| ^^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
= note: `-D eq-op` implied by `-D warnings`
|
= note: `-D eq-op` implied by `-D warnings`
|
||||||
|
|
||||||
error: you seem to be trying to match on a boolean expression
|
error: you seem to be trying to match on a boolean expression
|
||||||
--> $DIR/matches.rs:122:5
|
--> $DIR/matches.rs:56:5
|
||||||
|
|
|
|
||||||
122 | / match test {
|
56 | / match test {
|
||||||
123 | | false => { println!("Noooo!"); }
|
57 | | false => { println!("Noooo!"); }
|
||||||
124 | | true => { println!("Yes!"); }
|
58 | | true => { println!("Yes!"); }
|
||||||
125 | | };
|
59 | | };
|
||||||
| |_____^ help: consider using an if/else expression: `if test { println!("Yes!"); } else { println!("Noooo!"); }`
|
| |_____^ help: consider using an if/else expression: `if test { println!("Yes!"); } else { println!("Noooo!"); }`
|
||||||
|
|
||||||
error: you don't need to add `&` to all patterns
|
error: you don't need to add `&` to all patterns
|
||||||
--> $DIR/matches.rs:138:9
|
--> $DIR/matches.rs:72:9
|
||||||
|
|
|
|
||||||
138 | / match v {
|
72 | / match v {
|
||||||
139 | | &Some(v) => println!("{:?}", v),
|
73 | | &Some(v) => println!("{:?}", v),
|
||||||
140 | | &None => println!("none"),
|
74 | | &None => println!("none"),
|
||||||
141 | | }
|
75 | | }
|
||||||
| |_________^
|
| |_________^
|
||||||
|
|
|
|
||||||
= note: `-D match-ref-pats` implied by `-D warnings`
|
= note: `-D match-ref-pats` implied by `-D warnings`
|
||||||
help: instead of prefixing all patterns with `&`, you can dereference the expression
|
help: instead of prefixing all patterns with `&`, you can dereference the expression
|
||||||
|
|
|
|
||||||
138 | match *v {
|
72 | match *v {
|
||||||
139 | Some(v) => println!("{:?}", v),
|
73 | Some(v) => println!("{:?}", v),
|
||||||
140 | None => println!("none"),
|
74 | None => println!("none"),
|
||||||
|
|
|
|
||||||
|
|
||||||
error: you don't need to add `&` to all patterns
|
error: you don't need to add `&` to all patterns
|
||||||
--> $DIR/matches.rs:148:5
|
--> $DIR/matches.rs:82:5
|
||||||
|
|
|
||||||
|
82 | / match tup {
|
||||||
|
83 | | &(v, 1) => println!("{}", v),
|
||||||
|
84 | | _ => println!("none"),
|
||||||
|
85 | | }
|
||||||
|
| |_____^
|
||||||
|
help: instead of prefixing all patterns with `&`, you can dereference the expression
|
||||||
|
|
|
||||||
|
82 | match *tup {
|
||||||
|
83 | (v, 1) => println!("{}", v),
|
||||||
|
|
|
||||||
|
|
||||||
|
error: you don't need to add `&` to both the expression and the patterns
|
||||||
|
--> $DIR/matches.rs:88:5
|
||||||
|
|
|
||||||
|
88 | / match &w {
|
||||||
|
89 | | &Some(v) => println!("{:?}", v),
|
||||||
|
90 | | &None => println!("none"),
|
||||||
|
91 | | }
|
||||||
|
| |_____^
|
||||||
|
help: try
|
||||||
|
|
|
||||||
|
88 | match w {
|
||||||
|
89 | Some(v) => println!("{:?}", v),
|
||||||
|
90 | None => println!("none"),
|
||||||
|
|
|
||||||
|
|
||||||
|
error: you don't need to add `&` to all patterns
|
||||||
|
--> $DIR/matches.rs:99:5
|
||||||
|
|
|
|
||||||
148 | / match tup {
|
99 | / if let &None = a {
|
||||||
149 | | &(v, 1) => println!("{}", v),
|
100 | | println!("none");
|
||||||
150 | | _ => println!("none"),
|
101 | | }
|
||||||
151 | | }
|
|
||||||
| |_____^
|
| |_____^
|
||||||
help: instead of prefixing all patterns with `&`, you can dereference the expression
|
help: instead of prefixing all patterns with `&`, you can dereference the expression
|
||||||
|
|
|
|
||||||
148 | match *tup {
|
99 | if let None = *a {
|
||||||
149 | (v, 1) => println!("{}", v),
|
|
||||||
|
|
|
|
||||||
|
|
||||||
error: you don't need to add `&` to both the expression and the patterns
|
error: you don't need to add `&` to both the expression and the patterns
|
||||||
--> $DIR/matches.rs:154:5
|
--> $DIR/matches.rs:104:5
|
||||||
|
|
|
|
||||||
154 | / match &w {
|
104 | / if let &None = &b {
|
||||||
155 | | &Some(v) => println!("{:?}", v),
|
105 | | println!("none");
|
||||||
156 | | &None => println!("none"),
|
106 | | }
|
||||||
157 | | }
|
|
||||||
| |_____^
|
| |_____^
|
||||||
help: try
|
help: try
|
||||||
|
|
|
|
||||||
154 | match w {
|
104 | if let None = b {
|
||||||
155 | Some(v) => println!("{:?}", v),
|
|
||||||
156 | None => println!("none"),
|
|
||||||
|
|
|
||||||
|
|
||||||
error: you don't need to add `&` to all patterns
|
|
||||||
--> $DIR/matches.rs:165:5
|
|
||||||
|
|
|
||||||
165 | / if let &None = a {
|
|
||||||
166 | | println!("none");
|
|
||||||
167 | | }
|
|
||||||
| |_____^
|
|
||||||
help: instead of prefixing all patterns with `&`, you can dereference the expression
|
|
||||||
|
|
|
||||||
165 | if let None = *a {
|
|
||||||
|
|
|
||||||
|
|
||||||
error: you don't need to add `&` to both the expression and the patterns
|
|
||||||
--> $DIR/matches.rs:170:5
|
|
||||||
|
|
|
||||||
170 | / if let &None = &b {
|
|
||||||
171 | | println!("none");
|
|
||||||
172 | | }
|
|
||||||
| |_____^
|
|
||||||
help: try
|
|
||||||
|
|
|
||||||
170 | if let None = b {
|
|
||||||
|
|
|
|
||||||
|
|
||||||
error: some ranges overlap
|
error: some ranges overlap
|
||||||
--> $DIR/matches.rs:179:9
|
--> $DIR/matches.rs:113:9
|
||||||
|
|
|
|
||||||
179 | 0 ... 10 => println!("0 ... 10"),
|
113 | 0 ... 10 => println!("0 ... 10"),
|
||||||
| ^^^^^^^^
|
| ^^^^^^^^
|
||||||
|
|
|
|
||||||
= note: `-D match-overlapping-arm` implied by `-D warnings`
|
= note: `-D match-overlapping-arm` implied by `-D warnings`
|
||||||
note: overlaps with this
|
note: overlaps with this
|
||||||
--> $DIR/matches.rs:180:9
|
--> $DIR/matches.rs:114:9
|
||||||
|
|
|
|
||||||
180 | 0 ... 11 => println!("0 ... 11"),
|
114 | 0 ... 11 => println!("0 ... 11"),
|
||||||
| ^^^^^^^^
|
| ^^^^^^^^
|
||||||
|
|
||||||
error: some ranges overlap
|
error: some ranges overlap
|
||||||
--> $DIR/matches.rs:185:9
|
--> $DIR/matches.rs:119:9
|
||||||
|
|
|
|
||||||
185 | 0 ... 5 => println!("0 ... 5"),
|
119 | 0 ... 5 => println!("0 ... 5"),
|
||||||
| ^^^^^^^
|
| ^^^^^^^
|
||||||
|
|
|
|
||||||
note: overlaps with this
|
note: overlaps with this
|
||||||
--> $DIR/matches.rs:187:9
|
--> $DIR/matches.rs:121:9
|
||||||
|
|
|
|
||||||
187 | FOO ... 11 => println!("0 ... 11"),
|
121 | FOO ... 11 => println!("0 ... 11"),
|
||||||
| ^^^^^^^^^^
|
| ^^^^^^^^^^
|
||||||
|
|
||||||
error: some ranges overlap
|
error: some ranges overlap
|
||||||
--> $DIR/matches.rs:193:9
|
--> $DIR/matches.rs:127:9
|
||||||
|
|
|
|
||||||
193 | 0 ... 5 => println!("0 ... 5"),
|
127 | 0 ... 5 => println!("0 ... 5"),
|
||||||
| ^^^^^^^
|
| ^^^^^^^
|
||||||
|
|
|
|
||||||
note: overlaps with this
|
note: overlaps with this
|
||||||
--> $DIR/matches.rs:192:9
|
--> $DIR/matches.rs:126:9
|
||||||
|
|
|
|
||||||
192 | 2 => println!("2"),
|
126 | 2 => println!("2"),
|
||||||
| ^
|
| ^
|
||||||
|
|
||||||
error: some ranges overlap
|
error: some ranges overlap
|
||||||
--> $DIR/matches.rs:199:9
|
--> $DIR/matches.rs:133:9
|
||||||
|
|
|
|
||||||
199 | 0 ... 2 => println!("0 ... 2"),
|
133 | 0 ... 2 => println!("0 ... 2"),
|
||||||
| ^^^^^^^
|
| ^^^^^^^
|
||||||
|
|
|
|
||||||
note: overlaps with this
|
note: overlaps with this
|
||||||
--> $DIR/matches.rs:198:9
|
--> $DIR/matches.rs:132:9
|
||||||
|
|
|
|
||||||
198 | 2 => println!("2"),
|
132 | 2 => println!("2"),
|
||||||
| ^
|
| ^
|
||||||
|
|
||||||
error: some ranges overlap
|
error: some ranges overlap
|
||||||
--> $DIR/matches.rs:222:9
|
--> $DIR/matches.rs:156:9
|
||||||
|
|
|
|
||||||
222 | 0 .. 11 => println!("0 .. 11"),
|
156 | 0 .. 11 => println!("0 .. 11"),
|
||||||
| ^^^^^^^
|
| ^^^^^^^
|
||||||
|
|
|
|
||||||
note: overlaps with this
|
note: overlaps with this
|
||||||
--> $DIR/matches.rs:223:9
|
--> $DIR/matches.rs:157:9
|
||||||
|
|
|
|
||||||
223 | 0 ... 11 => println!("0 ... 11"),
|
157 | 0 ... 11 => println!("0 ... 11"),
|
||||||
| ^^^^^^^^
|
| ^^^^^^^^
|
||||||
|
|
||||||
error: Err(_) will match all errors, maybe not a good idea
|
error: Err(_) will match all errors, maybe not a good idea
|
||||||
--> $DIR/matches.rs:240:9
|
--> $DIR/matches.rs:174:9
|
||||||
|
|
|
|
||||||
240 | Err(_) => panic!("err")
|
174 | Err(_) => panic!("err")
|
||||||
| ^^^^^^
|
| ^^^^^^
|
||||||
|
|
|
|
||||||
= note: `-D match-wild-err-arm` implied by `-D warnings`
|
= note: `-D match-wild-err-arm` implied by `-D warnings`
|
||||||
= note: to remove this warning, match each error seperately or use unreachable macro
|
= note: to remove this warning, match each error seperately or use unreachable macro
|
||||||
|
|
||||||
error: this `match` has identical arm bodies
|
error: this `match` has identical arm bodies
|
||||||
--> $DIR/matches.rs:239:18
|
--> $DIR/matches.rs:173:18
|
||||||
|
|
|
|
||||||
239 | Ok(_) => println!("ok"),
|
173 | Ok(_) => println!("ok"),
|
||||||
| ^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
= note: `-D match-same-arms` implied by `-D warnings`
|
= note: `-D match-same-arms` implied by `-D warnings`
|
||||||
note: same as this
|
note: same as this
|
||||||
--> $DIR/matches.rs:238:18
|
--> $DIR/matches.rs:172:18
|
||||||
|
|
|
|
||||||
238 | Ok(3) => println!("ok"),
|
172 | Ok(3) => println!("ok"),
|
||||||
| ^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^
|
||||||
note: consider refactoring into `Ok(3) | Ok(_)`
|
note: consider refactoring into `Ok(3) | Ok(_)`
|
||||||
--> $DIR/matches.rs:238:18
|
--> $DIR/matches.rs:172:18
|
||||||
|
|
|
|
||||||
238 | Ok(3) => println!("ok"),
|
172 | Ok(3) => println!("ok"),
|
||||||
| ^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^
|
||||||
= note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info)
|
= note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info)
|
||||||
|
|
||||||
error: Err(_) will match all errors, maybe not a good idea
|
error: Err(_) will match all errors, maybe not a good idea
|
||||||
--> $DIR/matches.rs:246:9
|
--> $DIR/matches.rs:180:9
|
||||||
|
|
|
|
||||||
246 | Err(_) => {panic!()}
|
180 | Err(_) => {panic!()}
|
||||||
| ^^^^^^
|
| ^^^^^^
|
||||||
|
|
|
|
||||||
= note: to remove this warning, match each error seperately or use unreachable macro
|
= note: to remove this warning, match each error seperately or use unreachable macro
|
||||||
|
|
||||||
error: this `match` has identical arm bodies
|
error: this `match` has identical arm bodies
|
||||||
--> $DIR/matches.rs:245:18
|
--> $DIR/matches.rs:179:18
|
||||||
|
|
|
|
||||||
245 | Ok(_) => println!("ok"),
|
179 | Ok(_) => println!("ok"),
|
||||||
| ^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
note: same as this
|
note: same as this
|
||||||
--> $DIR/matches.rs:244:18
|
--> $DIR/matches.rs:178:18
|
||||||
|
|
|
|
||||||
244 | Ok(3) => println!("ok"),
|
178 | Ok(3) => println!("ok"),
|
||||||
| ^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^
|
||||||
note: consider refactoring into `Ok(3) | Ok(_)`
|
note: consider refactoring into `Ok(3) | Ok(_)`
|
||||||
--> $DIR/matches.rs:244:18
|
--> $DIR/matches.rs:178:18
|
||||||
|
|
|
|
||||||
244 | Ok(3) => println!("ok"),
|
178 | Ok(3) => println!("ok"),
|
||||||
| ^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^
|
||||||
= note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info)
|
= note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info)
|
||||||
|
|
||||||
error: Err(_) will match all errors, maybe not a good idea
|
error: Err(_) will match all errors, maybe not a good idea
|
||||||
--> $DIR/matches.rs:252:9
|
--> $DIR/matches.rs:186:9
|
||||||
|
|
|
|
||||||
252 | Err(_) => {panic!();}
|
186 | Err(_) => {panic!();}
|
||||||
| ^^^^^^
|
| ^^^^^^
|
||||||
|
|
|
|
||||||
= note: to remove this warning, match each error seperately or use unreachable macro
|
= note: to remove this warning, match each error seperately or use unreachable macro
|
||||||
|
|
||||||
error: this `match` has identical arm bodies
|
error: this `match` has identical arm bodies
|
||||||
--> $DIR/matches.rs:251:18
|
--> $DIR/matches.rs:185:18
|
||||||
|
|
|
|
||||||
251 | Ok(_) => println!("ok"),
|
185 | Ok(_) => println!("ok"),
|
||||||
| ^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
note: same as this
|
note: same as this
|
||||||
--> $DIR/matches.rs:250:18
|
--> $DIR/matches.rs:184:18
|
||||||
|
|
|
|
||||||
250 | Ok(3) => println!("ok"),
|
184 | Ok(3) => println!("ok"),
|
||||||
| ^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^
|
||||||
note: consider refactoring into `Ok(3) | Ok(_)`
|
note: consider refactoring into `Ok(3) | Ok(_)`
|
||||||
--> $DIR/matches.rs:250:18
|
--> $DIR/matches.rs:184:18
|
||||||
|
|
|
|
||||||
250 | Ok(3) => println!("ok"),
|
184 | Ok(3) => println!("ok"),
|
||||||
| ^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^
|
||||||
= note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info)
|
= note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info)
|
||||||
|
|
||||||
error: this `match` has identical arm bodies
|
error: this `match` has identical arm bodies
|
||||||
--> $DIR/matches.rs:258:18
|
--> $DIR/matches.rs:192:18
|
||||||
|
|
|
|
||||||
258 | Ok(_) => println!("ok"),
|
192 | Ok(_) => println!("ok"),
|
||||||
| ^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
note: same as this
|
note: same as this
|
||||||
--> $DIR/matches.rs:257:18
|
--> $DIR/matches.rs:191:18
|
||||||
|
|
|
|
||||||
257 | Ok(3) => println!("ok"),
|
191 | Ok(3) => println!("ok"),
|
||||||
| ^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^
|
||||||
note: consider refactoring into `Ok(3) | Ok(_)`
|
note: consider refactoring into `Ok(3) | Ok(_)`
|
||||||
--> $DIR/matches.rs:257:18
|
--> $DIR/matches.rs:191:18
|
||||||
|
|
|
|
||||||
257 | Ok(3) => println!("ok"),
|
191 | Ok(3) => println!("ok"),
|
||||||
| ^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^
|
||||||
= note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info)
|
= note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info)
|
||||||
|
|
||||||
error: this `match` has identical arm bodies
|
error: this `match` has identical arm bodies
|
||||||
--> $DIR/matches.rs:265:18
|
--> $DIR/matches.rs:199:18
|
||||||
|
|
|
|
||||||
265 | Ok(_) => println!("ok"),
|
199 | Ok(_) => println!("ok"),
|
||||||
| ^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
note: same as this
|
note: same as this
|
||||||
--> $DIR/matches.rs:264:18
|
--> $DIR/matches.rs:198:18
|
||||||
|
|
|
|
||||||
264 | Ok(3) => println!("ok"),
|
198 | Ok(3) => println!("ok"),
|
||||||
| ^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^
|
||||||
note: consider refactoring into `Ok(3) | Ok(_)`
|
note: consider refactoring into `Ok(3) | Ok(_)`
|
||||||
--> $DIR/matches.rs:264:18
|
--> $DIR/matches.rs:198:18
|
||||||
|
|
|
|
||||||
264 | Ok(3) => println!("ok"),
|
198 | Ok(3) => println!("ok"),
|
||||||
| ^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^
|
||||||
= note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info)
|
= note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info)
|
||||||
|
|
||||||
error: this `match` has identical arm bodies
|
error: this `match` has identical arm bodies
|
||||||
--> $DIR/matches.rs:271:18
|
--> $DIR/matches.rs:205:18
|
||||||
|
|
|
|
||||||
271 | Ok(_) => println!("ok"),
|
205 | Ok(_) => println!("ok"),
|
||||||
| ^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
note: same as this
|
note: same as this
|
||||||
--> $DIR/matches.rs:270:18
|
--> $DIR/matches.rs:204:18
|
||||||
|
|
|
|
||||||
270 | Ok(3) => println!("ok"),
|
204 | Ok(3) => println!("ok"),
|
||||||
| ^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^
|
||||||
note: consider refactoring into `Ok(3) | Ok(_)`
|
note: consider refactoring into `Ok(3) | Ok(_)`
|
||||||
--> $DIR/matches.rs:270:18
|
--> $DIR/matches.rs:204:18
|
||||||
|
|
|
|
||||||
270 | Ok(3) => println!("ok"),
|
204 | Ok(3) => println!("ok"),
|
||||||
| ^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^
|
||||||
= note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info)
|
= note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info)
|
||||||
|
|
||||||
error: this `match` has identical arm bodies
|
error: this `match` has identical arm bodies
|
||||||
--> $DIR/matches.rs:277:18
|
--> $DIR/matches.rs:211:18
|
||||||
|
|
|
|
||||||
277 | Ok(_) => println!("ok"),
|
211 | Ok(_) => println!("ok"),
|
||||||
| ^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
note: same as this
|
note: same as this
|
||||||
--> $DIR/matches.rs:276:18
|
--> $DIR/matches.rs:210:18
|
||||||
|
|
|
|
||||||
276 | Ok(3) => println!("ok"),
|
210 | Ok(3) => println!("ok"),
|
||||||
| ^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^
|
||||||
note: consider refactoring into `Ok(3) | Ok(_)`
|
note: consider refactoring into `Ok(3) | Ok(_)`
|
||||||
--> $DIR/matches.rs:276:18
|
--> $DIR/matches.rs:210:18
|
||||||
|
|
|
|
||||||
276 | Ok(3) => println!("ok"),
|
210 | Ok(3) => println!("ok"),
|
||||||
| ^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^
|
||||||
= note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info)
|
= note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info)
|
||||||
|
|
||||||
error: this `match` has identical arm bodies
|
error: this `match` has identical arm bodies
|
||||||
--> $DIR/matches.rs:298:29
|
--> $DIR/matches.rs:232:29
|
||||||
|
|
|
|
||||||
298 | (Ok(_), Some(x)) => println!("ok {}", x),
|
232 | (Ok(_), Some(x)) => println!("ok {}", x),
|
||||||
| ^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
note: same as this
|
note: same as this
|
||||||
--> $DIR/matches.rs:297:29
|
--> $DIR/matches.rs:231:29
|
||||||
|
|
|
|
||||||
297 | (Ok(x), Some(_)) => println!("ok {}", x),
|
231 | (Ok(x), Some(_)) => println!("ok {}", x),
|
||||||
| ^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^
|
||||||
note: consider refactoring into `(Ok(x), Some(_)) | (Ok(_), Some(x))`
|
note: consider refactoring into `(Ok(x), Some(_)) | (Ok(_), Some(x))`
|
||||||
--> $DIR/matches.rs:297:29
|
--> $DIR/matches.rs:231:29
|
||||||
|
|
|
|
||||||
297 | (Ok(x), Some(_)) => println!("ok {}", x),
|
231 | (Ok(x), Some(_)) => println!("ok {}", x),
|
||||||
| ^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^
|
||||||
= note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info)
|
= note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info)
|
||||||
|
|
||||||
error: this `match` has identical arm bodies
|
error: this `match` has identical arm bodies
|
||||||
--> $DIR/matches.rs:313:18
|
--> $DIR/matches.rs:247:18
|
||||||
|
|
|
|
||||||
313 | Ok(_) => println!("ok"),
|
247 | Ok(_) => println!("ok"),
|
||||||
| ^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
note: same as this
|
note: same as this
|
||||||
--> $DIR/matches.rs:312:18
|
--> $DIR/matches.rs:246:18
|
||||||
|
|
|
|
||||||
312 | Ok(3) => println!("ok"),
|
246 | Ok(3) => println!("ok"),
|
||||||
| ^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^
|
||||||
note: consider refactoring into `Ok(3) | Ok(_)`
|
note: consider refactoring into `Ok(3) | Ok(_)`
|
||||||
--> $DIR/matches.rs:312:18
|
--> $DIR/matches.rs:246:18
|
||||||
|
|
|
|
||||||
312 | Ok(3) => println!("ok"),
|
246 | Ok(3) => println!("ok"),
|
||||||
| ^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^
|
||||||
= note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info)
|
= note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info)
|
||||||
|
|
||||||
error: use as_ref() instead
|
error: use as_ref() instead
|
||||||
--> $DIR/matches.rs:320:33
|
--> $DIR/matches.rs:254:33
|
||||||
|
|
|
|
||||||
320 | let borrowed: Option<&()> = match owned {
|
254 | let borrowed: Option<&()> = match owned {
|
||||||
| _________________________________^
|
| _________________________________^
|
||||||
321 | | None => None,
|
255 | | None => None,
|
||||||
322 | | Some(ref v) => Some(v),
|
256 | | Some(ref v) => Some(v),
|
||||||
323 | | };
|
257 | | };
|
||||||
| |_____^ help: try this: `owned.as_ref()`
|
| |_____^ help: try this: `owned.as_ref()`
|
||||||
|
|
|
|
||||||
= note: `-D match-as-ref` implied by `-D warnings`
|
= note: `-D match-as-ref` implied by `-D warnings`
|
||||||
|
|
||||||
error: use as_mut() instead
|
error: use as_mut() instead
|
||||||
--> $DIR/matches.rs:326:39
|
--> $DIR/matches.rs:260:39
|
||||||
|
|
|
|
||||||
326 | let borrow_mut: Option<&mut ()> = match mut_owned {
|
260 | let borrow_mut: Option<&mut ()> = match mut_owned {
|
||||||
| _______________________________________^
|
| _______________________________________^
|
||||||
327 | | None => None,
|
261 | | None => None,
|
||||||
328 | | Some(ref mut v) => Some(v),
|
262 | | Some(ref mut v) => Some(v),
|
||||||
329 | | };
|
263 | | };
|
||||||
| |_____^ help: try this: `mut_owned.as_mut()`
|
| |_____^ help: try this: `mut_owned.as_mut()`
|
||||||
|
|
||||||
error: aborting due to 38 previous errors
|
error: aborting due to 33 previous errors
|
||||||
|
|
||||||
|
|
71
tests/ui/single_match.rs
Normal file
71
tests/ui/single_match.rs
Normal file
|
@ -0,0 +1,71 @@
|
||||||
|
#![warn(single_match)]
|
||||||
|
|
||||||
|
fn dummy() {
|
||||||
|
}
|
||||||
|
|
||||||
|
fn single_match(){
|
||||||
|
let x = Some(1u8);
|
||||||
|
|
||||||
|
match x {
|
||||||
|
Some(y) => { println!("{:?}", y); }
|
||||||
|
_ => ()
|
||||||
|
};
|
||||||
|
|
||||||
|
let z = (1u8,1u8);
|
||||||
|
match z {
|
||||||
|
(2...3, 7...9) => dummy(),
|
||||||
|
_ => {}
|
||||||
|
};
|
||||||
|
|
||||||
|
// Not linted (pattern guards used)
|
||||||
|
match x {
|
||||||
|
Some(y) if y == 0 => println!("{:?}", y),
|
||||||
|
_ => ()
|
||||||
|
}
|
||||||
|
|
||||||
|
// Not linted (no block with statements in the single arm)
|
||||||
|
match z {
|
||||||
|
(2...3, 7...9) => println!("{:?}", z),
|
||||||
|
_ => println!("nope"),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
enum Foo { Bar, Baz(u8) }
|
||||||
|
use Foo::*;
|
||||||
|
use std::borrow::Cow;
|
||||||
|
|
||||||
|
fn single_match_know_enum() {
|
||||||
|
let x = Some(1u8);
|
||||||
|
let y : Result<_, i8> = Ok(1i8);
|
||||||
|
|
||||||
|
match x {
|
||||||
|
Some(y) => dummy(),
|
||||||
|
None => ()
|
||||||
|
};
|
||||||
|
|
||||||
|
match y {
|
||||||
|
Ok(y) => dummy(),
|
||||||
|
Err(..) => ()
|
||||||
|
};
|
||||||
|
|
||||||
|
let c = Cow::Borrowed("");
|
||||||
|
|
||||||
|
match c {
|
||||||
|
Cow::Borrowed(..) => dummy(),
|
||||||
|
Cow::Owned(..) => (),
|
||||||
|
};
|
||||||
|
|
||||||
|
let z = Foo::Bar;
|
||||||
|
// no warning
|
||||||
|
match z {
|
||||||
|
Bar => println!("42"),
|
||||||
|
Baz(_) => (),
|
||||||
|
}
|
||||||
|
|
||||||
|
match z {
|
||||||
|
Baz(_) => println!("42"),
|
||||||
|
Bar => (),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() { }
|
49
tests/ui/single_match.stderr
Normal file
49
tests/ui/single_match.stderr
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
error: you seem to be trying to use match for destructuring a single pattern. Consider using `if let`
|
||||||
|
--> $DIR/single_match.rs:9:5
|
||||||
|
|
|
||||||
|
9 | / match x {
|
||||||
|
10 | | Some(y) => { println!("{:?}", y); }
|
||||||
|
11 | | _ => ()
|
||||||
|
12 | | };
|
||||||
|
| |_____^ help: try this: `if let Some(y) = x { println!("{:?}", y); }`
|
||||||
|
|
|
||||||
|
= note: `-D single-match` implied by `-D warnings`
|
||||||
|
|
||||||
|
error: you seem to be trying to use match for destructuring a single pattern. Consider using `if let`
|
||||||
|
--> $DIR/single_match.rs:15:5
|
||||||
|
|
|
||||||
|
15 | / match z {
|
||||||
|
16 | | (2...3, 7...9) => dummy(),
|
||||||
|
17 | | _ => {}
|
||||||
|
18 | | };
|
||||||
|
| |_____^ help: try this: `if let (2...3, 7...9) = z { dummy() }`
|
||||||
|
|
||||||
|
error: you seem to be trying to use match for destructuring a single pattern. Consider using `if let`
|
||||||
|
--> $DIR/single_match.rs:41:5
|
||||||
|
|
|
||||||
|
41 | / match x {
|
||||||
|
42 | | Some(y) => dummy(),
|
||||||
|
43 | | None => ()
|
||||||
|
44 | | };
|
||||||
|
| |_____^ help: try this: `if let Some(y) = x { dummy() }`
|
||||||
|
|
||||||
|
error: you seem to be trying to use match for destructuring a single pattern. Consider using `if let`
|
||||||
|
--> $DIR/single_match.rs:46:5
|
||||||
|
|
|
||||||
|
46 | / match y {
|
||||||
|
47 | | Ok(y) => dummy(),
|
||||||
|
48 | | Err(..) => ()
|
||||||
|
49 | | };
|
||||||
|
| |_____^ help: try this: `if let Ok(y) = y { dummy() }`
|
||||||
|
|
||||||
|
error: you seem to be trying to use match for destructuring a single pattern. Consider using `if let`
|
||||||
|
--> $DIR/single_match.rs:53:5
|
||||||
|
|
|
||||||
|
53 | / match c {
|
||||||
|
54 | | Cow::Borrowed(..) => dummy(),
|
||||||
|
55 | | Cow::Owned(..) => (),
|
||||||
|
56 | | };
|
||||||
|
| |_____^ help: try this: `if let Cow::Borrowed(..) = c { dummy() }`
|
||||||
|
|
||||||
|
error: aborting due to 5 previous errors
|
||||||
|
|
Loading…
Reference in a new issue