commit
5bafd81f93
116 changed files with 1949 additions and 3320 deletions
|
@ -6,68 +6,27 @@
|
|||
|
||||
fn main() {
|
||||
const Z: u32 = 0;
|
||||
|
||||
let u: u32 = 42;
|
||||
|
||||
u <= 0;
|
||||
|
||||
|
||||
u <= Z;
|
||||
|
||||
|
||||
u < Z;
|
||||
|
||||
|
||||
Z >= u;
|
||||
|
||||
|
||||
Z > u;
|
||||
|
||||
|
||||
u > std::u32::MAX;
|
||||
|
||||
|
||||
u >= std::u32::MAX;
|
||||
|
||||
|
||||
std::u32::MAX < u;
|
||||
|
||||
|
||||
std::u32::MAX <= u;
|
||||
|
||||
|
||||
|
||||
1-1 > u;
|
||||
|
||||
|
||||
u >= !0;
|
||||
|
||||
|
||||
u <= 12 - 2*6;
|
||||
|
||||
|
||||
|
||||
let i: i8 = 0;
|
||||
i < -127 - 1;
|
||||
|
||||
|
||||
std::i8::MAX >= i;
|
||||
|
||||
|
||||
3-7 < std::i32::MIN;
|
||||
|
||||
|
||||
|
||||
let b = false;
|
||||
b >= true;
|
||||
|
||||
|
||||
false > b;
|
||||
|
||||
|
||||
|
||||
u > 0; // ok
|
||||
|
||||
// this is handled by unit_cmp
|
||||
() < {};
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
error: this comparison involving the minimum or maximum element for this type contains a case that is always true or always false
|
||||
--> $DIR/absurd-extreme-comparisons.rs:12:5
|
||||
--> $DIR/absurd-extreme-comparisons.rs:10:5
|
||||
|
|
||||
12 | u <= 0;
|
||||
10 | u <= 0;
|
||||
| ^^^^^^
|
||||
|
|
||||
note: lint level defined here
|
||||
|
@ -12,137 +12,137 @@ note: lint level defined here
|
|||
= help: because 0 is the minimum value for this type, the case where the two sides are not equal never occurs, consider using u == 0 instead
|
||||
|
||||
error: this comparison involving the minimum or maximum element for this type contains a case that is always true or always false
|
||||
--> $DIR/absurd-extreme-comparisons.rs:15:5
|
||||
--> $DIR/absurd-extreme-comparisons.rs:11:5
|
||||
|
|
||||
15 | u <= Z;
|
||||
11 | u <= Z;
|
||||
| ^^^^^^
|
||||
|
|
||||
= help: because Z is the minimum value for this type, the case where the two sides are not equal never occurs, consider using u == Z instead
|
||||
|
||||
error: this comparison involving the minimum or maximum element for this type contains a case that is always true or always false
|
||||
--> $DIR/absurd-extreme-comparisons.rs:18:5
|
||||
--> $DIR/absurd-extreme-comparisons.rs:12:5
|
||||
|
|
||||
18 | u < Z;
|
||||
12 | u < Z;
|
||||
| ^^^^^
|
||||
|
|
||||
= help: because Z is the minimum value for this type, this comparison is always false
|
||||
|
||||
error: this comparison involving the minimum or maximum element for this type contains a case that is always true or always false
|
||||
--> $DIR/absurd-extreme-comparisons.rs:21:5
|
||||
--> $DIR/absurd-extreme-comparisons.rs:13:5
|
||||
|
|
||||
21 | Z >= u;
|
||||
13 | Z >= u;
|
||||
| ^^^^^^
|
||||
|
|
||||
= help: because Z is the minimum value for this type, the case where the two sides are not equal never occurs, consider using Z == u instead
|
||||
|
||||
error: this comparison involving the minimum or maximum element for this type contains a case that is always true or always false
|
||||
--> $DIR/absurd-extreme-comparisons.rs:24:5
|
||||
--> $DIR/absurd-extreme-comparisons.rs:14:5
|
||||
|
|
||||
24 | Z > u;
|
||||
14 | Z > u;
|
||||
| ^^^^^
|
||||
|
|
||||
= help: because Z is the minimum value for this type, this comparison is always false
|
||||
|
||||
error: this comparison involving the minimum or maximum element for this type contains a case that is always true or always false
|
||||
--> $DIR/absurd-extreme-comparisons.rs:27:5
|
||||
--> $DIR/absurd-extreme-comparisons.rs:15:5
|
||||
|
|
||||
27 | u > std::u32::MAX;
|
||||
15 | u > std::u32::MAX;
|
||||
| ^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= help: because std::u32::MAX is the maximum value for this type, this comparison is always false
|
||||
|
||||
error: this comparison involving the minimum or maximum element for this type contains a case that is always true or always false
|
||||
--> $DIR/absurd-extreme-comparisons.rs:30:5
|
||||
--> $DIR/absurd-extreme-comparisons.rs:16:5
|
||||
|
|
||||
30 | u >= std::u32::MAX;
|
||||
16 | u >= std::u32::MAX;
|
||||
| ^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= help: because std::u32::MAX is the maximum value for this type, the case where the two sides are not equal never occurs, consider using u == std::u32::MAX instead
|
||||
|
||||
error: this comparison involving the minimum or maximum element for this type contains a case that is always true or always false
|
||||
--> $DIR/absurd-extreme-comparisons.rs:33:5
|
||||
--> $DIR/absurd-extreme-comparisons.rs:17:5
|
||||
|
|
||||
33 | std::u32::MAX < u;
|
||||
17 | std::u32::MAX < u;
|
||||
| ^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= help: because std::u32::MAX is the maximum value for this type, this comparison is always false
|
||||
|
||||
error: this comparison involving the minimum or maximum element for this type contains a case that is always true or always false
|
||||
--> $DIR/absurd-extreme-comparisons.rs:36:5
|
||||
--> $DIR/absurd-extreme-comparisons.rs:18:5
|
||||
|
|
||||
36 | std::u32::MAX <= u;
|
||||
18 | std::u32::MAX <= u;
|
||||
| ^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= help: because std::u32::MAX is the maximum value for this type, the case where the two sides are not equal never occurs, consider using std::u32::MAX == u instead
|
||||
|
||||
error: this comparison involving the minimum or maximum element for this type contains a case that is always true or always false
|
||||
--> $DIR/absurd-extreme-comparisons.rs:40:5
|
||||
--> $DIR/absurd-extreme-comparisons.rs:19:5
|
||||
|
|
||||
40 | 1-1 > u;
|
||||
19 | 1-1 > u;
|
||||
| ^^^^^^^
|
||||
|
|
||||
= help: because 1-1 is the minimum value for this type, this comparison is always false
|
||||
|
||||
error: this comparison involving the minimum or maximum element for this type contains a case that is always true or always false
|
||||
--> $DIR/absurd-extreme-comparisons.rs:43:5
|
||||
--> $DIR/absurd-extreme-comparisons.rs:20:5
|
||||
|
|
||||
43 | u >= !0;
|
||||
20 | u >= !0;
|
||||
| ^^^^^^^
|
||||
|
|
||||
= help: because !0 is the maximum value for this type, the case where the two sides are not equal never occurs, consider using u == !0 instead
|
||||
|
||||
error: this comparison involving the minimum or maximum element for this type contains a case that is always true or always false
|
||||
--> $DIR/absurd-extreme-comparisons.rs:46:5
|
||||
--> $DIR/absurd-extreme-comparisons.rs:21:5
|
||||
|
|
||||
46 | u <= 12 - 2*6;
|
||||
21 | u <= 12 - 2*6;
|
||||
| ^^^^^^^^^^^^^
|
||||
|
|
||||
= help: because 12 - 2*6 is the minimum value for this type, the case where the two sides are not equal never occurs, consider using u == 12 - 2*6 instead
|
||||
|
||||
error: this comparison involving the minimum or maximum element for this type contains a case that is always true or always false
|
||||
--> $DIR/absurd-extreme-comparisons.rs:51:5
|
||||
--> $DIR/absurd-extreme-comparisons.rs:23:5
|
||||
|
|
||||
51 | i < -127 - 1;
|
||||
23 | i < -127 - 1;
|
||||
| ^^^^^^^^^^^^
|
||||
|
|
||||
= help: because -127 - 1 is the minimum value for this type, this comparison is always false
|
||||
|
||||
error: this comparison involving the minimum or maximum element for this type contains a case that is always true or always false
|
||||
--> $DIR/absurd-extreme-comparisons.rs:54:5
|
||||
--> $DIR/absurd-extreme-comparisons.rs:24:5
|
||||
|
|
||||
54 | std::i8::MAX >= i;
|
||||
24 | std::i8::MAX >= i;
|
||||
| ^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= help: because std::i8::MAX is the maximum value for this type, this comparison is always true
|
||||
|
||||
error: this comparison involving the minimum or maximum element for this type contains a case that is always true or always false
|
||||
--> $DIR/absurd-extreme-comparisons.rs:57:5
|
||||
--> $DIR/absurd-extreme-comparisons.rs:25:5
|
||||
|
|
||||
57 | 3-7 < std::i32::MIN;
|
||||
25 | 3-7 < std::i32::MIN;
|
||||
| ^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= help: because std::i32::MIN is the minimum value for this type, this comparison is always false
|
||||
|
||||
error: this comparison involving the minimum or maximum element for this type contains a case that is always true or always false
|
||||
--> $DIR/absurd-extreme-comparisons.rs:62:5
|
||||
--> $DIR/absurd-extreme-comparisons.rs:27:5
|
||||
|
|
||||
62 | b >= true;
|
||||
27 | b >= true;
|
||||
| ^^^^^^^^^
|
||||
|
|
||||
= help: because true is the maximum value for this type, the case where the two sides are not equal never occurs, consider using b == true instead
|
||||
|
||||
error: this comparison involving the minimum or maximum element for this type contains a case that is always true or always false
|
||||
--> $DIR/absurd-extreme-comparisons.rs:65:5
|
||||
--> $DIR/absurd-extreme-comparisons.rs:28:5
|
||||
|
|
||||
65 | false > b;
|
||||
28 | false > b;
|
||||
| ^^^^^^^^^
|
||||
|
|
||||
= help: because false is the minimum value for this type, this comparison is always false
|
||||
|
||||
warning: <-comparison of unit values detected. This will always be false
|
||||
--> $DIR/absurd-extreme-comparisons.rs:72:5
|
||||
--> $DIR/absurd-extreme-comparisons.rs:31:5
|
||||
|
|
||||
72 | () < {};
|
||||
31 | () < {};
|
||||
| ^^^^^^^
|
||||
|
|
||||
= note: #[warn(unit_cmp)] on by default
|
||||
|
|
|
@ -6,29 +6,13 @@
|
|||
fn main() {
|
||||
let mut a = 5;
|
||||
a += a + 1;
|
||||
|
||||
|
||||
a += 1 + a;
|
||||
|
||||
|
||||
a -= a - 1;
|
||||
|
||||
|
||||
a *= a * 99;
|
||||
|
||||
|
||||
a *= 42 * a;
|
||||
|
||||
|
||||
a /= a / 2;
|
||||
|
||||
|
||||
a %= a % 5;
|
||||
|
||||
|
||||
a &= a & 1;
|
||||
|
||||
|
||||
a -= 1 - a;
|
||||
a /= 5 / a;
|
||||
a %= 42 % a;
|
||||
|
|
|
@ -10,46 +10,46 @@ note: lint level defined here
|
|||
5 | #[deny(misrefactored_assign_op)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: variable appears on both sides of an assignment operation
|
||||
--> $DIR/assign_ops2.rs:9:5
|
||||
|
|
||||
9 | a += 1 + a;
|
||||
| ^^^^^^^^^^ help: replace it with `a += 1`
|
||||
|
||||
error: variable appears on both sides of an assignment operation
|
||||
--> $DIR/assign_ops2.rs:10:5
|
||||
|
|
||||
10 | a -= a - 1;
|
||||
| ^^^^^^^^^^ help: replace it with `a -= 1`
|
||||
|
||||
error: variable appears on both sides of an assignment operation
|
||||
--> $DIR/assign_ops2.rs:11:5
|
||||
|
|
||||
11 | a += 1 + a;
|
||||
| ^^^^^^^^^^ help: replace it with `a += 1`
|
||||
11 | a *= a * 99;
|
||||
| ^^^^^^^^^^^ help: replace it with `a *= 99`
|
||||
|
||||
error: variable appears on both sides of an assignment operation
|
||||
--> $DIR/assign_ops2.rs:12:5
|
||||
|
|
||||
12 | a *= 42 * a;
|
||||
| ^^^^^^^^^^^ help: replace it with `a *= 42`
|
||||
|
||||
error: variable appears on both sides of an assignment operation
|
||||
--> $DIR/assign_ops2.rs:13:5
|
||||
|
|
||||
13 | a /= a / 2;
|
||||
| ^^^^^^^^^^ help: replace it with `a /= 2`
|
||||
|
||||
error: variable appears on both sides of an assignment operation
|
||||
--> $DIR/assign_ops2.rs:14:5
|
||||
|
|
||||
14 | a -= a - 1;
|
||||
| ^^^^^^^^^^ help: replace it with `a -= 1`
|
||||
|
||||
error: variable appears on both sides of an assignment operation
|
||||
--> $DIR/assign_ops2.rs:17:5
|
||||
|
|
||||
17 | a *= a * 99;
|
||||
| ^^^^^^^^^^^ help: replace it with `a *= 99`
|
||||
|
||||
error: variable appears on both sides of an assignment operation
|
||||
--> $DIR/assign_ops2.rs:20:5
|
||||
|
|
||||
20 | a *= 42 * a;
|
||||
| ^^^^^^^^^^^ help: replace it with `a *= 42`
|
||||
|
||||
error: variable appears on both sides of an assignment operation
|
||||
--> $DIR/assign_ops2.rs:23:5
|
||||
|
|
||||
23 | a /= a / 2;
|
||||
| ^^^^^^^^^^ help: replace it with `a /= 2`
|
||||
|
||||
error: variable appears on both sides of an assignment operation
|
||||
--> $DIR/assign_ops2.rs:26:5
|
||||
|
|
||||
26 | a %= a % 5;
|
||||
14 | a %= a % 5;
|
||||
| ^^^^^^^^^^ help: replace it with `a %= 5`
|
||||
|
||||
error: variable appears on both sides of an assignment operation
|
||||
--> $DIR/assign_ops2.rs:29:5
|
||||
--> $DIR/assign_ops2.rs:15:5
|
||||
|
|
||||
29 | a &= a & 1;
|
||||
15 | a &= a & 1;
|
||||
| ^^^^^^^^^^ help: replace it with `a &= 1`
|
||||
|
||||
error: aborting due to 8 previous errors
|
||||
|
|
|
@ -18,9 +18,6 @@ fn main() {
|
|||
|
||||
match (42, Some(1337), Some(0)) {
|
||||
(foo, Some(bar), baz @ Some(_)) => (),
|
||||
|
||||
|
||||
|
||||
_ => (),
|
||||
}
|
||||
}
|
||||
|
|
|
@ -56,13 +56,10 @@ fn pred_test() {
|
|||
// inside a closure that the condition is using. same principle applies. add some extra
|
||||
// expressions to make sure linter isn't confused by them.
|
||||
if v == 3 && sky == "blue" && predicate(|x| { let target = 3; x == target }, v) {
|
||||
|
||||
}
|
||||
|
||||
if predicate(|x| { let target = 3; x == target }, v) {
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
fn condition_is_normal() -> i32 {
|
||||
|
|
|
@ -45,15 +45,15 @@ error: in an 'if' condition, avoid complex blocks or closures with blocks; inste
|
|||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: in an 'if' condition, avoid complex blocks or closures with blocks; instead, move the block or closure higher and bind it with a 'let'
|
||||
--> $DIR/block_in_if_condition.rs:62:22
|
||||
--> $DIR/block_in_if_condition.rs:61:22
|
||||
|
|
||||
62 | if predicate(|x| { let target = 3; x == target }, v) {
|
||||
61 | if predicate(|x| { let target = 3; x == target }, v) {
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
warning: this boolean expression can be simplified
|
||||
--> $DIR/block_in_if_condition.rs:70:8
|
||||
--> $DIR/block_in_if_condition.rs:67:8
|
||||
|
|
||||
70 | if true && x == 3 {
|
||||
67 | if true && x == 3 {
|
||||
| ^^^^^^^^^^^^^^ help: try `x == 3`
|
||||
|
|
||||
note: lint level defined here
|
||||
|
|
|
@ -5,19 +5,7 @@
|
|||
fn main() {
|
||||
let x = true;
|
||||
if x == true { "yes" } else { "no" };
|
||||
|
||||
|
||||
|
||||
if x == false { "yes" } else { "no" };
|
||||
|
||||
|
||||
|
||||
if true == x { "yes" } else { "no" };
|
||||
|
||||
|
||||
|
||||
if false == x { "yes" } else { "no" };
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -11,21 +11,21 @@ note: lint level defined here
|
|||
| ^^^^^^^^^^^^^^^
|
||||
|
||||
error: equality checks against false can be replaced by a negation
|
||||
--> $DIR/bool_comparison.rs:11:8
|
||||
|
|
||||
11 | if x == false { "yes" } else { "no" };
|
||||
| ^^^^^^^^^^ help: try simplifying it as shown: `!x`
|
||||
--> $DIR/bool_comparison.rs:8:8
|
||||
|
|
||||
8 | if x == false { "yes" } else { "no" };
|
||||
| ^^^^^^^^^^ help: try simplifying it as shown: `!x`
|
||||
|
||||
error: equality checks against true are unnecessary
|
||||
--> $DIR/bool_comparison.rs:15:8
|
||||
|
|
||||
15 | if true == x { "yes" } else { "no" };
|
||||
| ^^^^^^^^^ help: try simplifying it as shown: `x`
|
||||
--> $DIR/bool_comparison.rs:9:8
|
||||
|
|
||||
9 | if true == x { "yes" } else { "no" };
|
||||
| ^^^^^^^^^ help: try simplifying it as shown: `x`
|
||||
|
||||
error: equality checks against false can be replaced by a negation
|
||||
--> $DIR/bool_comparison.rs:19:8
|
||||
--> $DIR/bool_comparison.rs:10:8
|
||||
|
|
||||
19 | if false == x { "yes" } else { "no" };
|
||||
10 | if false == x { "yes" } else { "no" };
|
||||
| ^^^^^^^^^^ help: try simplifying it as shown: `!x`
|
||||
|
||||
error: aborting due to 4 previous errors
|
||||
|
|
|
@ -10,39 +10,17 @@ fn main() {
|
|||
let d: bool = unimplemented!();
|
||||
let e: bool = unimplemented!();
|
||||
let _ = a && b || a;
|
||||
|
||||
|
||||
|
||||
let _ = !(a && b);
|
||||
let _ = !true;
|
||||
|
||||
|
||||
let _ = !false;
|
||||
|
||||
|
||||
let _ = !!a;
|
||||
|
||||
|
||||
|
||||
let _ = false && a;
|
||||
|
||||
|
||||
|
||||
|
||||
let _ = false || a;
|
||||
|
||||
|
||||
|
||||
// don't lint on cfgs
|
||||
let _ = cfg!(you_shall_not_not_pass) && a;
|
||||
|
||||
let _ = a || !b || !c || !d || !e;
|
||||
|
||||
let _ = !(a && b || c);
|
||||
|
||||
let _ = !(!a && b);
|
||||
|
||||
|
||||
}
|
||||
|
||||
#[allow(unused, many_single_char_names)]
|
||||
|
@ -53,38 +31,10 @@ fn equality_stuff() {
|
|||
let d: i32 = unimplemented!();
|
||||
let e: i32 = unimplemented!();
|
||||
let _ = a == b && a != b;
|
||||
|
||||
|
||||
|
||||
|
||||
let _ = a == b && c == 5 && a == b;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
let _ = a == b && c == 5 && b == a;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
let _ = a < b && a >= b;
|
||||
|
||||
|
||||
|
||||
|
||||
let _ = a > b && a <= b;
|
||||
|
||||
|
||||
|
||||
|
||||
let _ = a > b && a == b;
|
||||
|
||||
let _ = a != b || !(a != b || c == d);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -16,9 +16,9 @@ help: this expression can be optimized out by applying boolean operations to the
|
|||
| ^
|
||||
|
||||
error: this boolean expression can be simplified
|
||||
--> $DIR/booleans.rs:17:13
|
||||
--> $DIR/booleans.rs:14:13
|
||||
|
|
||||
17 | let _ = !true;
|
||||
14 | let _ = !true;
|
||||
| ^^^^^ help: try `false`
|
||||
|
|
||||
note: lint level defined here
|
||||
|
@ -28,93 +28,93 @@ note: lint level defined here
|
|||
| ^^^^^^^^^^^^^^^
|
||||
|
||||
error: this boolean expression can be simplified
|
||||
--> $DIR/booleans.rs:20:13
|
||||
--> $DIR/booleans.rs:15:13
|
||||
|
|
||||
20 | let _ = !false;
|
||||
15 | let _ = !false;
|
||||
| ^^^^^^ help: try `true`
|
||||
|
||||
error: this boolean expression can be simplified
|
||||
--> $DIR/booleans.rs:16:13
|
||||
|
|
||||
16 | let _ = !!a;
|
||||
| ^^^ help: try `a`
|
||||
|
||||
error: this boolean expression contains a logic bug
|
||||
--> $DIR/booleans.rs:17:13
|
||||
|
|
||||
17 | let _ = false && a;
|
||||
| ^^^^^^^^^^ help: it would look like the following `false`
|
||||
|
|
||||
help: this expression can be optimized out by applying boolean operations to the outer expression
|
||||
--> $DIR/booleans.rs:17:22
|
||||
|
|
||||
17 | let _ = false && a;
|
||||
| ^
|
||||
|
||||
error: this boolean expression can be simplified
|
||||
--> $DIR/booleans.rs:18:13
|
||||
|
|
||||
18 | let _ = false || a;
|
||||
| ^^^^^^^^^^ help: try `a`
|
||||
|
||||
error: this boolean expression can be simplified
|
||||
--> $DIR/booleans.rs:23:13
|
||||
|
|
||||
23 | let _ = !!a;
|
||||
| ^^^ help: try `a`
|
||||
|
||||
error: this boolean expression contains a logic bug
|
||||
--> $DIR/booleans.rs:27:13
|
||||
|
|
||||
27 | let _ = false && a;
|
||||
| ^^^^^^^^^^ help: it would look like the following `false`
|
||||
|
|
||||
help: this expression can be optimized out by applying boolean operations to the outer expression
|
||||
--> $DIR/booleans.rs:27:22
|
||||
|
|
||||
27 | let _ = false && a;
|
||||
| ^
|
||||
|
||||
error: this boolean expression can be simplified
|
||||
--> $DIR/booleans.rs:32:13
|
||||
|
|
||||
32 | let _ = false || a;
|
||||
| ^^^^^^^^^^ help: try `a`
|
||||
|
||||
error: this boolean expression can be simplified
|
||||
--> $DIR/booleans.rs:43:13
|
||||
|
|
||||
43 | let _ = !(!a && b);
|
||||
23 | let _ = !(!a && b);
|
||||
| ^^^^^^^^^^ help: try `!b || a`
|
||||
|
||||
error: this boolean expression contains a logic bug
|
||||
--> $DIR/booleans.rs:55:13
|
||||
--> $DIR/booleans.rs:33:13
|
||||
|
|
||||
55 | let _ = a == b && a != b;
|
||||
33 | let _ = a == b && a != b;
|
||||
| ^^^^^^^^^^^^^^^^ help: it would look like the following `false`
|
||||
|
|
||||
help: this expression can be optimized out by applying boolean operations to the outer expression
|
||||
--> $DIR/booleans.rs:55:13
|
||||
--> $DIR/booleans.rs:33:13
|
||||
|
|
||||
55 | let _ = a == b && a != b;
|
||||
33 | let _ = a == b && a != b;
|
||||
| ^^^^^^
|
||||
|
||||
error: this boolean expression can be simplified
|
||||
--> $DIR/booleans.rs:60:13
|
||||
--> $DIR/booleans.rs:34:13
|
||||
|
|
||||
60 | let _ = a == b && c == 5 && a == b;
|
||||
34 | let _ = a == b && c == 5 && a == b;
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try `a == b && c == 5`
|
||||
|
||||
error: this boolean expression can be simplified
|
||||
--> $DIR/booleans.rs:66:13
|
||||
--> $DIR/booleans.rs:35:13
|
||||
|
|
||||
66 | let _ = a == b && c == 5 && b == a;
|
||||
35 | let _ = a == b && c == 5 && b == a;
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try `a == b && c == 5`
|
||||
|
||||
error: this boolean expression contains a logic bug
|
||||
--> $DIR/booleans.rs:72:13
|
||||
--> $DIR/booleans.rs:36:13
|
||||
|
|
||||
72 | let _ = a < b && a >= b;
|
||||
36 | let _ = a < b && a >= b;
|
||||
| ^^^^^^^^^^^^^^^ help: it would look like the following `false`
|
||||
|
|
||||
help: this expression can be optimized out by applying boolean operations to the outer expression
|
||||
--> $DIR/booleans.rs:72:13
|
||||
--> $DIR/booleans.rs:36:13
|
||||
|
|
||||
72 | let _ = a < b && a >= b;
|
||||
36 | let _ = a < b && a >= b;
|
||||
| ^^^^^
|
||||
|
||||
error: this boolean expression contains a logic bug
|
||||
--> $DIR/booleans.rs:77:13
|
||||
--> $DIR/booleans.rs:37:13
|
||||
|
|
||||
77 | let _ = a > b && a <= b;
|
||||
37 | let _ = a > b && a <= b;
|
||||
| ^^^^^^^^^^^^^^^ help: it would look like the following `false`
|
||||
|
|
||||
help: this expression can be optimized out by applying boolean operations to the outer expression
|
||||
--> $DIR/booleans.rs:77:13
|
||||
--> $DIR/booleans.rs:37:13
|
||||
|
|
||||
77 | let _ = a > b && a <= b;
|
||||
37 | let _ = a > b && a <= b;
|
||||
| ^^^^^
|
||||
|
||||
error: this boolean expression can be simplified
|
||||
--> $DIR/booleans.rs:84:13
|
||||
--> $DIR/booleans.rs:39:13
|
||||
|
|
||||
84 | let _ = a != b || !(a != b || c == d);
|
||||
39 | let _ = a != b || !(a != b || c == d);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try `c != d || a != b`
|
||||
|
||||
error: aborting due to 13 previous errors
|
||||
|
|
|
@ -13,30 +13,23 @@ fn main() {
|
|||
1u64 as f64;
|
||||
1i32 as f64; // Should not trigger the lint
|
||||
1u32 as f64; // Should not trigger the lint
|
||||
|
||||
// Test cast_possible_truncation
|
||||
1f32 as i32;
|
||||
1f32 as u32;
|
||||
|
||||
1f64 as f32;
|
||||
1i32 as i8;
|
||||
1i32 as u8;
|
||||
|
||||
1f64 as isize;
|
||||
1f64 as usize;
|
||||
|
||||
|
||||
// Test cast_possible_wrap
|
||||
1u8 as i8;
|
||||
1u16 as i16;
|
||||
1u32 as i32;
|
||||
1u64 as i64;
|
||||
1usize as isize;
|
||||
|
||||
// Test cast_sign_loss
|
||||
1i32 as u32;
|
||||
1isize as usize;
|
||||
|
||||
// Extra checks for *size
|
||||
// Casting from *size
|
||||
1isize as i8;
|
||||
|
@ -46,28 +39,22 @@ fn main() {
|
|||
1usize as f32;
|
||||
1isize as i32;
|
||||
1isize as u32;
|
||||
|
||||
1usize as u32;
|
||||
1usize as i32;
|
||||
|
||||
// Casting to *size
|
||||
1i64 as isize;
|
||||
1i64 as usize;
|
||||
|
||||
1u64 as isize;
|
||||
|
||||
1u64 as usize;
|
||||
1u32 as isize;
|
||||
1u32 as usize; // Should not trigger any lint
|
||||
1i32 as isize; // Neither should this
|
||||
1i32 as usize;
|
||||
|
||||
// Test cast_unnecessary
|
||||
1i32 as i32;
|
||||
1f32 as f32;
|
||||
false as bool;
|
||||
&1i32 as &i32;
|
||||
|
||||
// Should not trigger
|
||||
1i32 as i64;
|
||||
let v = vec!(1);
|
||||
|
|
|
@ -41,9 +41,9 @@ error: casting u64 to f64 causes a loss of precision (u64 is 64 bits wide, but f
|
|||
| ^^^^^^^^^^^
|
||||
|
||||
error: casting f32 to i32 may truncate the value
|
||||
--> $DIR/cast.rs:18:5
|
||||
--> $DIR/cast.rs:17:5
|
||||
|
|
||||
18 | 1f32 as i32;
|
||||
17 | 1f32 as i32;
|
||||
| ^^^^^^^^^^^
|
||||
|
|
||||
note: lint level defined here
|
||||
|
@ -53,15 +53,15 @@ note: lint level defined here
|
|||
| ^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: casting f32 to u32 may truncate the value
|
||||
--> $DIR/cast.rs:19:5
|
||||
--> $DIR/cast.rs:18:5
|
||||
|
|
||||
19 | 1f32 as u32;
|
||||
18 | 1f32 as u32;
|
||||
| ^^^^^^^^^^^
|
||||
|
||||
error: casting f32 to u32 may lose the sign of the value
|
||||
--> $DIR/cast.rs:19:5
|
||||
--> $DIR/cast.rs:18:5
|
||||
|
|
||||
19 | 1f32 as u32;
|
||||
18 | 1f32 as u32;
|
||||
| ^^^^^^^^^^^
|
||||
|
|
||||
note: lint level defined here
|
||||
|
@ -71,51 +71,51 @@ note: lint level defined here
|
|||
| ^^^^^^^^^^^^^^
|
||||
|
||||
error: casting f64 to f32 may truncate the value
|
||||
--> $DIR/cast.rs:21:5
|
||||
--> $DIR/cast.rs:19:5
|
||||
|
|
||||
21 | 1f64 as f32;
|
||||
19 | 1f64 as f32;
|
||||
| ^^^^^^^^^^^
|
||||
|
||||
error: casting i32 to i8 may truncate the value
|
||||
--> $DIR/cast.rs:22:5
|
||||
--> $DIR/cast.rs:20:5
|
||||
|
|
||||
22 | 1i32 as i8;
|
||||
20 | 1i32 as i8;
|
||||
| ^^^^^^^^^^
|
||||
|
||||
error: casting i32 to u8 may lose the sign of the value
|
||||
--> $DIR/cast.rs:23:5
|
||||
--> $DIR/cast.rs:21:5
|
||||
|
|
||||
23 | 1i32 as u8;
|
||||
21 | 1i32 as u8;
|
||||
| ^^^^^^^^^^
|
||||
|
||||
error: casting i32 to u8 may truncate the value
|
||||
--> $DIR/cast.rs:23:5
|
||||
--> $DIR/cast.rs:21:5
|
||||
|
|
||||
23 | 1i32 as u8;
|
||||
21 | 1i32 as u8;
|
||||
| ^^^^^^^^^^
|
||||
|
||||
error: casting f64 to isize may truncate the value
|
||||
--> $DIR/cast.rs:25:5
|
||||
--> $DIR/cast.rs:22:5
|
||||
|
|
||||
25 | 1f64 as isize;
|
||||
22 | 1f64 as isize;
|
||||
| ^^^^^^^^^^^^^
|
||||
|
||||
error: casting f64 to usize may truncate the value
|
||||
--> $DIR/cast.rs:26:5
|
||||
--> $DIR/cast.rs:23:5
|
||||
|
|
||||
26 | 1f64 as usize;
|
||||
23 | 1f64 as usize;
|
||||
| ^^^^^^^^^^^^^
|
||||
|
||||
error: casting f64 to usize may lose the sign of the value
|
||||
--> $DIR/cast.rs:26:5
|
||||
--> $DIR/cast.rs:23:5
|
||||
|
|
||||
26 | 1f64 as usize;
|
||||
23 | 1f64 as usize;
|
||||
| ^^^^^^^^^^^^^
|
||||
|
||||
error: casting u8 to i8 may wrap around the value
|
||||
--> $DIR/cast.rs:30:5
|
||||
--> $DIR/cast.rs:25:5
|
||||
|
|
||||
30 | 1u8 as i8;
|
||||
25 | 1u8 as i8;
|
||||
| ^^^^^^^^^
|
||||
|
|
||||
note: lint level defined here
|
||||
|
@ -125,175 +125,175 @@ note: lint level defined here
|
|||
| ^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: casting u16 to i16 may wrap around the value
|
||||
--> $DIR/cast.rs:31:5
|
||||
--> $DIR/cast.rs:26:5
|
||||
|
|
||||
31 | 1u16 as i16;
|
||||
26 | 1u16 as i16;
|
||||
| ^^^^^^^^^^^
|
||||
|
||||
error: casting u32 to i32 may wrap around the value
|
||||
--> $DIR/cast.rs:32:5
|
||||
--> $DIR/cast.rs:27:5
|
||||
|
|
||||
32 | 1u32 as i32;
|
||||
27 | 1u32 as i32;
|
||||
| ^^^^^^^^^^^
|
||||
|
||||
error: casting u64 to i64 may wrap around the value
|
||||
--> $DIR/cast.rs:33:5
|
||||
--> $DIR/cast.rs:28:5
|
||||
|
|
||||
33 | 1u64 as i64;
|
||||
28 | 1u64 as i64;
|
||||
| ^^^^^^^^^^^
|
||||
|
||||
error: casting usize to isize may wrap around the value
|
||||
--> $DIR/cast.rs:34:5
|
||||
--> $DIR/cast.rs:29:5
|
||||
|
|
||||
34 | 1usize as isize;
|
||||
29 | 1usize as isize;
|
||||
| ^^^^^^^^^^^^^^^
|
||||
|
||||
error: casting i32 to u32 may lose the sign of the value
|
||||
--> $DIR/cast.rs:37:5
|
||||
--> $DIR/cast.rs:31:5
|
||||
|
|
||||
37 | 1i32 as u32;
|
||||
31 | 1i32 as u32;
|
||||
| ^^^^^^^^^^^
|
||||
|
||||
error: casting isize to usize may lose the sign of the value
|
||||
--> $DIR/cast.rs:38:5
|
||||
--> $DIR/cast.rs:32:5
|
||||
|
|
||||
38 | 1isize as usize;
|
||||
32 | 1isize as usize;
|
||||
| ^^^^^^^^^^^^^^^
|
||||
|
||||
error: casting isize to i8 may truncate the value
|
||||
--> $DIR/cast.rs:42:5
|
||||
--> $DIR/cast.rs:35:5
|
||||
|
|
||||
42 | 1isize as i8;
|
||||
35 | 1isize as i8;
|
||||
| ^^^^^^^^^^^^
|
||||
|
||||
error: casting isize to f64 causes a loss of precision on targets with 64-bit wide pointers (isize is 64 bits wide, but f64's mantissa is only 52 bits wide)
|
||||
--> $DIR/cast.rs:43:5
|
||||
--> $DIR/cast.rs:36:5
|
||||
|
|
||||
43 | 1isize as f64;
|
||||
36 | 1isize as f64;
|
||||
| ^^^^^^^^^^^^^
|
||||
|
||||
error: casting usize to f64 causes a loss of precision on targets with 64-bit wide pointers (usize is 64 bits wide, but f64's mantissa is only 52 bits wide)
|
||||
--> $DIR/cast.rs:44:5
|
||||
--> $DIR/cast.rs:37:5
|
||||
|
|
||||
44 | 1usize as f64;
|
||||
37 | 1usize as f64;
|
||||
| ^^^^^^^^^^^^^
|
||||
|
||||
error: casting isize to f32 causes a loss of precision (isize is 32 or 64 bits wide, but f32's mantissa is only 23 bits wide)
|
||||
--> $DIR/cast.rs:45:5
|
||||
--> $DIR/cast.rs:38:5
|
||||
|
|
||||
45 | 1isize as f32;
|
||||
38 | 1isize as f32;
|
||||
| ^^^^^^^^^^^^^
|
||||
|
||||
error: casting usize to f32 causes a loss of precision (usize is 32 or 64 bits wide, but f32's mantissa is only 23 bits wide)
|
||||
--> $DIR/cast.rs:46:5
|
||||
--> $DIR/cast.rs:39:5
|
||||
|
|
||||
46 | 1usize as f32;
|
||||
39 | 1usize as f32;
|
||||
| ^^^^^^^^^^^^^
|
||||
|
||||
error: casting isize to i32 may truncate the value on targets with 64-bit wide pointers
|
||||
--> $DIR/cast.rs:47:5
|
||||
--> $DIR/cast.rs:40:5
|
||||
|
|
||||
47 | 1isize as i32;
|
||||
40 | 1isize as i32;
|
||||
| ^^^^^^^^^^^^^
|
||||
|
||||
error: casting isize to u32 may lose the sign of the value
|
||||
--> $DIR/cast.rs:48:5
|
||||
--> $DIR/cast.rs:41:5
|
||||
|
|
||||
48 | 1isize as u32;
|
||||
41 | 1isize as u32;
|
||||
| ^^^^^^^^^^^^^
|
||||
|
||||
error: casting isize to u32 may truncate the value on targets with 64-bit wide pointers
|
||||
--> $DIR/cast.rs:48:5
|
||||
--> $DIR/cast.rs:41:5
|
||||
|
|
||||
48 | 1isize as u32;
|
||||
41 | 1isize as u32;
|
||||
| ^^^^^^^^^^^^^
|
||||
|
||||
error: casting usize to u32 may truncate the value on targets with 64-bit wide pointers
|
||||
--> $DIR/cast.rs:50:5
|
||||
--> $DIR/cast.rs:42:5
|
||||
|
|
||||
50 | 1usize as u32;
|
||||
42 | 1usize as u32;
|
||||
| ^^^^^^^^^^^^^
|
||||
|
||||
error: casting usize to i32 may truncate the value on targets with 64-bit wide pointers
|
||||
--> $DIR/cast.rs:51:5
|
||||
--> $DIR/cast.rs:43:5
|
||||
|
|
||||
51 | 1usize as i32;
|
||||
43 | 1usize as i32;
|
||||
| ^^^^^^^^^^^^^
|
||||
|
||||
error: casting usize to i32 may wrap around the value on targets with 32-bit wide pointers
|
||||
--> $DIR/cast.rs:51:5
|
||||
--> $DIR/cast.rs:43:5
|
||||
|
|
||||
51 | 1usize as i32;
|
||||
43 | 1usize as i32;
|
||||
| ^^^^^^^^^^^^^
|
||||
|
||||
error: casting i64 to isize may truncate the value on targets with 32-bit wide pointers
|
||||
--> $DIR/cast.rs:54:5
|
||||
--> $DIR/cast.rs:45:5
|
||||
|
|
||||
54 | 1i64 as isize;
|
||||
45 | 1i64 as isize;
|
||||
| ^^^^^^^^^^^^^
|
||||
|
||||
error: casting i64 to usize may lose the sign of the value
|
||||
--> $DIR/cast.rs:55:5
|
||||
--> $DIR/cast.rs:46:5
|
||||
|
|
||||
55 | 1i64 as usize;
|
||||
46 | 1i64 as usize;
|
||||
| ^^^^^^^^^^^^^
|
||||
|
||||
error: casting i64 to usize may truncate the value on targets with 32-bit wide pointers
|
||||
--> $DIR/cast.rs:55:5
|
||||
--> $DIR/cast.rs:46:5
|
||||
|
|
||||
55 | 1i64 as usize;
|
||||
46 | 1i64 as usize;
|
||||
| ^^^^^^^^^^^^^
|
||||
|
||||
error: casting u64 to isize may truncate the value on targets with 32-bit wide pointers
|
||||
--> $DIR/cast.rs:57:5
|
||||
--> $DIR/cast.rs:47:5
|
||||
|
|
||||
57 | 1u64 as isize;
|
||||
47 | 1u64 as isize;
|
||||
| ^^^^^^^^^^^^^
|
||||
|
||||
error: casting u64 to isize may wrap around the value on targets with 64-bit wide pointers
|
||||
--> $DIR/cast.rs:57:5
|
||||
--> $DIR/cast.rs:47:5
|
||||
|
|
||||
57 | 1u64 as isize;
|
||||
47 | 1u64 as isize;
|
||||
| ^^^^^^^^^^^^^
|
||||
|
||||
error: casting u64 to usize may truncate the value on targets with 32-bit wide pointers
|
||||
--> $DIR/cast.rs:59:5
|
||||
--> $DIR/cast.rs:48:5
|
||||
|
|
||||
59 | 1u64 as usize;
|
||||
48 | 1u64 as usize;
|
||||
| ^^^^^^^^^^^^^
|
||||
|
||||
error: casting u32 to isize may wrap around the value on targets with 32-bit wide pointers
|
||||
--> $DIR/cast.rs:60:5
|
||||
--> $DIR/cast.rs:49:5
|
||||
|
|
||||
60 | 1u32 as isize;
|
||||
49 | 1u32 as isize;
|
||||
| ^^^^^^^^^^^^^
|
||||
|
||||
error: casting i32 to usize may lose the sign of the value
|
||||
--> $DIR/cast.rs:63:5
|
||||
--> $DIR/cast.rs:52:5
|
||||
|
|
||||
63 | 1i32 as usize;
|
||||
52 | 1i32 as usize;
|
||||
| ^^^^^^^^^^^^^
|
||||
|
||||
warning: casting to the same type is unnecessary (`i32` -> `i32`)
|
||||
--> $DIR/cast.rs:66:5
|
||||
--> $DIR/cast.rs:54:5
|
||||
|
|
||||
66 | 1i32 as i32;
|
||||
54 | 1i32 as i32;
|
||||
| ^^^^^^^^^^^
|
||||
|
|
||||
= note: #[warn(unnecessary_cast)] on by default
|
||||
|
||||
warning: casting to the same type is unnecessary (`f32` -> `f32`)
|
||||
--> $DIR/cast.rs:67:5
|
||||
--> $DIR/cast.rs:55:5
|
||||
|
|
||||
67 | 1f32 as f32;
|
||||
55 | 1f32 as f32;
|
||||
| ^^^^^^^^^^^
|
||||
|
|
||||
= note: #[warn(unnecessary_cast)] on by default
|
||||
|
||||
warning: casting to the same type is unnecessary (`bool` -> `bool`)
|
||||
--> $DIR/cast.rs:68:5
|
||||
--> $DIR/cast.rs:56:5
|
||||
|
|
||||
68 | false as bool;
|
||||
56 | false as bool;
|
||||
| ^^^^^^^^^^^^^
|
||||
|
|
||||
= note: #[warn(unnecessary_cast)] on by default
|
||||
|
|
|
@ -7,9 +7,7 @@ fn main() {
|
|||
fn with_to_string(x : &str) {
|
||||
x != "foo".to_string();
|
||||
|
||||
|
||||
"foo".to_string() != x;
|
||||
|
||||
}
|
||||
|
||||
let x = "oh";
|
||||
|
|
|
@ -11,21 +11,21 @@ note: lint level defined here
|
|||
| ^^^^^^^^^
|
||||
|
||||
error: this creates an owned instance just for comparison. Consider using `"foo" != x` to compare without allocation
|
||||
--> $DIR/cmp_owned.rs:11:9
|
||||
--> $DIR/cmp_owned.rs:10:9
|
||||
|
|
||||
11 | "foo".to_string() != x;
|
||||
10 | "foo".to_string() != x;
|
||||
| ^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: this creates an owned instance just for comparison. Consider using `x != "foo"` to compare without allocation
|
||||
--> $DIR/cmp_owned.rs:19:10
|
||||
--> $DIR/cmp_owned.rs:17:10
|
||||
|
|
||||
19 | x != "foo".to_owned();
|
||||
17 | x != "foo".to_owned();
|
||||
| ^^^^^^^^^^^^^^^^
|
||||
|
||||
error: this creates an owned instance just for comparison. Consider using `x != "foo"` to compare without allocation
|
||||
--> $DIR/cmp_owned.rs:24:10
|
||||
--> $DIR/cmp_owned.rs:22:10
|
||||
|
|
||||
24 | x != String::from("foo");
|
||||
22 | x != String::from("foo");
|
||||
| ^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: aborting due to 4 previous errors
|
||||
|
|
|
@ -6,54 +6,36 @@ fn main() {
|
|||
let x = "hello";
|
||||
let y = "world";
|
||||
if x == "hello" {
|
||||
|
||||
|
||||
|
||||
if y == "world" {
|
||||
println!("Hello world!");
|
||||
}
|
||||
}
|
||||
|
||||
if x == "hello" || x == "world" {
|
||||
|
||||
|
||||
|
||||
if y == "world" || y == "hello" {
|
||||
println!("Hello world!");
|
||||
}
|
||||
}
|
||||
|
||||
if x == "hello" && x == "world" {
|
||||
|
||||
|
||||
|
||||
if y == "world" || y == "hello" {
|
||||
println!("Hello world!");
|
||||
}
|
||||
}
|
||||
|
||||
if x == "hello" || x == "world" {
|
||||
|
||||
|
||||
|
||||
if y == "world" && y == "hello" {
|
||||
println!("Hello world!");
|
||||
}
|
||||
}
|
||||
|
||||
if x == "hello" && x == "world" {
|
||||
|
||||
|
||||
|
||||
if y == "world" && y == "hello" {
|
||||
println!("Hello world!");
|
||||
}
|
||||
}
|
||||
|
||||
if 42 == 1337 {
|
||||
|
||||
|
||||
|
||||
if 'a' != 'A' {
|
||||
println!("world!")
|
||||
}
|
||||
|
@ -63,9 +45,6 @@ fn main() {
|
|||
if x == "hello" {
|
||||
print!("Hello ");
|
||||
} else {
|
||||
|
||||
|
||||
|
||||
if y == "world" {
|
||||
println!("world!")
|
||||
}
|
||||
|
@ -74,9 +53,6 @@ fn main() {
|
|||
if x == "hello" {
|
||||
print!("Hello ");
|
||||
} else {
|
||||
|
||||
|
||||
|
||||
if let Some(42) = Some(42) {
|
||||
println!("world!")
|
||||
}
|
||||
|
@ -85,9 +61,6 @@ fn main() {
|
|||
if x == "hello" {
|
||||
print!("Hello ");
|
||||
} else {
|
||||
|
||||
|
||||
|
||||
if y == "world" {
|
||||
println!("world")
|
||||
}
|
||||
|
@ -99,9 +72,6 @@ fn main() {
|
|||
if x == "hello" {
|
||||
print!("Hello ");
|
||||
} else {
|
||||
|
||||
|
||||
|
||||
if let Some(42) = Some(42) {
|
||||
println!("world")
|
||||
}
|
||||
|
@ -113,9 +83,6 @@ fn main() {
|
|||
if let Some(42) = Some(42) {
|
||||
print!("Hello ");
|
||||
} else {
|
||||
|
||||
|
||||
|
||||
if let Some(42) = Some(42) {
|
||||
println!("world")
|
||||
}
|
||||
|
@ -127,9 +94,6 @@ fn main() {
|
|||
if let Some(42) = Some(42) {
|
||||
print!("Hello ");
|
||||
} else {
|
||||
|
||||
|
||||
|
||||
if x == "hello" {
|
||||
println!("world")
|
||||
}
|
||||
|
@ -141,9 +105,6 @@ fn main() {
|
|||
if let Some(42) = Some(42) {
|
||||
print!("Hello ");
|
||||
} else {
|
||||
|
||||
|
||||
|
||||
if let Some(42) = Some(42) {
|
||||
println!("world")
|
||||
}
|
||||
|
|
|
@ -2,12 +2,10 @@ error: this if statement can be collapsed
|
|||
--> $DIR/collapsible_if.rs:8:5
|
||||
|
|
||||
8 | / if x == "hello" {
|
||||
9 | |
|
||||
10 | |
|
||||
11 | |
|
||||
... |
|
||||
14 | | }
|
||||
15 | | }
|
||||
9 | | if y == "world" {
|
||||
10 | | println!("Hello world!");
|
||||
11 | | }
|
||||
12 | | }
|
||||
| |_____^
|
||||
|
|
||||
note: lint level defined here
|
||||
|
@ -21,15 +19,13 @@ help: try
|
|||
| }
|
||||
|
||||
error: this if statement can be collapsed
|
||||
--> $DIR/collapsible_if.rs:17:5
|
||||
--> $DIR/collapsible_if.rs:14:5
|
||||
|
|
||||
17 | / if x == "hello" || x == "world" {
|
||||
18 | |
|
||||
19 | |
|
||||
20 | |
|
||||
... |
|
||||
23 | | }
|
||||
24 | | }
|
||||
14 | / if x == "hello" || x == "world" {
|
||||
15 | | if y == "world" || y == "hello" {
|
||||
16 | | println!("Hello world!");
|
||||
17 | | }
|
||||
18 | | }
|
||||
| |_____^
|
||||
|
|
||||
help: try
|
||||
|
@ -38,15 +34,13 @@ help: try
|
|||
| }
|
||||
|
||||
error: this if statement can be collapsed
|
||||
--> $DIR/collapsible_if.rs:26:5
|
||||
--> $DIR/collapsible_if.rs:20:5
|
||||
|
|
||||
26 | / if x == "hello" && x == "world" {
|
||||
27 | |
|
||||
28 | |
|
||||
29 | |
|
||||
... |
|
||||
32 | | }
|
||||
33 | | }
|
||||
20 | / if x == "hello" && x == "world" {
|
||||
21 | | if y == "world" || y == "hello" {
|
||||
22 | | println!("Hello world!");
|
||||
23 | | }
|
||||
24 | | }
|
||||
| |_____^
|
||||
|
|
||||
help: try
|
||||
|
@ -55,15 +49,13 @@ help: try
|
|||
| }
|
||||
|
||||
error: this if statement can be collapsed
|
||||
--> $DIR/collapsible_if.rs:35:5
|
||||
--> $DIR/collapsible_if.rs:26:5
|
||||
|
|
||||
35 | / if x == "hello" || x == "world" {
|
||||
36 | |
|
||||
37 | |
|
||||
38 | |
|
||||
... |
|
||||
41 | | }
|
||||
42 | | }
|
||||
26 | / if x == "hello" || x == "world" {
|
||||
27 | | if y == "world" && y == "hello" {
|
||||
28 | | println!("Hello world!");
|
||||
29 | | }
|
||||
30 | | }
|
||||
| |_____^
|
||||
|
|
||||
help: try
|
||||
|
@ -72,15 +64,13 @@ help: try
|
|||
| }
|
||||
|
||||
error: this if statement can be collapsed
|
||||
--> $DIR/collapsible_if.rs:44:5
|
||||
--> $DIR/collapsible_if.rs:32:5
|
||||
|
|
||||
44 | / if x == "hello" && x == "world" {
|
||||
45 | |
|
||||
46 | |
|
||||
47 | |
|
||||
... |
|
||||
50 | | }
|
||||
51 | | }
|
||||
32 | / if x == "hello" && x == "world" {
|
||||
33 | | if y == "world" && y == "hello" {
|
||||
34 | | println!("Hello world!");
|
||||
35 | | }
|
||||
36 | | }
|
||||
| |_____^
|
||||
|
|
||||
help: try
|
||||
|
@ -89,15 +79,13 @@ help: try
|
|||
| }
|
||||
|
||||
error: this if statement can be collapsed
|
||||
--> $DIR/collapsible_if.rs:53:5
|
||||
--> $DIR/collapsible_if.rs:38:5
|
||||
|
|
||||
53 | / if 42 == 1337 {
|
||||
54 | |
|
||||
55 | |
|
||||
56 | |
|
||||
... |
|
||||
59 | | }
|
||||
60 | | }
|
||||
38 | / if 42 == 1337 {
|
||||
39 | | if 'a' != 'A' {
|
||||
40 | | println!("world!")
|
||||
41 | | }
|
||||
42 | | }
|
||||
| |_____^
|
||||
|
|
||||
help: try
|
||||
|
@ -106,16 +94,14 @@ help: try
|
|||
| }
|
||||
|
||||
error: this `else { if .. }` block can be collapsed
|
||||
--> $DIR/collapsible_if.rs:65:12
|
||||
--> $DIR/collapsible_if.rs:47:12
|
||||
|
|
||||
65 | } else {
|
||||
47 | } else {
|
||||
| ____________^
|
||||
66 | |
|
||||
67 | |
|
||||
68 | |
|
||||
... |
|
||||
71 | | }
|
||||
72 | | }
|
||||
48 | | if y == "world" {
|
||||
49 | | println!("world!")
|
||||
50 | | }
|
||||
51 | | }
|
||||
| |_____^
|
||||
|
|
||||
help: try
|
||||
|
@ -124,16 +110,14 @@ help: try
|
|||
| }
|
||||
|
||||
error: this `else { if .. }` block can be collapsed
|
||||
--> $DIR/collapsible_if.rs:76:12
|
||||
--> $DIR/collapsible_if.rs:55:12
|
||||
|
|
||||
76 | } else {
|
||||
55 | } else {
|
||||
| ____________^
|
||||
77 | |
|
||||
78 | |
|
||||
79 | |
|
||||
... |
|
||||
82 | | }
|
||||
83 | | }
|
||||
56 | | if let Some(42) = Some(42) {
|
||||
57 | | println!("world!")
|
||||
58 | | }
|
||||
59 | | }
|
||||
| |_____^
|
||||
|
|
||||
help: try
|
||||
|
@ -142,16 +126,16 @@ help: try
|
|||
| }
|
||||
|
||||
error: this `else { if .. }` block can be collapsed
|
||||
--> $DIR/collapsible_if.rs:87:12
|
||||
--> $DIR/collapsible_if.rs:63:12
|
||||
|
|
||||
87 | } else {
|
||||
63 | } else {
|
||||
| ____________^
|
||||
88 | |
|
||||
89 | |
|
||||
90 | |
|
||||
64 | | if y == "world" {
|
||||
65 | | println!("world")
|
||||
66 | | }
|
||||
... |
|
||||
96 | | }
|
||||
97 | | }
|
||||
69 | | }
|
||||
70 | | }
|
||||
| |_____^
|
||||
|
|
||||
help: try
|
||||
|
@ -163,58 +147,58 @@ help: try
|
|||
| }
|
||||
|
||||
error: this `else { if .. }` block can be collapsed
|
||||
--> $DIR/collapsible_if.rs:101:12
|
||||
|
|
||||
101 | } else {
|
||||
| ____________^
|
||||
102 | |
|
||||
103 | |
|
||||
104 | |
|
||||
... |
|
||||
110 | | }
|
||||
111 | | }
|
||||
| |_____^
|
||||
|
|
||||
--> $DIR/collapsible_if.rs:74:12
|
||||
|
|
||||
74 | } else {
|
||||
| ____________^
|
||||
75 | | if let Some(42) = Some(42) {
|
||||
76 | | println!("world")
|
||||
77 | | }
|
||||
... |
|
||||
80 | | }
|
||||
81 | | }
|
||||
| |_____^
|
||||
|
|
||||
help: try
|
||||
| } else if let Some(42) = Some(42) {
|
||||
| println!("world")
|
||||
| }
|
||||
| else {
|
||||
| println!("!")
|
||||
| }
|
||||
| } else if let Some(42) = Some(42) {
|
||||
| println!("world")
|
||||
| }
|
||||
| else {
|
||||
| println!("!")
|
||||
| }
|
||||
|
||||
error: this `else { if .. }` block can be collapsed
|
||||
--> $DIR/collapsible_if.rs:115:12
|
||||
|
|
||||
115 | } else {
|
||||
| ____________^
|
||||
116 | |
|
||||
117 | |
|
||||
118 | |
|
||||
... |
|
||||
124 | | }
|
||||
125 | | }
|
||||
| |_____^
|
||||
|
|
||||
--> $DIR/collapsible_if.rs:85:12
|
||||
|
|
||||
85 | } else {
|
||||
| ____________^
|
||||
86 | | if let Some(42) = Some(42) {
|
||||
87 | | println!("world")
|
||||
88 | | }
|
||||
... |
|
||||
91 | | }
|
||||
92 | | }
|
||||
| |_____^
|
||||
|
|
||||
help: try
|
||||
| } else if let Some(42) = Some(42) {
|
||||
| println!("world")
|
||||
| }
|
||||
| else {
|
||||
| println!("!")
|
||||
| }
|
||||
| } else if let Some(42) = Some(42) {
|
||||
| println!("world")
|
||||
| }
|
||||
| else {
|
||||
| println!("!")
|
||||
| }
|
||||
|
||||
error: this `else { if .. }` block can be collapsed
|
||||
--> $DIR/collapsible_if.rs:129:12
|
||||
--> $DIR/collapsible_if.rs:96:12
|
||||
|
|
||||
129 | } else {
|
||||
96 | } else {
|
||||
| ____________^
|
||||
130 | |
|
||||
131 | |
|
||||
132 | |
|
||||
97 | | if x == "hello" {
|
||||
98 | | println!("world")
|
||||
99 | | }
|
||||
... |
|
||||
138 | | }
|
||||
139 | | }
|
||||
102 | | }
|
||||
103 | | }
|
||||
| |_____^
|
||||
|
|
||||
help: try
|
||||
|
@ -226,16 +210,16 @@ help: try
|
|||
| }
|
||||
|
||||
error: this `else { if .. }` block can be collapsed
|
||||
--> $DIR/collapsible_if.rs:143:12
|
||||
--> $DIR/collapsible_if.rs:107:12
|
||||
|
|
||||
143 | } else {
|
||||
107 | } else {
|
||||
| ____________^
|
||||
144 | |
|
||||
145 | |
|
||||
146 | |
|
||||
108 | | if let Some(42) = Some(42) {
|
||||
109 | | println!("world")
|
||||
110 | | }
|
||||
... |
|
||||
152 | | }
|
||||
153 | | }
|
||||
113 | | }
|
||||
114 | | }
|
||||
| |_____^
|
||||
|
|
||||
help: try
|
||||
|
|
|
@ -18,9 +18,6 @@ fn main() {
|
|||
|
||||
match (42, Some(1337), Some(0)) {
|
||||
(toto, Some(tata), titi @ Some(_)) => (),
|
||||
|
||||
|
||||
|
||||
_ => (),
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,5 +2,4 @@
|
|||
#![feature(plugin)]
|
||||
#![plugin(clippy(conf_file=42))]
|
||||
|
||||
|
||||
fn main() {}
|
||||
|
|
|
@ -28,7 +28,6 @@ pub enum Abc {
|
|||
#[deny(match_same_arms)]
|
||||
fn if_same_then_else() -> Result<&'static str, ()> {
|
||||
if true {
|
||||
|
||||
Foo { bar: 42 };
|
||||
0..10;
|
||||
..;
|
||||
|
@ -78,8 +77,6 @@ fn if_same_then_else() -> Result<&'static str, ()> {
|
|||
|
||||
let _ = match 42 {
|
||||
42 => {
|
||||
|
||||
|
||||
foo();
|
||||
let mut a = 42 + [23].len() as i32;
|
||||
if true {
|
||||
|
@ -101,8 +98,6 @@ fn if_same_then_else() -> Result<&'static str, ()> {
|
|||
|
||||
let _ = match Abc::A {
|
||||
Abc::A => 0,
|
||||
|
||||
|
||||
Abc::B => 1,
|
||||
_ => 0,
|
||||
};
|
||||
|
@ -112,7 +107,6 @@ fn if_same_then_else() -> Result<&'static str, ()> {
|
|||
}
|
||||
|
||||
let _ = if true {
|
||||
|
||||
42
|
||||
}
|
||||
else {
|
||||
|
@ -120,7 +114,6 @@ fn if_same_then_else() -> Result<&'static str, ()> {
|
|||
};
|
||||
|
||||
if true {
|
||||
|
||||
for _ in &[42] {
|
||||
let foo: &Option<_> = &Some::<u8>(42);
|
||||
if true {
|
||||
|
@ -142,7 +135,6 @@ fn if_same_then_else() -> Result<&'static str, ()> {
|
|||
}
|
||||
|
||||
if true {
|
||||
|
||||
let bar = if true {
|
||||
42
|
||||
}
|
||||
|
@ -166,7 +158,6 @@ fn if_same_then_else() -> Result<&'static str, ()> {
|
|||
}
|
||||
|
||||
if true {
|
||||
|
||||
let _ = match 42 {
|
||||
42 => 1,
|
||||
a if a > 0 => 2,
|
||||
|
@ -187,7 +178,6 @@ fn if_same_then_else() -> Result<&'static str, ()> {
|
|||
}
|
||||
|
||||
if true {
|
||||
|
||||
if let Some(a) = Some(42) {}
|
||||
}
|
||||
else {
|
||||
|
@ -195,7 +185,6 @@ fn if_same_then_else() -> Result<&'static str, ()> {
|
|||
}
|
||||
|
||||
if true {
|
||||
|
||||
if let (1, .., 3) = (1, 2, 3) {}
|
||||
}
|
||||
else {
|
||||
|
@ -253,16 +242,12 @@ fn if_same_then_else() -> Result<&'static str, ()> {
|
|||
|
||||
let _ = match 42 {
|
||||
42 => foo(),
|
||||
|
||||
|
||||
51 => foo(),
|
||||
_ => true,
|
||||
};
|
||||
|
||||
let _ = match Some(42) {
|
||||
Some(_) => 24,
|
||||
|
||||
|
||||
None => 24,
|
||||
};
|
||||
|
||||
|
@ -285,37 +270,29 @@ fn if_same_then_else() -> Result<&'static str, ()> {
|
|||
|
||||
match (Some(42), Some(42)) {
|
||||
(Some(a), None) => bar(a),
|
||||
|
||||
|
||||
(None, Some(a)) => bar(a),
|
||||
_ => (),
|
||||
}
|
||||
|
||||
match (Some(42), Some(42)) {
|
||||
(Some(a), ..) => bar(a),
|
||||
|
||||
|
||||
(.., Some(a)) => bar(a),
|
||||
_ => (),
|
||||
}
|
||||
|
||||
match (1, 2, 3) {
|
||||
(1, .., 3) => 42,
|
||||
|
||||
|
||||
(.., 3) => 42,
|
||||
_ => 0,
|
||||
};
|
||||
|
||||
let _ = if true {
|
||||
|
||||
0.0
|
||||
} else {
|
||||
0.0
|
||||
};
|
||||
|
||||
let _ = if true {
|
||||
|
||||
-0.0
|
||||
} else {
|
||||
-0.0
|
||||
|
@ -336,7 +313,6 @@ fn if_same_then_else() -> Result<&'static str, ()> {
|
|||
|
||||
// Same NaNs
|
||||
let _ = if true {
|
||||
|
||||
std::f32::NAN
|
||||
} else {
|
||||
std::f32::NAN
|
||||
|
@ -354,7 +330,6 @@ fn if_same_then_else() -> Result<&'static str, ()> {
|
|||
}
|
||||
|
||||
if true {
|
||||
|
||||
try!(Ok("foo"));
|
||||
}
|
||||
else {
|
||||
|
@ -362,7 +337,6 @@ fn if_same_then_else() -> Result<&'static str, ()> {
|
|||
}
|
||||
|
||||
if true {
|
||||
|
||||
let foo = "";
|
||||
return Ok(&foo[0..]);
|
||||
}
|
||||
|
@ -383,19 +357,16 @@ fn ifs_same_cond() {
|
|||
let b = false;
|
||||
|
||||
if b {
|
||||
|
||||
}
|
||||
else if b {
|
||||
}
|
||||
|
||||
if a == 1 {
|
||||
|
||||
}
|
||||
else if a == 1 {
|
||||
}
|
||||
|
||||
if 2*a == 1 {
|
||||
|
||||
}
|
||||
else if 2*a == 2 {
|
||||
}
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
warning: This else block is redundant.
|
||||
|
||||
--> $DIR/copies.rs:128:20
|
||||
--> $DIR/copies.rs:121:20
|
||||
|
|
||||
128 | } else {
|
||||
121 | } else {
|
||||
| ____________________^
|
||||
129 | | continue;
|
||||
130 | | }
|
||||
122 | | continue;
|
||||
123 | | }
|
||||
| |_____________^
|
||||
|
|
||||
= note: #[warn(needless_continue)] on by default
|
||||
|
@ -18,12 +18,12 @@ warning: This else block is redundant.
|
|||
|
||||
warning: This else block is redundant.
|
||||
|
||||
--> $DIR/copies.rs:138:20
|
||||
--> $DIR/copies.rs:131:20
|
||||
|
|
||||
138 | } else {
|
||||
131 | } else {
|
||||
| ____________________^
|
||||
139 | | continue;
|
||||
140 | | }
|
||||
132 | | continue;
|
||||
133 | | }
|
||||
| |_____________^
|
||||
|
|
||||
= note: #[warn(needless_continue)] on by default
|
||||
|
@ -35,16 +35,16 @@ warning: This else block is redundant.
|
|||
|
||||
|
||||
error: this `if` has identical blocks
|
||||
--> $DIR/copies.rs:40:10
|
||||
--> $DIR/copies.rs:39:10
|
||||
|
|
||||
40 | else {
|
||||
39 | else {
|
||||
| __________^
|
||||
41 | | Foo { bar: 42 };
|
||||
42 | | 0..10;
|
||||
43 | | ..;
|
||||
40 | | Foo { bar: 42 };
|
||||
41 | | 0..10;
|
||||
42 | | ..;
|
||||
... |
|
||||
47 | | foo();
|
||||
48 | | }
|
||||
46 | | foo();
|
||||
47 | | }
|
||||
| |_____^
|
||||
|
|
||||
note: lint level defined here
|
||||
|
@ -57,25 +57,25 @@ note: same as this
|
|||
|
|
||||
30 | if true {
|
||||
| _____________^
|
||||
31 | |
|
||||
32 | | Foo { bar: 42 };
|
||||
33 | | 0..10;
|
||||
31 | | Foo { bar: 42 };
|
||||
32 | | 0..10;
|
||||
33 | | ..;
|
||||
... |
|
||||
38 | | foo();
|
||||
39 | | }
|
||||
37 | | foo();
|
||||
38 | | }
|
||||
| |_____^
|
||||
|
||||
error: this `match` has identical arm bodies
|
||||
--> $DIR/copies.rs:91:14
|
||||
--> $DIR/copies.rs:88:14
|
||||
|
|
||||
91 | _ => {
|
||||
88 | _ => {
|
||||
| ______________^
|
||||
92 | | foo();
|
||||
93 | | let mut a = 42 + [23].len() as i32;
|
||||
94 | | if true {
|
||||
89 | | foo();
|
||||
90 | | let mut a = 42 + [23].len() as i32;
|
||||
91 | | if true {
|
||||
... |
|
||||
98 | | a
|
||||
99 | | }
|
||||
95 | | a
|
||||
96 | | }
|
||||
| |_________^
|
||||
|
|
||||
note: lint level defined here
|
||||
|
@ -84,403 +84,395 @@ note: lint level defined here
|
|||
28 | #[deny(match_same_arms)]
|
||||
| ^^^^^^^^^^^^^^^
|
||||
note: same as this
|
||||
--> $DIR/copies.rs:80:15
|
||||
--> $DIR/copies.rs:79:15
|
||||
|
|
||||
80 | 42 => {
|
||||
79 | 42 => {
|
||||
| _______________^
|
||||
81 | |
|
||||
82 | |
|
||||
83 | | foo();
|
||||
80 | | foo();
|
||||
81 | | let mut a = 42 + [23].len() as i32;
|
||||
82 | | if true {
|
||||
... |
|
||||
89 | | a
|
||||
90 | | }
|
||||
86 | | a
|
||||
87 | | }
|
||||
| |_________^
|
||||
note: `42` has the same arm body as the `_` wildcard, consider removing it`
|
||||
--> $DIR/copies.rs:80:15
|
||||
--> $DIR/copies.rs:79:15
|
||||
|
|
||||
80 | 42 => {
|
||||
79 | 42 => {
|
||||
| _______________^
|
||||
81 | |
|
||||
82 | |
|
||||
83 | | foo();
|
||||
80 | | foo();
|
||||
81 | | let mut a = 42 + [23].len() as i32;
|
||||
82 | | if true {
|
||||
... |
|
||||
89 | | a
|
||||
90 | | }
|
||||
86 | | a
|
||||
87 | | }
|
||||
| |_________^
|
||||
|
||||
error: this `match` has identical arm bodies
|
||||
--> $DIR/copies.rs:107:14
|
||||
--> $DIR/copies.rs:102:14
|
||||
|
|
||||
107 | _ => 0,
|
||||
102 | _ => 0,
|
||||
| ^
|
||||
|
|
||||
note: same as this
|
||||
--> $DIR/copies.rs:103:19
|
||||
--> $DIR/copies.rs:100:19
|
||||
|
|
||||
103 | Abc::A => 0,
|
||||
100 | Abc::A => 0,
|
||||
| ^
|
||||
note: `Abc::A` has the same arm body as the `_` wildcard, consider removing it`
|
||||
--> $DIR/copies.rs:103:19
|
||||
--> $DIR/copies.rs:100:19
|
||||
|
|
||||
103 | Abc::A => 0,
|
||||
100 | Abc::A => 0,
|
||||
| ^
|
||||
|
||||
error: this `if` has identical blocks
|
||||
--> $DIR/copies.rs:118:10
|
||||
--> $DIR/copies.rs:112:10
|
||||
|
|
||||
118 | else {
|
||||
112 | else {
|
||||
| __________^
|
||||
119 | | 42
|
||||
120 | | };
|
||||
113 | | 42
|
||||
114 | | };
|
||||
| |_____^
|
||||
|
|
||||
note: same as this
|
||||
--> $DIR/copies.rs:114:21
|
||||
--> $DIR/copies.rs:109:21
|
||||
|
|
||||
114 | let _ = if true {
|
||||
109 | let _ = if true {
|
||||
| _____________________^
|
||||
115 | |
|
||||
116 | | 42
|
||||
117 | | }
|
||||
110 | | 42
|
||||
111 | | }
|
||||
| |_____^
|
||||
|
||||
error: this `if` has identical blocks
|
||||
--> $DIR/copies.rs:133:10
|
||||
--> $DIR/copies.rs:126:10
|
||||
|
|
||||
133 | else {
|
||||
126 | else {
|
||||
| __________^
|
||||
134 | | for _ in &[42] {
|
||||
135 | | let foo: &Option<_> = &Some::<u8>(42);
|
||||
136 | | if true {
|
||||
127 | | for _ in &[42] {
|
||||
128 | | let foo: &Option<_> = &Some::<u8>(42);
|
||||
129 | | if true {
|
||||
... |
|
||||
141 | | }
|
||||
142 | | }
|
||||
134 | | }
|
||||
135 | | }
|
||||
| |_____^
|
||||
|
|
||||
note: same as this
|
||||
--> $DIR/copies.rs:122:13
|
||||
--> $DIR/copies.rs:116:13
|
||||
|
|
||||
122 | if true {
|
||||
116 | if true {
|
||||
| _____________^
|
||||
123 | |
|
||||
124 | | for _ in &[42] {
|
||||
125 | | let foo: &Option<_> = &Some::<u8>(42);
|
||||
117 | | for _ in &[42] {
|
||||
118 | | let foo: &Option<_> = &Some::<u8>(42);
|
||||
119 | | if true {
|
||||
... |
|
||||
131 | | }
|
||||
132 | | }
|
||||
124 | | }
|
||||
125 | | }
|
||||
| |_____^
|
||||
|
||||
error: this `if` has identical blocks
|
||||
--> $DIR/copies.rs:156:10
|
||||
--> $DIR/copies.rs:148:10
|
||||
|
|
||||
156 | else {
|
||||
148 | else {
|
||||
| __________^
|
||||
157 | | let bar = if true {
|
||||
158 | | 42
|
||||
159 | | }
|
||||
149 | | let bar = if true {
|
||||
150 | | 42
|
||||
151 | | }
|
||||
... |
|
||||
165 | | bar + 1;
|
||||
166 | | }
|
||||
157 | | bar + 1;
|
||||
158 | | }
|
||||
| |_____^
|
||||
|
|
||||
note: same as this
|
||||
--> $DIR/copies.rs:144:13
|
||||
--> $DIR/copies.rs:137:13
|
||||
|
|
||||
144 | if true {
|
||||
137 | if true {
|
||||
| _____________^
|
||||
145 | |
|
||||
146 | | let bar = if true {
|
||||
147 | | 42
|
||||
138 | | let bar = if true {
|
||||
139 | | 42
|
||||
140 | | }
|
||||
... |
|
||||
154 | | bar + 1;
|
||||
155 | | }
|
||||
146 | | bar + 1;
|
||||
147 | | }
|
||||
| |_____^
|
||||
|
||||
error: this `if` has identical blocks
|
||||
--> $DIR/copies.rs:180:19
|
||||
--> $DIR/copies.rs:171:19
|
||||
|
|
||||
180 | else if foo() {
|
||||
171 | else if foo() {
|
||||
| ___________________^
|
||||
181 | | let _ = match 42 {
|
||||
182 | | 42 => 1,
|
||||
183 | | a if a > 0 => 2,
|
||||
172 | | let _ = match 42 {
|
||||
173 | | 42 => 1,
|
||||
174 | | a if a > 0 => 2,
|
||||
... |
|
||||
186 | | };
|
||||
187 | | }
|
||||
177 | | };
|
||||
178 | | }
|
||||
| |_____^
|
||||
|
|
||||
note: same as this
|
||||
--> $DIR/copies.rs:168:13
|
||||
--> $DIR/copies.rs:160:13
|
||||
|
|
||||
168 | if true {
|
||||
160 | if true {
|
||||
| _____________^
|
||||
169 | |
|
||||
170 | | let _ = match 42 {
|
||||
171 | | 42 => 1,
|
||||
161 | | let _ = match 42 {
|
||||
162 | | 42 => 1,
|
||||
163 | | a if a > 0 => 2,
|
||||
... |
|
||||
175 | | };
|
||||
176 | | }
|
||||
166 | | };
|
||||
167 | | }
|
||||
| |_____^
|
||||
|
||||
error: this `if` has identical blocks
|
||||
--> $DIR/copies.rs:193:10
|
||||
--> $DIR/copies.rs:183:10
|
||||
|
|
||||
193 | else {
|
||||
183 | else {
|
||||
| __________^
|
||||
194 | | if let Some(a) = Some(42) {}
|
||||
195 | | }
|
||||
184 | | if let Some(a) = Some(42) {}
|
||||
185 | | }
|
||||
| |_____^
|
||||
|
|
||||
note: same as this
|
||||
--> $DIR/copies.rs:189:13
|
||||
--> $DIR/copies.rs:180:13
|
||||
|
|
||||
189 | if true {
|
||||
180 | if true {
|
||||
| _____________^
|
||||
190 | |
|
||||
191 | | if let Some(a) = Some(42) {}
|
||||
181 | | if let Some(a) = Some(42) {}
|
||||
182 | | }
|
||||
| |_____^
|
||||
|
||||
error: this `if` has identical blocks
|
||||
--> $DIR/copies.rs:190:10
|
||||
|
|
||||
190 | else {
|
||||
| __________^
|
||||
191 | | if let (1, .., 3) = (1, 2, 3) {}
|
||||
192 | | }
|
||||
| |_____^
|
||||
|
||||
error: this `if` has identical blocks
|
||||
--> $DIR/copies.rs:201:10
|
||||
|
|
||||
201 | else {
|
||||
| __________^
|
||||
202 | | if let (1, .., 3) = (1, 2, 3) {}
|
||||
203 | | }
|
||||
| |_____^
|
||||
|
|
||||
note: same as this
|
||||
--> $DIR/copies.rs:197:13
|
||||
--> $DIR/copies.rs:187:13
|
||||
|
|
||||
197 | if true {
|
||||
187 | if true {
|
||||
| _____________^
|
||||
198 | |
|
||||
199 | | if let (1, .., 3) = (1, 2, 3) {}
|
||||
200 | | }
|
||||
188 | | if let (1, .., 3) = (1, 2, 3) {}
|
||||
189 | | }
|
||||
| |_____^
|
||||
|
||||
error: this `match` has identical arm bodies
|
||||
--> $DIR/copies.rs:258:15
|
||||
--> $DIR/copies.rs:245:15
|
||||
|
|
||||
258 | 51 => foo(),
|
||||
245 | 51 => foo(),
|
||||
| ^^^^^
|
||||
|
|
||||
note: same as this
|
||||
--> $DIR/copies.rs:255:15
|
||||
--> $DIR/copies.rs:244:15
|
||||
|
|
||||
255 | 42 => foo(),
|
||||
244 | 42 => foo(),
|
||||
| ^^^^^
|
||||
note: consider refactoring into `42 | 51`
|
||||
--> $DIR/copies.rs:255:15
|
||||
--> $DIR/copies.rs:244:15
|
||||
|
|
||||
255 | 42 => foo(),
|
||||
244 | 42 => foo(),
|
||||
| ^^^^^
|
||||
|
||||
error: this `match` has identical arm bodies
|
||||
--> $DIR/copies.rs:266:17
|
||||
--> $DIR/copies.rs:251:17
|
||||
|
|
||||
266 | None => 24,
|
||||
251 | None => 24,
|
||||
| ^^
|
||||
|
|
||||
note: same as this
|
||||
--> $DIR/copies.rs:263:20
|
||||
--> $DIR/copies.rs:250:20
|
||||
|
|
||||
263 | Some(_) => 24,
|
||||
250 | Some(_) => 24,
|
||||
| ^^
|
||||
note: consider refactoring into `Some(_) | None`
|
||||
--> $DIR/copies.rs:263:20
|
||||
--> $DIR/copies.rs:250:20
|
||||
|
|
||||
263 | Some(_) => 24,
|
||||
250 | Some(_) => 24,
|
||||
| ^^
|
||||
|
||||
error: this `match` has identical arm bodies
|
||||
--> $DIR/copies.rs:290:28
|
||||
--> $DIR/copies.rs:273:28
|
||||
|
|
||||
290 | (None, Some(a)) => bar(a),
|
||||
273 | (None, Some(a)) => bar(a),
|
||||
| ^^^^^^
|
||||
|
|
||||
note: same as this
|
||||
--> $DIR/copies.rs:287:28
|
||||
--> $DIR/copies.rs:272:28
|
||||
|
|
||||
287 | (Some(a), None) => bar(a),
|
||||
272 | (Some(a), None) => bar(a),
|
||||
| ^^^^^^
|
||||
note: consider refactoring into `(Some(a), None) | (None, Some(a))`
|
||||
--> $DIR/copies.rs:287:28
|
||||
--> $DIR/copies.rs:272:28
|
||||
|
|
||||
287 | (Some(a), None) => bar(a),
|
||||
272 | (Some(a), None) => bar(a),
|
||||
| ^^^^^^
|
||||
|
||||
error: this `match` has identical arm bodies
|
||||
--> $DIR/copies.rs:298:26
|
||||
--> $DIR/copies.rs:279:26
|
||||
|
|
||||
298 | (.., Some(a)) => bar(a),
|
||||
279 | (.., Some(a)) => bar(a),
|
||||
| ^^^^^^
|
||||
|
|
||||
note: same as this
|
||||
--> $DIR/copies.rs:295:26
|
||||
--> $DIR/copies.rs:278:26
|
||||
|
|
||||
295 | (Some(a), ..) => bar(a),
|
||||
278 | (Some(a), ..) => bar(a),
|
||||
| ^^^^^^
|
||||
note: consider refactoring into `(Some(a), ..) | (.., Some(a))`
|
||||
--> $DIR/copies.rs:295:26
|
||||
--> $DIR/copies.rs:278:26
|
||||
|
|
||||
295 | (Some(a), ..) => bar(a),
|
||||
278 | (Some(a), ..) => bar(a),
|
||||
| ^^^^^^
|
||||
|
||||
error: this `match` has identical arm bodies
|
||||
--> $DIR/copies.rs:306:20
|
||||
--> $DIR/copies.rs:285:20
|
||||
|
|
||||
306 | (.., 3) => 42,
|
||||
285 | (.., 3) => 42,
|
||||
| ^^
|
||||
|
|
||||
note: same as this
|
||||
--> $DIR/copies.rs:303:23
|
||||
--> $DIR/copies.rs:284:23
|
||||
|
|
||||
303 | (1, .., 3) => 42,
|
||||
284 | (1, .., 3) => 42,
|
||||
| ^^
|
||||
note: consider refactoring into `(1, .., 3) | (.., 3)`
|
||||
--> $DIR/copies.rs:303:23
|
||||
--> $DIR/copies.rs:284:23
|
||||
|
|
||||
303 | (1, .., 3) => 42,
|
||||
284 | (1, .., 3) => 42,
|
||||
| ^^
|
||||
|
||||
error: this `if` has identical blocks
|
||||
--> $DIR/copies.rs:313:12
|
||||
--> $DIR/copies.rs:291:12
|
||||
|
|
||||
313 | } else {
|
||||
291 | } else {
|
||||
| ____________^
|
||||
314 | | 0.0
|
||||
315 | | };
|
||||
292 | | 0.0
|
||||
293 | | };
|
||||
| |_____^
|
||||
|
|
||||
note: same as this
|
||||
--> $DIR/copies.rs:310:21
|
||||
--> $DIR/copies.rs:289:21
|
||||
|
|
||||
310 | let _ = if true {
|
||||
289 | let _ = if true {
|
||||
| _____________________^
|
||||
311 | |
|
||||
312 | | 0.0
|
||||
313 | | } else {
|
||||
290 | | 0.0
|
||||
291 | | } else {
|
||||
| |_____^
|
||||
|
||||
error: this `if` has identical blocks
|
||||
--> $DIR/copies.rs:320:12
|
||||
--> $DIR/copies.rs:297:12
|
||||
|
|
||||
320 | } else {
|
||||
297 | } else {
|
||||
| ____________^
|
||||
321 | | -0.0
|
||||
322 | | };
|
||||
298 | | -0.0
|
||||
299 | | };
|
||||
| |_____^
|
||||
|
|
||||
note: same as this
|
||||
--> $DIR/copies.rs:317:21
|
||||
--> $DIR/copies.rs:295:21
|
||||
|
|
||||
317 | let _ = if true {
|
||||
295 | let _ = if true {
|
||||
| _____________________^
|
||||
318 | |
|
||||
319 | | -0.0
|
||||
320 | | } else {
|
||||
296 | | -0.0
|
||||
297 | | } else {
|
||||
| |_____^
|
||||
|
||||
error: this `if` has identical blocks
|
||||
--> $DIR/copies.rs:341:12
|
||||
--> $DIR/copies.rs:317:12
|
||||
|
|
||||
341 | } else {
|
||||
317 | } else {
|
||||
| ____________^
|
||||
342 | | std::f32::NAN
|
||||
343 | | };
|
||||
318 | | std::f32::NAN
|
||||
319 | | };
|
||||
| |_____^
|
||||
|
|
||||
note: same as this
|
||||
--> $DIR/copies.rs:338:21
|
||||
--> $DIR/copies.rs:315:21
|
||||
|
|
||||
338 | let _ = if true {
|
||||
315 | let _ = if true {
|
||||
| _____________________^
|
||||
339 | |
|
||||
340 | | std::f32::NAN
|
||||
341 | | } else {
|
||||
316 | | std::f32::NAN
|
||||
317 | | } else {
|
||||
| |_____^
|
||||
|
||||
error: this `if` has identical blocks
|
||||
--> $DIR/copies.rs:360:10
|
||||
--> $DIR/copies.rs:335:10
|
||||
|
|
||||
360 | else {
|
||||
335 | else {
|
||||
| __________^
|
||||
361 | | try!(Ok("foo"));
|
||||
362 | | }
|
||||
336 | | try!(Ok("foo"));
|
||||
337 | | }
|
||||
| |_____^
|
||||
|
|
||||
note: same as this
|
||||
--> $DIR/copies.rs:356:13
|
||||
--> $DIR/copies.rs:332:13
|
||||
|
|
||||
356 | if true {
|
||||
332 | if true {
|
||||
| _____________^
|
||||
357 | |
|
||||
358 | | try!(Ok("foo"));
|
||||
359 | | }
|
||||
333 | | try!(Ok("foo"));
|
||||
334 | | }
|
||||
| |_____^
|
||||
|
||||
error: this `if` has identical blocks
|
||||
--> $DIR/copies.rs:373:10
|
||||
--> $DIR/copies.rs:347:10
|
||||
|
|
||||
373 | else {
|
||||
347 | else {
|
||||
| __________^
|
||||
374 | | let foo = "";
|
||||
375 | | return Ok(&foo[0..]);
|
||||
376 | | }
|
||||
348 | | let foo = "";
|
||||
349 | | return Ok(&foo[0..]);
|
||||
350 | | }
|
||||
| |_____^
|
||||
|
|
||||
note: same as this
|
||||
--> $DIR/copies.rs:364:13
|
||||
--> $DIR/copies.rs:339:13
|
||||
|
|
||||
364 | if true {
|
||||
339 | if true {
|
||||
| _____________^
|
||||
365 | |
|
||||
366 | | let foo = "";
|
||||
367 | | return Ok(&foo[0..]);
|
||||
368 | | }
|
||||
340 | | let foo = "";
|
||||
341 | | return Ok(&foo[0..]);
|
||||
342 | | }
|
||||
| |_____^
|
||||
|
||||
error: this `if` has the same condition as a previous if
|
||||
--> $DIR/copies.rs:388:13
|
||||
--> $DIR/copies.rs:361:13
|
||||
|
|
||||
388 | else if b {
|
||||
361 | else if b {
|
||||
| ^
|
||||
|
|
||||
note: lint level defined here
|
||||
--> $DIR/copies.rs:379:8
|
||||
--> $DIR/copies.rs:353:8
|
||||
|
|
||||
379 | #[deny(ifs_same_cond)]
|
||||
353 | #[deny(ifs_same_cond)]
|
||||
| ^^^^^^^^^^^^^
|
||||
note: same as this
|
||||
--> $DIR/copies.rs:385:8
|
||||
--> $DIR/copies.rs:359:8
|
||||
|
|
||||
385 | if b {
|
||||
359 | if b {
|
||||
| ^
|
||||
|
||||
error: this `if` has the same condition as a previous if
|
||||
--> $DIR/copies.rs:394:13
|
||||
--> $DIR/copies.rs:366:13
|
||||
|
|
||||
394 | else if a == 1 {
|
||||
366 | else if a == 1 {
|
||||
| ^^^^^^
|
||||
|
|
||||
note: same as this
|
||||
--> $DIR/copies.rs:391:8
|
||||
--> $DIR/copies.rs:364:8
|
||||
|
|
||||
391 | if a == 1 {
|
||||
364 | if a == 1 {
|
||||
| ^^^^^^
|
||||
|
||||
error: this `if` has the same condition as a previous if
|
||||
--> $DIR/copies.rs:402:13
|
||||
--> $DIR/copies.rs:373:13
|
||||
|
|
||||
402 | else if 2*a == 1 {
|
||||
373 | else if 2*a == 1 {
|
||||
| ^^^^^^^^
|
||||
|
|
||||
note: same as this
|
||||
--> $DIR/copies.rs:397:8
|
||||
--> $DIR/copies.rs:369:8
|
||||
|
|
||||
397 | if 2*a == 1 {
|
||||
369 | if 2*a == 1 {
|
||||
| ^^^^^^^^
|
||||
|
||||
error: aborting due to 22 previous errors
|
||||
|
|
|
@ -16,7 +16,6 @@ impl PartialEq<u64> for Foo {
|
|||
}
|
||||
|
||||
#[derive(Hash)]
|
||||
|
||||
struct Bar;
|
||||
|
||||
impl PartialEq for Bar {
|
||||
|
@ -24,7 +23,6 @@ impl PartialEq for Bar {
|
|||
}
|
||||
|
||||
#[derive(Hash)]
|
||||
|
||||
struct Baz;
|
||||
|
||||
impl PartialEq<Baz> for Baz {
|
||||
|
@ -35,7 +33,6 @@ impl PartialEq<Baz> for Baz {
|
|||
struct Bah;
|
||||
|
||||
impl Hash for Bah {
|
||||
|
||||
fn hash<H: Hasher>(&self, _: &mut H) {}
|
||||
}
|
||||
|
||||
|
@ -43,7 +40,6 @@ impl Hash for Bah {
|
|||
struct Qux;
|
||||
|
||||
impl Clone for Qux {
|
||||
|
||||
fn clone(&self) -> Self { Qux }
|
||||
}
|
||||
|
||||
|
@ -68,7 +64,6 @@ struct Lt<'a> {
|
|||
}
|
||||
|
||||
impl<'a> Clone for Lt<'a> {
|
||||
|
||||
fn clone(&self) -> Self { unimplemented!() }
|
||||
}
|
||||
|
||||
|
|
|
@ -11,51 +11,49 @@ note: lint level defined here
|
|||
6 | #![deny(warnings)]
|
||||
| ^^^^^^^^
|
||||
note: `PartialEq` implemented here
|
||||
--> $DIR/derive.rs:22:1
|
||||
--> $DIR/derive.rs:21:1
|
||||
|
|
||||
22 | / impl PartialEq for Bar {
|
||||
23 | | fn eq(&self, _: &Bar) -> bool { true }
|
||||
24 | | }
|
||||
21 | / impl PartialEq for Bar {
|
||||
22 | | fn eq(&self, _: &Bar) -> bool { true }
|
||||
23 | | }
|
||||
| |_^
|
||||
|
||||
error: you are deriving `Hash` but have implemented `PartialEq` explicitly
|
||||
--> $DIR/derive.rs:26:10
|
||||
--> $DIR/derive.rs:25:10
|
||||
|
|
||||
26 | #[derive(Hash)]
|
||||
25 | #[derive(Hash)]
|
||||
| ^^^^
|
||||
|
|
||||
= note: #[deny(derive_hash_xor_eq)] implied by #[deny(warnings)]
|
||||
note: `PartialEq` implemented here
|
||||
--> $DIR/derive.rs:30:1
|
||||
--> $DIR/derive.rs:28:1
|
||||
|
|
||||
30 | / impl PartialEq<Baz> for Baz {
|
||||
31 | | fn eq(&self, _: &Baz) -> bool { true }
|
||||
32 | | }
|
||||
28 | / impl PartialEq<Baz> for Baz {
|
||||
29 | | fn eq(&self, _: &Baz) -> bool { true }
|
||||
30 | | }
|
||||
| |_^
|
||||
|
||||
error: you are implementing `Hash` explicitly but have derived `PartialEq`
|
||||
--> $DIR/derive.rs:37:1
|
||||
--> $DIR/derive.rs:35:1
|
||||
|
|
||||
37 | / impl Hash for Bah {
|
||||
38 | |
|
||||
39 | | fn hash<H: Hasher>(&self, _: &mut H) {}
|
||||
40 | | }
|
||||
35 | / impl Hash for Bah {
|
||||
36 | | fn hash<H: Hasher>(&self, _: &mut H) {}
|
||||
37 | | }
|
||||
| |_^
|
||||
|
|
||||
= note: #[deny(derive_hash_xor_eq)] implied by #[deny(warnings)]
|
||||
note: `PartialEq` implemented here
|
||||
--> $DIR/derive.rs:34:10
|
||||
--> $DIR/derive.rs:32:10
|
||||
|
|
||||
34 | #[derive(PartialEq)]
|
||||
32 | #[derive(PartialEq)]
|
||||
| ^^^^^^^^^
|
||||
|
||||
error: you are implementing `Clone` explicitly on a `Copy` type
|
||||
--> $DIR/derive.rs:45:1
|
||||
--> $DIR/derive.rs:42:1
|
||||
|
|
||||
45 | / impl Clone for Qux {
|
||||
46 | |
|
||||
47 | | fn clone(&self) -> Self { Qux }
|
||||
48 | | }
|
||||
42 | / impl Clone for Qux {
|
||||
43 | | fn clone(&self) -> Self { Qux }
|
||||
44 | | }
|
||||
| |_^
|
||||
|
|
||||
= note: #[deny(expl_impl_clone_on_copy)] implied by #[deny(warnings)]
|
||||
|
@ -65,31 +63,28 @@ note: lint level defined here
|
|||
6 | #![deny(warnings)]
|
||||
| ^^^^^^^^
|
||||
note: consider deriving `Clone` or removing `Copy`
|
||||
--> $DIR/derive.rs:45:1
|
||||
--> $DIR/derive.rs:42:1
|
||||
|
|
||||
45 | / impl Clone for Qux {
|
||||
46 | |
|
||||
47 | | fn clone(&self) -> Self { Qux }
|
||||
48 | | }
|
||||
42 | / impl Clone for Qux {
|
||||
43 | | fn clone(&self) -> Self { Qux }
|
||||
44 | | }
|
||||
| |_^
|
||||
|
||||
error: you are implementing `Clone` explicitly on a `Copy` type
|
||||
--> $DIR/derive.rs:70:1
|
||||
--> $DIR/derive.rs:66:1
|
||||
|
|
||||
70 | / impl<'a> Clone for Lt<'a> {
|
||||
71 | |
|
||||
72 | | fn clone(&self) -> Self { unimplemented!() }
|
||||
73 | | }
|
||||
66 | / impl<'a> Clone for Lt<'a> {
|
||||
67 | | fn clone(&self) -> Self { unimplemented!() }
|
||||
68 | | }
|
||||
| |_^
|
||||
|
|
||||
= note: #[deny(expl_impl_clone_on_copy)] implied by #[deny(warnings)]
|
||||
note: consider deriving `Clone` or removing `Copy`
|
||||
--> $DIR/derive.rs:70:1
|
||||
--> $DIR/derive.rs:66:1
|
||||
|
|
||||
70 | / impl<'a> Clone for Lt<'a> {
|
||||
71 | |
|
||||
72 | | fn clone(&self) -> Self { unimplemented!() }
|
||||
73 | | }
|
||||
66 | / impl<'a> Clone for Lt<'a> {
|
||||
67 | | fn clone(&self) -> Self { unimplemented!() }
|
||||
68 | | }
|
||||
| |_^
|
||||
|
||||
error: aborting due to 5 previous errors
|
||||
|
|
|
@ -1,23 +1,16 @@
|
|||
//! This file tests for the DOC_MARKDOWN lint
|
||||
|
||||
|
||||
#![feature(plugin)]
|
||||
#![plugin(clippy)]
|
||||
|
||||
#![deny(doc_markdown)]
|
||||
|
||||
/// The foo_bar function does _nothing_. See also foo::bar. (note the dot there)
|
||||
|
||||
|
||||
/// Markdown is _weird_. I mean _really weird_. This \_ is ok. So is `_`. But not Foo::some_fun
|
||||
|
||||
/// which should be reported only once despite being __doubly bad__.
|
||||
/// Here be ::is::a::global:path.
|
||||
|
||||
/// That's not code ~NotInCodeBlock~.
|
||||
|
||||
/// be_sure_we_got_to_the_end_of_it
|
||||
|
||||
fn foo_bar() {
|
||||
}
|
||||
|
||||
|
@ -32,7 +25,6 @@ fn foo_bar() {
|
|||
/// _foo bar_
|
||||
/// ~~~
|
||||
/// be_sure_we_got_to_the_end_of_it
|
||||
|
||||
fn multiline_codeblock() {
|
||||
}
|
||||
|
||||
|
@ -40,7 +32,6 @@ fn multiline_codeblock() {
|
|||
/// multiline
|
||||
/// emphasis_.
|
||||
/// be_sure_we_got_to_the_end_of_it
|
||||
|
||||
fn test_emphasis() {
|
||||
}
|
||||
|
||||
|
@ -55,7 +46,6 @@ fn test_emphasis() {
|
|||
/// 32kb 32Mb 32Gb 32Tb 32Pb 32Eb
|
||||
/// NaN
|
||||
/// be_sure_we_got_to_the_end_of_it
|
||||
|
||||
fn test_units() {
|
||||
}
|
||||
|
||||
|
@ -65,15 +55,11 @@ fn test_units() {
|
|||
/// `💣`
|
||||
/// `❤️`
|
||||
/// ß_foo
|
||||
|
||||
/// ℝ_foo
|
||||
|
||||
/// 💣_foo
|
||||
/// ❤️_foo
|
||||
/// foo_ß
|
||||
|
||||
/// foo_ℝ
|
||||
|
||||
/// foo_💣
|
||||
/// foo_❤️
|
||||
/// [ßdummy textß][foo_1ß]
|
||||
|
@ -89,28 +75,23 @@ fn test_units() {
|
|||
/// [foo3_💣]: dummy text
|
||||
/// [foo4_❤️]: dummy text
|
||||
/// be_sure_we_got_to_the_end_of_it
|
||||
|
||||
fn test_unicode() {
|
||||
}
|
||||
|
||||
/// This test has [a link_with_underscores][chunked-example] inside it. See #823.
|
||||
|
||||
/// See also [the issue tracker](https://github.com/Manishearth/rust-clippy/search?q=doc_markdown&type=Issues)
|
||||
/// on GitHub (which is a camel-cased word, but is OK). And here is another [inline link][inline_link].
|
||||
/// It can also be [inline_link2].
|
||||
|
||||
///
|
||||
/// [chunked-example]: https://en.wikipedia.org/wiki/Chunked_transfer_encoding#Example
|
||||
/// [inline_link]: https://foobar
|
||||
/// [inline_link2]: https://foobar
|
||||
|
||||
/// The `main` function is the entry point of the program. Here it only calls the `foo_bar` and
|
||||
/// `multiline_ticks` functions.
|
||||
///
|
||||
/// expression of the type `_ <bit_op> m <cmp_op> c` (where `<bit_op>`
|
||||
/// is one of {`&`, '|'} and `<cmp_op>` is one of {`!=`, `>=`, `>` ,
|
||||
/// be_sure_we_got_to_the_end_of_it
|
||||
|
||||
fn main() {
|
||||
foo_bar();
|
||||
multiline_codeblock();
|
||||
|
@ -124,9 +105,7 @@ fn main() {
|
|||
/// # CamelCaseThing
|
||||
///
|
||||
/// Not a title #897 CamelCaseThing
|
||||
|
||||
/// be_sure_we_got_to_the_end_of_it
|
||||
|
||||
fn issue897() {
|
||||
}
|
||||
|
||||
|
@ -134,7 +113,6 @@ fn issue897() {
|
|||
/// I am confused by brackets? (foo `x_y`)
|
||||
/// I am confused by brackets? (`x_y` foo)
|
||||
/// be_sure_we_got_to_the_end_of_it
|
||||
|
||||
fn issue900() {
|
||||
}
|
||||
|
||||
|
@ -148,7 +126,6 @@ fn issue900() {
|
|||
/// [iterator]: https://doc.rust-lang.org/stable/std/iter/trait.Iterator.html
|
||||
/// [helper_types]: ../helper_types/index.html
|
||||
/// be_sure_we_got_to_the_end_of_it
|
||||
|
||||
fn issue883() {
|
||||
}
|
||||
|
||||
|
@ -167,9 +144,6 @@ That's in a code block: `PackedNode`
|
|||
And BarQuz too.
|
||||
be_sure_we_got_to_the_end_of_it
|
||||
*/
|
||||
|
||||
|
||||
|
||||
fn issue1073() {
|
||||
}
|
||||
|
||||
|
@ -181,9 +155,6 @@ That's in a code block: PackedNode
|
|||
And BarQuz too.
|
||||
be_sure_we_got_to_the_end_of_it
|
||||
*/
|
||||
|
||||
|
||||
|
||||
fn issue1073_alt() {
|
||||
}
|
||||
|
||||
|
@ -194,6 +165,5 @@ fn issue1073_alt() {
|
|||
/// StillDont
|
||||
/// ````
|
||||
/// be_sure_we_got_to_the_end_of_it
|
||||
|
||||
fn four_quotes() {
|
||||
}
|
||||
|
|
|
@ -5,45 +5,51 @@ error: you should put `DOC_MARKDOWN` between ticks in the documentation
|
|||
| ^^^^^^^^^^^^
|
||||
|
|
||||
note: lint level defined here
|
||||
--> $DIR/doc.rs:7:9
|
||||
--> $DIR/doc.rs:6:9
|
||||
|
|
||||
7 | #![deny(doc_markdown)]
|
||||
6 | #![deny(doc_markdown)]
|
||||
| ^^^^^^^^^^^^
|
||||
|
||||
error: you should put `foo_bar` between ticks in the documentation
|
||||
--> $DIR/doc.rs:9:9
|
||||
--> $DIR/doc.rs:8:9
|
||||
|
|
||||
9 | /// The foo_bar function does _nothing_. See also foo::bar. (note the dot there)
|
||||
8 | /// The foo_bar function does _nothing_. See also foo::bar. (note the dot there)
|
||||
| ^^^^^^^
|
||||
|
||||
error: you should put `foo::bar` between ticks in the documentation
|
||||
--> $DIR/doc.rs:9:51
|
||||
--> $DIR/doc.rs:8:51
|
||||
|
|
||||
9 | /// The foo_bar function does _nothing_. See also foo::bar. (note the dot there)
|
||||
8 | /// The foo_bar function does _nothing_. See also foo::bar. (note the dot there)
|
||||
| ^^^^^^^^
|
||||
|
||||
error: you should put `Foo::some_fun` between ticks in the documentation
|
||||
--> $DIR/doc.rs:12:84
|
||||
|
|
||||
12 | /// Markdown is _weird_. I mean _really weird_. This /_ is ok. So is `_`. But not Foo::some_fun
|
||||
| ^^^^^^^^^^^^^
|
||||
--> $DIR/doc.rs:9:84
|
||||
|
|
||||
9 | /// Markdown is _weird_. I mean _really weird_. This /_ is ok. So is `_`. But not Foo::some_fun
|
||||
| ^^^^^^^^^^^^^
|
||||
|
||||
error: you should put `is::a::global:path` between ticks in the documentation
|
||||
--> $DIR/doc.rs:15:13
|
||||
--> $DIR/doc.rs:11:13
|
||||
|
|
||||
15 | /// Here be ::is::a::global:path.
|
||||
11 | /// Here be ::is::a::global:path.
|
||||
| ^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: you should put `NotInCodeBlock` between ticks in the documentation
|
||||
--> $DIR/doc.rs:17:21
|
||||
--> $DIR/doc.rs:12:21
|
||||
|
|
||||
17 | /// That's not code ~NotInCodeBlock~.
|
||||
12 | /// That's not code ~NotInCodeBlock~.
|
||||
| ^^^^^^^^^^^^^^^
|
||||
|
||||
error: you should put `be_sure_we_got_to_the_end_of_it` between ticks in the documentation
|
||||
--> $DIR/doc.rs:19:5
|
||||
--> $DIR/doc.rs:13:5
|
||||
|
|
||||
19 | /// be_sure_we_got_to_the_end_of_it
|
||||
13 | /// be_sure_we_got_to_the_end_of_it
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: you should put `be_sure_we_got_to_the_end_of_it` between ticks in the documentation
|
||||
--> $DIR/doc.rs:27:5
|
||||
|
|
||||
27 | /// be_sure_we_got_to_the_end_of_it
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: you should put `be_sure_we_got_to_the_end_of_it` between ticks in the documentation
|
||||
|
@ -53,129 +59,123 @@ error: you should put `be_sure_we_got_to_the_end_of_it` between ticks in the doc
|
|||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: you should put `be_sure_we_got_to_the_end_of_it` between ticks in the documentation
|
||||
--> $DIR/doc.rs:42:5
|
||||
--> $DIR/doc.rs:48:5
|
||||
|
|
||||
42 | /// be_sure_we_got_to_the_end_of_it
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: you should put `be_sure_we_got_to_the_end_of_it` between ticks in the documentation
|
||||
--> $DIR/doc.rs:57:5
|
||||
|
|
||||
57 | /// be_sure_we_got_to_the_end_of_it
|
||||
48 | /// be_sure_we_got_to_the_end_of_it
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: you should put `ß_foo` between ticks in the documentation
|
||||
--> $DIR/doc.rs:67:5
|
||||
--> $DIR/doc.rs:57:5
|
||||
|
|
||||
67 | /// ß_foo
|
||||
57 | /// ß_foo
|
||||
| ^^^^^
|
||||
|
||||
error: you should put `ℝ_foo` between ticks in the documentation
|
||||
--> $DIR/doc.rs:69:5
|
||||
--> $DIR/doc.rs:58:5
|
||||
|
|
||||
69 | /// ℝ_foo
|
||||
58 | /// ℝ_foo
|
||||
| ^^^^^
|
||||
|
||||
error: you should put `foo_ß` between ticks in the documentation
|
||||
--> $DIR/doc.rs:73:5
|
||||
--> $DIR/doc.rs:61:5
|
||||
|
|
||||
73 | /// foo_ß
|
||||
61 | /// foo_ß
|
||||
| ^^^^^
|
||||
|
||||
error: you should put `foo_ℝ` between ticks in the documentation
|
||||
--> $DIR/doc.rs:75:5
|
||||
--> $DIR/doc.rs:62:5
|
||||
|
|
||||
75 | /// foo_ℝ
|
||||
62 | /// foo_ℝ
|
||||
| ^^^^^
|
||||
|
||||
error: you should put `be_sure_we_got_to_the_end_of_it` between ticks in the documentation
|
||||
--> $DIR/doc.rs:91:5
|
||||
--> $DIR/doc.rs:77:5
|
||||
|
|
||||
91 | /// be_sure_we_got_to_the_end_of_it
|
||||
77 | /// be_sure_we_got_to_the_end_of_it
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: you should put `link_with_underscores` between ticks in the documentation
|
||||
--> $DIR/doc.rs:96:22
|
||||
--> $DIR/doc.rs:81:22
|
||||
|
|
||||
96 | /// This test has [a link_with_underscores][chunked-example] inside it. See #823.
|
||||
81 | /// This test has [a link_with_underscores][chunked-example] inside it. See #823.
|
||||
| ^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: you should put `inline_link2` between ticks in the documentation
|
||||
--> $DIR/doc.rs:100:21
|
||||
|
|
||||
100 | /// It can also be [inline_link2].
|
||||
| ^^^^^^^^^^^^
|
||||
--> $DIR/doc.rs:84:21
|
||||
|
|
||||
84 | /// It can also be [inline_link2].
|
||||
| ^^^^^^^^^^^^
|
||||
|
||||
error: you should put `be_sure_we_got_to_the_end_of_it` between ticks in the documentation
|
||||
--> $DIR/doc.rs:112:5
|
||||
|
|
||||
112 | /// be_sure_we_got_to_the_end_of_it
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
--> $DIR/doc.rs:94:5
|
||||
|
|
||||
94 | /// be_sure_we_got_to_the_end_of_it
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: you should put `CamelCaseThing` between ticks in the documentation
|
||||
--> $DIR/doc.rs:126:22
|
||||
--> $DIR/doc.rs:107:22
|
||||
|
|
||||
126 | /// Not a title #897 CamelCaseThing
|
||||
107 | /// Not a title #897 CamelCaseThing
|
||||
| ^^^^^^^^^^^^^^
|
||||
|
||||
error: you should put `be_sure_we_got_to_the_end_of_it` between ticks in the documentation
|
||||
--> $DIR/doc.rs:108:5
|
||||
|
|
||||
108 | /// be_sure_we_got_to_the_end_of_it
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: you should put `be_sure_we_got_to_the_end_of_it` between ticks in the documentation
|
||||
--> $DIR/doc.rs:115:5
|
||||
|
|
||||
115 | /// be_sure_we_got_to_the_end_of_it
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: you should put `be_sure_we_got_to_the_end_of_it` between ticks in the documentation
|
||||
--> $DIR/doc.rs:128:5
|
||||
|
|
||||
128 | /// be_sure_we_got_to_the_end_of_it
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: you should put `be_sure_we_got_to_the_end_of_it` between ticks in the documentation
|
||||
--> $DIR/doc.rs:136:5
|
||||
|
|
||||
136 | /// be_sure_we_got_to_the_end_of_it
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: you should put `be_sure_we_got_to_the_end_of_it` between ticks in the documentation
|
||||
--> $DIR/doc.rs:150:5
|
||||
|
|
||||
150 | /// be_sure_we_got_to_the_end_of_it
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: you should put `FooBar` between ticks in the documentation
|
||||
--> $DIR/doc.rs:162:42
|
||||
--> $DIR/doc.rs:139:42
|
||||
|
|
||||
162 | /** E.g. serialization of an empty list: FooBar
|
||||
139 | /** E.g. serialization of an empty list: FooBar
|
||||
| ^^^^^^
|
||||
|
||||
error: you should put `BarQuz` between ticks in the documentation
|
||||
--> $DIR/doc.rs:144:5
|
||||
|
|
||||
144 | And BarQuz too.
|
||||
| ^^^^^^
|
||||
|
||||
error: you should put `be_sure_we_got_to_the_end_of_it` between ticks in the documentation
|
||||
--> $DIR/doc.rs:145:1
|
||||
|
|
||||
145 | be_sure_we_got_to_the_end_of_it
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: you should put `FooBar` between ticks in the documentation
|
||||
--> $DIR/doc.rs:150:42
|
||||
|
|
||||
150 | /** E.g. serialization of an empty list: FooBar
|
||||
| ^^^^^^
|
||||
|
||||
error: you should put `BarQuz` between ticks in the documentation
|
||||
--> $DIR/doc.rs:155:5
|
||||
|
|
||||
155 | And BarQuz too.
|
||||
| ^^^^^^
|
||||
|
||||
error: you should put `be_sure_we_got_to_the_end_of_it` between ticks in the documentation
|
||||
--> $DIR/doc.rs:156:1
|
||||
|
|
||||
156 | be_sure_we_got_to_the_end_of_it
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: you should put `be_sure_we_got_to_the_end_of_it` between ticks in the documentation
|
||||
--> $DIR/doc.rs:167:5
|
||||
|
|
||||
167 | And BarQuz too.
|
||||
| ^^^^^^
|
||||
|
||||
error: you should put `be_sure_we_got_to_the_end_of_it` between ticks in the documentation
|
||||
--> $DIR/doc.rs:168:1
|
||||
|
|
||||
168 | be_sure_we_got_to_the_end_of_it
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: you should put `FooBar` between ticks in the documentation
|
||||
--> $DIR/doc.rs:176:42
|
||||
|
|
||||
176 | /** E.g. serialization of an empty list: FooBar
|
||||
| ^^^^^^
|
||||
|
||||
error: you should put `BarQuz` between ticks in the documentation
|
||||
--> $DIR/doc.rs:181:5
|
||||
|
|
||||
181 | And BarQuz too.
|
||||
| ^^^^^^
|
||||
|
||||
error: you should put `be_sure_we_got_to_the_end_of_it` between ticks in the documentation
|
||||
--> $DIR/doc.rs:182:1
|
||||
|
|
||||
182 | be_sure_we_got_to_the_end_of_it
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: you should put `be_sure_we_got_to_the_end_of_it` between ticks in the documentation
|
||||
--> $DIR/doc.rs:196:5
|
||||
|
|
||||
196 | /// be_sure_we_got_to_the_end_of_it
|
||||
167 | /// be_sure_we_got_to_the_end_of_it
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: aborting due to 29 previous errors
|
||||
|
|
|
@ -6,6 +6,5 @@
|
|||
|
||||
enum Empty {}
|
||||
|
||||
|
||||
fn main() {
|
||||
}
|
||||
|
|
|
@ -11,51 +11,30 @@ fn foo() {}
|
|||
|
||||
fn insert_if_absent0<K: Eq + Hash, V>(m: &mut HashMap<K, V>, k: K, v: V) {
|
||||
if !m.contains_key(&k) { m.insert(k, v); }
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
fn insert_if_absent1<K: Eq + Hash, V>(m: &mut HashMap<K, V>, k: K, v: V) {
|
||||
if !m.contains_key(&k) { foo(); m.insert(k, v); }
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
fn insert_if_absent2<K: Eq + Hash, V>(m: &mut HashMap<K, V>, k: K, v: V) {
|
||||
if !m.contains_key(&k) { m.insert(k, v) } else { None };
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
fn insert_if_present2<K: Eq + Hash, V>(m: &mut HashMap<K, V>, k: K, v: V) {
|
||||
if m.contains_key(&k) { None } else { m.insert(k, v) };
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
fn insert_if_absent3<K: Eq + Hash, V>(m: &mut HashMap<K, V>, k: K, v: V) {
|
||||
if !m.contains_key(&k) { foo(); m.insert(k, v) } else { None };
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
fn insert_if_present3<K: Eq + Hash, V>(m: &mut HashMap<K, V>, k: K, v: V) {
|
||||
if m.contains_key(&k) { None } else { foo(); m.insert(k, v) };
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
fn insert_in_btreemap<K: Ord, V>(m: &mut BTreeMap<K, V>, k: K, v: V) {
|
||||
if !m.contains_key(&k) { foo(); m.insert(k, v) } else { None };
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
fn insert_other_if_absent<K: Eq + Hash, V>(m: &mut HashMap<K, V>, k: K, o: K, v: V) {
|
||||
|
|
|
@ -11,39 +11,39 @@ note: lint level defined here
|
|||
| ^^^^^^^^^
|
||||
|
||||
error: usage of `contains_key` followed by `insert` on a `HashMap`
|
||||
--> $DIR/entry.rs:20:5
|
||||
--> $DIR/entry.rs:17:5
|
||||
|
|
||||
20 | if !m.contains_key(&k) { foo(); m.insert(k, v); }
|
||||
17 | if !m.contains_key(&k) { foo(); m.insert(k, v); }
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `m.entry(k)`
|
||||
|
||||
error: usage of `contains_key` followed by `insert` on a `HashMap`
|
||||
--> $DIR/entry.rs:27:5
|
||||
--> $DIR/entry.rs:21:5
|
||||
|
|
||||
27 | if !m.contains_key(&k) { m.insert(k, v) } else { None };
|
||||
21 | if !m.contains_key(&k) { m.insert(k, v) } else { None };
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `m.entry(k)`
|
||||
|
||||
error: usage of `contains_key` followed by `insert` on a `HashMap`
|
||||
--> $DIR/entry.rs:34:5
|
||||
--> $DIR/entry.rs:25:5
|
||||
|
|
||||
34 | if m.contains_key(&k) { None } else { m.insert(k, v) };
|
||||
25 | if m.contains_key(&k) { None } else { m.insert(k, v) };
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `m.entry(k)`
|
||||
|
||||
error: usage of `contains_key` followed by `insert` on a `HashMap`
|
||||
--> $DIR/entry.rs:41:5
|
||||
--> $DIR/entry.rs:29:5
|
||||
|
|
||||
41 | if !m.contains_key(&k) { foo(); m.insert(k, v) } else { None };
|
||||
29 | if !m.contains_key(&k) { foo(); m.insert(k, v) } else { None };
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `m.entry(k)`
|
||||
|
||||
error: usage of `contains_key` followed by `insert` on a `HashMap`
|
||||
--> $DIR/entry.rs:48:5
|
||||
--> $DIR/entry.rs:33:5
|
||||
|
|
||||
48 | if m.contains_key(&k) { None } else { foo(); m.insert(k, v) };
|
||||
33 | if m.contains_key(&k) { None } else { foo(); m.insert(k, v) };
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `m.entry(k)`
|
||||
|
||||
error: usage of `contains_key` followed by `insert` on a `BTreeMap`
|
||||
--> $DIR/entry.rs:55:5
|
||||
--> $DIR/entry.rs:37:5
|
||||
|
|
||||
55 | if !m.contains_key(&k) { foo(); m.insert(k, v) } else { None };
|
||||
37 | if !m.contains_key(&k) { foo(); m.insert(k, v) } else { None };
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `m.entry(k)`
|
||||
|
||||
error: aborting due to 7 previous errors
|
||||
|
|
|
@ -21,9 +21,6 @@ fn main() {
|
|||
// unary and binary operators
|
||||
(-(2) < -(2));
|
||||
((1 + 1) & (1 + 1) == (1 + 1) & (1 + 1));
|
||||
|
||||
|
||||
|
||||
(1 * 2) + (3 * 4) == 1 * 2 + 3 * 4;
|
||||
|
||||
// various other things
|
||||
|
@ -35,7 +32,6 @@ fn main() {
|
|||
1 + 1 == 2;
|
||||
1 - 1 == 0;
|
||||
|
||||
|
||||
1 - 1;
|
||||
1 / 1;
|
||||
true && true;
|
||||
|
@ -47,14 +43,10 @@ fn main() {
|
|||
let b: u32 = 0;
|
||||
|
||||
a == b && b == a;
|
||||
|
||||
a != b && b != a;
|
||||
|
||||
a < b && b > a;
|
||||
|
||||
a <= b && b >= a;
|
||||
|
||||
|
||||
let mut a = vec![1];
|
||||
a == a;
|
||||
2*a.len() == 2*a.len(); // ok, functions
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
error: this boolean expression can be simplified
|
||||
--> $DIR/eq_op.rs:41:5
|
||||
--> $DIR/eq_op.rs:37:5
|
||||
|
|
||||
41 | true && true;
|
||||
37 | true && true;
|
||||
| ^^^^^^^^^^^^ help: try `true`
|
||||
|
|
||||
note: lint level defined here
|
||||
|
@ -11,33 +11,33 @@ note: lint level defined here
|
|||
| ^^^^^^^^^^^^^^^
|
||||
|
||||
error: this boolean expression can be simplified
|
||||
--> $DIR/eq_op.rs:43:5
|
||||
--> $DIR/eq_op.rs:39:5
|
||||
|
|
||||
43 | true || true;
|
||||
39 | true || true;
|
||||
| ^^^^^^^^^^^^ help: try `true`
|
||||
|
||||
error: this boolean expression can be simplified
|
||||
--> $DIR/eq_op.rs:49:5
|
||||
--> $DIR/eq_op.rs:45:5
|
||||
|
|
||||
49 | a == b && b == a;
|
||||
45 | a == b && b == a;
|
||||
| ^^^^^^^^^^^^^^^^ help: try `a == b`
|
||||
|
||||
error: this boolean expression can be simplified
|
||||
--> $DIR/eq_op.rs:51:5
|
||||
--> $DIR/eq_op.rs:46:5
|
||||
|
|
||||
51 | a != b && b != a;
|
||||
46 | a != b && b != a;
|
||||
| ^^^^^^^^^^^^^^^^ help: try `a != b`
|
||||
|
||||
error: this boolean expression can be simplified
|
||||
--> $DIR/eq_op.rs:53:5
|
||||
--> $DIR/eq_op.rs:47:5
|
||||
|
|
||||
53 | a < b && b > a;
|
||||
47 | a < b && b > a;
|
||||
| ^^^^^^^^^^^^^^ help: try `a < b`
|
||||
|
||||
error: this boolean expression can be simplified
|
||||
--> $DIR/eq_op.rs:55:5
|
||||
--> $DIR/eq_op.rs:48:5
|
||||
|
|
||||
55 | a <= b && b >= a;
|
||||
48 | a <= b && b >= a;
|
||||
| ^^^^^^^^^^^^^^^^ help: try `a <= b`
|
||||
|
||||
error: equal expressions as operands to `==`
|
||||
|
@ -113,99 +113,99 @@ error: equal expressions as operands to `&`
|
|||
| ^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: equal expressions as operands to `==`
|
||||
--> $DIR/eq_op.rs:27:5
|
||||
--> $DIR/eq_op.rs:24:5
|
||||
|
|
||||
27 | (1 * 2) + (3 * 4) == 1 * 2 + 3 * 4;
|
||||
24 | (1 * 2) + (3 * 4) == 1 * 2 + 3 * 4;
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: equal expressions as operands to `!=`
|
||||
--> $DIR/eq_op.rs:30:5
|
||||
--> $DIR/eq_op.rs:27:5
|
||||
|
|
||||
30 | ([1] != [1]);
|
||||
27 | ([1] != [1]);
|
||||
| ^^^^^^^^^^^^
|
||||
|
||||
error: equal expressions as operands to `!=`
|
||||
--> $DIR/eq_op.rs:31:5
|
||||
--> $DIR/eq_op.rs:28:5
|
||||
|
|
||||
31 | ((1, 2) != (1, 2));
|
||||
28 | ((1, 2) != (1, 2));
|
||||
| ^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: equal expressions as operands to `==`
|
||||
--> $DIR/eq_op.rs:35:5
|
||||
--> $DIR/eq_op.rs:32:5
|
||||
|
|
||||
35 | 1 + 1 == 2;
|
||||
32 | 1 + 1 == 2;
|
||||
| ^^^^^^^^^^
|
||||
|
||||
error: equal expressions as operands to `==`
|
||||
--> $DIR/eq_op.rs:36:5
|
||||
--> $DIR/eq_op.rs:33:5
|
||||
|
|
||||
36 | 1 - 1 == 0;
|
||||
33 | 1 - 1 == 0;
|
||||
| ^^^^^^^^^^
|
||||
|
||||
error: equal expressions as operands to `-`
|
||||
--> $DIR/eq_op.rs:36:5
|
||||
--> $DIR/eq_op.rs:33:5
|
||||
|
|
||||
36 | 1 - 1 == 0;
|
||||
33 | 1 - 1 == 0;
|
||||
| ^^^^^
|
||||
|
||||
error: equal expressions as operands to `-`
|
||||
--> $DIR/eq_op.rs:39:5
|
||||
--> $DIR/eq_op.rs:35:5
|
||||
|
|
||||
39 | 1 - 1;
|
||||
35 | 1 - 1;
|
||||
| ^^^^^
|
||||
|
||||
error: equal expressions as operands to `/`
|
||||
--> $DIR/eq_op.rs:40:5
|
||||
--> $DIR/eq_op.rs:36:5
|
||||
|
|
||||
40 | 1 / 1;
|
||||
36 | 1 / 1;
|
||||
| ^^^^^
|
||||
|
||||
error: equal expressions as operands to `&&`
|
||||
--> $DIR/eq_op.rs:41:5
|
||||
--> $DIR/eq_op.rs:37:5
|
||||
|
|
||||
41 | true && true;
|
||||
37 | true && true;
|
||||
| ^^^^^^^^^^^^
|
||||
|
||||
error: equal expressions as operands to `||`
|
||||
--> $DIR/eq_op.rs:43:5
|
||||
--> $DIR/eq_op.rs:39:5
|
||||
|
|
||||
43 | true || true;
|
||||
39 | true || true;
|
||||
| ^^^^^^^^^^^^
|
||||
|
||||
error: equal expressions as operands to `&&`
|
||||
--> $DIR/eq_op.rs:49:5
|
||||
--> $DIR/eq_op.rs:45:5
|
||||
|
|
||||
49 | a == b && b == a;
|
||||
45 | a == b && b == a;
|
||||
| ^^^^^^^^^^^^^^^^
|
||||
|
||||
error: equal expressions as operands to `&&`
|
||||
--> $DIR/eq_op.rs:51:5
|
||||
--> $DIR/eq_op.rs:46:5
|
||||
|
|
||||
51 | a != b && b != a;
|
||||
46 | a != b && b != a;
|
||||
| ^^^^^^^^^^^^^^^^
|
||||
|
||||
error: equal expressions as operands to `&&`
|
||||
--> $DIR/eq_op.rs:53:5
|
||||
--> $DIR/eq_op.rs:47:5
|
||||
|
|
||||
53 | a < b && b > a;
|
||||
47 | a < b && b > a;
|
||||
| ^^^^^^^^^^^^^^
|
||||
|
||||
error: equal expressions as operands to `&&`
|
||||
--> $DIR/eq_op.rs:55:5
|
||||
--> $DIR/eq_op.rs:48:5
|
||||
|
|
||||
55 | a <= b && b >= a;
|
||||
48 | a <= b && b >= a;
|
||||
| ^^^^^^^^^^^^^^^^
|
||||
|
||||
error: equal expressions as operands to `==`
|
||||
--> $DIR/eq_op.rs:59:5
|
||||
--> $DIR/eq_op.rs:51:5
|
||||
|
|
||||
59 | a == a;
|
||||
51 | a == a;
|
||||
| ^^^^^^
|
||||
|
||||
warning: taken reference of right operand
|
||||
--> $DIR/eq_op.rs:97:13
|
||||
--> $DIR/eq_op.rs:89:13
|
||||
|
|
||||
97 | let z = x & &y;
|
||||
89 | let z = x & &y;
|
||||
| ^^^^--
|
||||
| |
|
||||
| help: use the right value directly `y`
|
||||
|
|
|
@ -5,20 +5,10 @@
|
|||
|
||||
fn main() {
|
||||
let a = Some(1u8).map(|a| foo(a));
|
||||
|
||||
|
||||
|
||||
meta(|a| foo(a));
|
||||
|
||||
|
||||
|
||||
let c = Some(1u8).map(|a| {1+2; foo}(a));
|
||||
|
||||
|
||||
|
||||
let d = Some(1u8).map(|a| foo((|b| foo2(b))(a))); //is adjusted?
|
||||
all(&[1, 2, 3], &&2, |x, y| below(x, y)); //is adjusted
|
||||
|
||||
unsafe {
|
||||
Some(1u8).map(|a| unsafe_fn(a)); // unsafe fn
|
||||
}
|
||||
|
@ -26,11 +16,7 @@ fn main() {
|
|||
// See #815
|
||||
let e = Some(1u8).map(|a| divergent(a));
|
||||
let e = Some(1u8).map(|a| generic(a));
|
||||
|
||||
|
||||
|
||||
let e = Some(1u8).map(generic);
|
||||
|
||||
// See #515
|
||||
let a: Option<Box<::std::ops::Deref<Target = [i32]>>> =
|
||||
Some(vec![1i32, 2]).map(|v| -> Box<::std::ops::Deref<Target = [i32]>> { Box::new(v) });
|
||||
|
@ -41,7 +27,6 @@ fn meta<F>(f: F) where F: Fn(u8) {
|
|||
}
|
||||
|
||||
fn foo(_: u8) {
|
||||
|
||||
}
|
||||
|
||||
fn foo2(_: u8) -> u8 {
|
||||
|
|
|
@ -11,29 +11,29 @@ note: lint level defined here
|
|||
| ^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: redundant closure found
|
||||
--> $DIR/eta.rs:11:10
|
||||
|
|
||||
11 | meta(|a| foo(a));
|
||||
| ^^^^^^^^^^ help: remove closure as shown: `foo`
|
||||
--> $DIR/eta.rs:8:10
|
||||
|
|
||||
8 | meta(|a| foo(a));
|
||||
| ^^^^^^^^^^ help: remove closure as shown: `foo`
|
||||
|
||||
error: redundant closure found
|
||||
--> $DIR/eta.rs:15:27
|
||||
|
|
||||
15 | let c = Some(1u8).map(|a| {1+2; foo}(a));
|
||||
| ^^^^^^^^^^^^^^^^^ help: remove closure as shown: `{1+2; foo}`
|
||||
--> $DIR/eta.rs:9:27
|
||||
|
|
||||
9 | let c = Some(1u8).map(|a| {1+2; foo}(a));
|
||||
| ^^^^^^^^^^^^^^^^^ help: remove closure as shown: `{1+2; foo}`
|
||||
|
||||
warning: this expression borrows a reference that is immediately dereferenced by the compiler
|
||||
--> $DIR/eta.rs:20:21
|
||||
--> $DIR/eta.rs:11:21
|
||||
|
|
||||
20 | all(&[1, 2, 3], &&2, |x, y| below(x, y)); //is adjusted
|
||||
11 | all(&[1, 2, 3], &&2, |x, y| below(x, y)); //is adjusted
|
||||
| ^^^
|
||||
|
|
||||
= note: #[warn(needless_borrow)] on by default
|
||||
|
||||
error: redundant closure found
|
||||
--> $DIR/eta.rs:28:27
|
||||
--> $DIR/eta.rs:18:27
|
||||
|
|
||||
28 | let e = Some(1u8).map(|a| generic(a));
|
||||
18 | let e = Some(1u8).map(|a| generic(a));
|
||||
| ^^^^^^^^^^^^^^ help: remove closure as shown: `generic`
|
||||
|
||||
error: aborting due to 4 previous errors
|
||||
|
|
|
@ -7,7 +7,6 @@ fn main() {
|
|||
let mut x = 0;
|
||||
let a = { x = 1; 1 } + x;
|
||||
|
||||
|
||||
// Example from iss#277
|
||||
x += { x = 20; 2 };
|
||||
|
||||
|
@ -16,7 +15,6 @@ fn main() {
|
|||
struct Foo { a: i32, b: i32 };
|
||||
let base = Foo { a: 4, b: 5 };
|
||||
let foo = Foo { a: x, .. { x = 6; base } };
|
||||
|
||||
// ...inside a closure?
|
||||
let closure = || {
|
||||
let mut x = 0;
|
||||
|
|
|
@ -16,39 +16,39 @@ note: whether read occurs before this write depends on evaluation order
|
|||
| ^^^^^
|
||||
|
||||
error: unsequenced read of a variable
|
||||
--> $DIR/eval_order_dependence.rs:12:5
|
||||
--> $DIR/eval_order_dependence.rs:11:5
|
||||
|
|
||||
12 | x += { x = 20; 2 };
|
||||
11 | x += { x = 20; 2 };
|
||||
| ^
|
||||
|
|
||||
note: whether read occurs before this write depends on evaluation order
|
||||
--> $DIR/eval_order_dependence.rs:12:12
|
||||
--> $DIR/eval_order_dependence.rs:11:12
|
||||
|
|
||||
12 | x += { x = 20; 2 };
|
||||
11 | x += { x = 20; 2 };
|
||||
| ^^^^^^
|
||||
|
||||
error: unsequenced read of a variable
|
||||
--> $DIR/eval_order_dependence.rs:18:24
|
||||
--> $DIR/eval_order_dependence.rs:17:24
|
||||
|
|
||||
18 | let foo = Foo { a: x, .. { x = 6; base } };
|
||||
17 | let foo = Foo { a: x, .. { x = 6; base } };
|
||||
| ^
|
||||
|
|
||||
note: whether read occurs before this write depends on evaluation order
|
||||
--> $DIR/eval_order_dependence.rs:18:32
|
||||
--> $DIR/eval_order_dependence.rs:17:32
|
||||
|
|
||||
18 | let foo = Foo { a: x, .. { x = 6; base } };
|
||||
17 | let foo = Foo { a: x, .. { x = 6; base } };
|
||||
| ^^^^^
|
||||
|
||||
error: unsequenced read of a variable
|
||||
--> $DIR/eval_order_dependence.rs:23:9
|
||||
--> $DIR/eval_order_dependence.rs:21:9
|
||||
|
|
||||
23 | x += { x = 20; 2 };
|
||||
21 | x += { x = 20; 2 };
|
||||
| ^
|
||||
|
|
||||
note: whether read occurs before this write depends on evaluation order
|
||||
--> $DIR/eval_order_dependence.rs:23:16
|
||||
--> $DIR/eval_order_dependence.rs:21:16
|
||||
|
|
||||
23 | x += { x = 20; 2 };
|
||||
21 | x += { x = 20; 2 };
|
||||
| ^^^^^^
|
||||
|
||||
error: aborting due to 4 previous errors
|
||||
|
|
|
@ -41,48 +41,21 @@ fn main() {
|
|||
ZERO + ZERO != 1.0; //no error, comparison with zero is ok
|
||||
|
||||
ONE == 1f32;
|
||||
|
||||
|
||||
|
||||
ONE == 1.0 + 0.0;
|
||||
|
||||
|
||||
|
||||
|
||||
ONE + ONE == ZERO + ONE + ONE;
|
||||
|
||||
|
||||
|
||||
|
||||
ONE != 2.0;
|
||||
|
||||
|
||||
|
||||
ONE != 0.0; // no error, comparison with zero is ok
|
||||
twice(ONE) != ONE;
|
||||
|
||||
|
||||
|
||||
ONE as f64 != 2.0;
|
||||
|
||||
|
||||
|
||||
ONE as f64 != 0.0; // no error, comparison with zero is ok
|
||||
|
||||
let x : f64 = 1.0;
|
||||
|
||||
x == 1.0;
|
||||
|
||||
|
||||
|
||||
x != 0f64; // no error, comparison with zero is ok
|
||||
|
||||
twice(x) != twice(ONE as f64);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
x < 0.0; // no errors, lower or greater comparisons need no fuzzyness
|
||||
x > 0.0;
|
||||
x <= 0.0;
|
||||
|
|
|
@ -16,87 +16,87 @@ note: std::f32::EPSILON and std::f64::EPSILON are available.
|
|||
| ^^^^^^^^^^^
|
||||
|
||||
error: strict comparison of f32 or f64
|
||||
--> $DIR/float_cmp.rs:47:5
|
||||
--> $DIR/float_cmp.rs:44:5
|
||||
|
|
||||
47 | ONE == 1.0 + 0.0;
|
||||
44 | ONE == 1.0 + 0.0;
|
||||
| ^^^^^^^^^^^^^^^^ help: consider comparing them within some error `(ONE - (1.0 + 0.0)).abs() < error`
|
||||
|
|
||||
note: std::f32::EPSILON and std::f64::EPSILON are available.
|
||||
--> $DIR/float_cmp.rs:47:5
|
||||
--> $DIR/float_cmp.rs:44:5
|
||||
|
|
||||
47 | ONE == 1.0 + 0.0;
|
||||
44 | ONE == 1.0 + 0.0;
|
||||
| ^^^^^^^^^^^^^^^^
|
||||
|
||||
error: strict comparison of f32 or f64
|
||||
--> $DIR/float_cmp.rs:52:5
|
||||
--> $DIR/float_cmp.rs:45:5
|
||||
|
|
||||
52 | ONE + ONE == ZERO + ONE + ONE;
|
||||
45 | ONE + ONE == ZERO + ONE + ONE;
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider comparing them within some error `(ONE + ONE - (ZERO + ONE + ONE)).abs() < error`
|
||||
|
|
||||
note: std::f32::EPSILON and std::f64::EPSILON are available.
|
||||
--> $DIR/float_cmp.rs:52:5
|
||||
--> $DIR/float_cmp.rs:45:5
|
||||
|
|
||||
52 | ONE + ONE == ZERO + ONE + ONE;
|
||||
45 | ONE + ONE == ZERO + ONE + ONE;
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: strict comparison of f32 or f64
|
||||
--> $DIR/float_cmp.rs:57:5
|
||||
--> $DIR/float_cmp.rs:46:5
|
||||
|
|
||||
57 | ONE != 2.0;
|
||||
46 | ONE != 2.0;
|
||||
| ^^^^^^^^^^ help: consider comparing them within some error `(ONE - 2.0).abs() < error`
|
||||
|
|
||||
note: std::f32::EPSILON and std::f64::EPSILON are available.
|
||||
--> $DIR/float_cmp.rs:57:5
|
||||
--> $DIR/float_cmp.rs:46:5
|
||||
|
|
||||
57 | ONE != 2.0;
|
||||
46 | ONE != 2.0;
|
||||
| ^^^^^^^^^^
|
||||
|
||||
error: strict comparison of f32 or f64
|
||||
--> $DIR/float_cmp.rs:62:5
|
||||
--> $DIR/float_cmp.rs:48:5
|
||||
|
|
||||
62 | twice(ONE) != ONE;
|
||||
48 | twice(ONE) != ONE;
|
||||
| ^^^^^^^^^^^^^^^^^ help: consider comparing them within some error `(twice(ONE) - ONE).abs() < error`
|
||||
|
|
||||
note: std::f32::EPSILON and std::f64::EPSILON are available.
|
||||
--> $DIR/float_cmp.rs:62:5
|
||||
--> $DIR/float_cmp.rs:48:5
|
||||
|
|
||||
62 | twice(ONE) != ONE;
|
||||
48 | twice(ONE) != ONE;
|
||||
| ^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: strict comparison of f32 or f64
|
||||
--> $DIR/float_cmp.rs:66:5
|
||||
--> $DIR/float_cmp.rs:49:5
|
||||
|
|
||||
66 | ONE as f64 != 2.0;
|
||||
49 | ONE as f64 != 2.0;
|
||||
| ^^^^^^^^^^^^^^^^^ help: consider comparing them within some error `(ONE as f64 - 2.0).abs() < error`
|
||||
|
|
||||
note: std::f32::EPSILON and std::f64::EPSILON are available.
|
||||
--> $DIR/float_cmp.rs:66:5
|
||||
--> $DIR/float_cmp.rs:49:5
|
||||
|
|
||||
66 | ONE as f64 != 2.0;
|
||||
49 | ONE as f64 != 2.0;
|
||||
| ^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: strict comparison of f32 or f64
|
||||
--> $DIR/float_cmp.rs:74:5
|
||||
--> $DIR/float_cmp.rs:54:5
|
||||
|
|
||||
74 | x == 1.0;
|
||||
54 | x == 1.0;
|
||||
| ^^^^^^^^ help: consider comparing them within some error `(x - 1.0).abs() < error`
|
||||
|
|
||||
note: std::f32::EPSILON and std::f64::EPSILON are available.
|
||||
--> $DIR/float_cmp.rs:74:5
|
||||
--> $DIR/float_cmp.rs:54:5
|
||||
|
|
||||
74 | x == 1.0;
|
||||
54 | x == 1.0;
|
||||
| ^^^^^^^^
|
||||
|
||||
error: strict comparison of f32 or f64
|
||||
--> $DIR/float_cmp.rs:80:5
|
||||
--> $DIR/float_cmp.rs:57:5
|
||||
|
|
||||
80 | twice(x) != twice(ONE as f64);
|
||||
57 | twice(x) != twice(ONE as f64);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider comparing them within some error `(twice(x) - twice(ONE as f64)).abs() < error`
|
||||
|
|
||||
note: std::f32::EPSILON and std::f64::EPSILON are available.
|
||||
--> $DIR/float_cmp.rs:80:5
|
||||
--> $DIR/float_cmp.rs:57:5
|
||||
|
|
||||
80 | twice(x) != twice(ONE as f64);
|
||||
57 | twice(x) != twice(ONE as f64);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: aborting due to 8 previous errors
|
||||
|
|
|
@ -14,45 +14,30 @@ fn for_loop_over_option_and_result() {
|
|||
let v = vec![0,1,2];
|
||||
|
||||
// check FOR_LOOP_OVER_OPTION lint
|
||||
|
||||
for x in option {
|
||||
|
||||
|
||||
println!("{}", x);
|
||||
}
|
||||
|
||||
// check FOR_LOOP_OVER_RESULT lint
|
||||
|
||||
for x in result {
|
||||
|
||||
|
||||
println!("{}", x);
|
||||
}
|
||||
|
||||
for x in option.ok_or("x not found") {
|
||||
|
||||
|
||||
println!("{}", x);
|
||||
}
|
||||
|
||||
// make sure LOOP_OVER_NEXT lint takes precedence when next() is the last call in the chain
|
||||
|
||||
for x in v.iter().next() {
|
||||
|
||||
println!("{}", x);
|
||||
}
|
||||
|
||||
// make sure we lint when next() is not the last call in the chain
|
||||
|
||||
for x in v.iter().next().and(Some(0)) {
|
||||
|
||||
|
||||
println!("{}", x);
|
||||
}
|
||||
|
||||
for x in v.iter().next().ok_or("x not found") {
|
||||
|
||||
|
||||
println!("{}", x);
|
||||
}
|
||||
|
||||
|
@ -97,47 +82,26 @@ fn main() {
|
|||
let mut vec = vec![1, 2, 3, 4];
|
||||
let vec2 = vec![1, 2, 3, 4];
|
||||
for i in 0..vec.len() {
|
||||
|
||||
|
||||
|
||||
|
||||
println!("{}", vec[i]);
|
||||
}
|
||||
|
||||
for i in 0..vec.len() {
|
||||
|
||||
let i = 42; // make a different `i`
|
||||
println!("{}", vec[i]); // ok, not the `i` of the for-loop
|
||||
}
|
||||
|
||||
for i in 0..vec.len() { let _ = vec[i]; }
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// ICE #746
|
||||
for j in 0..4 {
|
||||
|
||||
|
||||
|
||||
|
||||
println!("{:?}", STATIC[j]);
|
||||
}
|
||||
|
||||
for j in 0..4 {
|
||||
|
||||
|
||||
|
||||
|
||||
println!("{:?}", CONST[j]);
|
||||
}
|
||||
|
||||
for i in 0..vec.len() {
|
||||
|
||||
|
||||
|
||||
|
||||
println!("{} {}", vec[i], i);
|
||||
}
|
||||
for i in 0..vec.len() { // not an error, indexing more than one variable
|
||||
|
@ -145,86 +109,46 @@ fn main() {
|
|||
}
|
||||
|
||||
for i in 0..vec.len() {
|
||||
|
||||
|
||||
|
||||
|
||||
println!("{}", vec2[i]);
|
||||
}
|
||||
|
||||
for i in 5..vec.len() {
|
||||
|
||||
|
||||
|
||||
|
||||
println!("{}", vec[i]);
|
||||
}
|
||||
|
||||
for i in 0..MAX_LEN {
|
||||
|
||||
|
||||
|
||||
|
||||
println!("{}", vec[i]);
|
||||
}
|
||||
|
||||
for i in 0...MAX_LEN {
|
||||
|
||||
|
||||
|
||||
|
||||
println!("{}", vec[i]);
|
||||
}
|
||||
|
||||
for i in 5..10 {
|
||||
|
||||
|
||||
|
||||
|
||||
println!("{}", vec[i]);
|
||||
}
|
||||
|
||||
for i in 5...10 {
|
||||
|
||||
|
||||
|
||||
|
||||
println!("{}", vec[i]);
|
||||
}
|
||||
|
||||
for i in 5..vec.len() {
|
||||
|
||||
|
||||
|
||||
|
||||
println!("{} {}", vec[i], i);
|
||||
}
|
||||
|
||||
for i in 5..10 {
|
||||
|
||||
|
||||
|
||||
|
||||
println!("{} {}", vec[i], i);
|
||||
}
|
||||
|
||||
for i in 10..0 {
|
||||
|
||||
|
||||
|
||||
println!("{}", i);
|
||||
}
|
||||
|
||||
for i in 10...0 {
|
||||
|
||||
|
||||
|
||||
println!("{}", i);
|
||||
}
|
||||
|
||||
for i in MAX_LEN..0 {
|
||||
|
||||
|
||||
println!("{}", i);
|
||||
}
|
||||
|
||||
|
@ -250,16 +174,10 @@ fn main() {
|
|||
|
||||
// testing that the empty range lint folds constants
|
||||
for i in 10..5+4 {
|
||||
|
||||
|
||||
|
||||
println!("{}", i);
|
||||
}
|
||||
|
||||
for i in (5+2)..(3-1) {
|
||||
|
||||
|
||||
|
||||
println!("{}", i);
|
||||
}
|
||||
|
||||
|
@ -288,20 +206,11 @@ fn main() {
|
|||
|
||||
for _v in vec.iter() { }
|
||||
|
||||
|
||||
|
||||
|
||||
for _v in vec.iter_mut() { }
|
||||
|
||||
|
||||
|
||||
|
||||
let out_vec = vec![1,2,3];
|
||||
for _v in out_vec.into_iter() { }
|
||||
|
||||
|
||||
|
||||
|
||||
let array = [1, 2, 3];
|
||||
for _v in array.into_iter() {}
|
||||
|
||||
|
@ -310,61 +219,33 @@ fn main() {
|
|||
|
||||
for _v in [1, 2, 3].iter() { }
|
||||
|
||||
|
||||
|
||||
|
||||
for _v in (&mut [1, 2, 3]).iter() { } // no error
|
||||
|
||||
for _v in [0; 32].iter() {}
|
||||
|
||||
|
||||
|
||||
|
||||
for _v in [0; 33].iter() {} // no error
|
||||
|
||||
let ll: LinkedList<()> = LinkedList::new();
|
||||
for _v in ll.iter() { }
|
||||
|
||||
|
||||
|
||||
|
||||
let vd: VecDeque<()> = VecDeque::new();
|
||||
for _v in vd.iter() { }
|
||||
|
||||
|
||||
|
||||
|
||||
let bh: BinaryHeap<()> = BinaryHeap::new();
|
||||
for _v in bh.iter() { }
|
||||
|
||||
|
||||
|
||||
|
||||
let hm: HashMap<(), ()> = HashMap::new();
|
||||
for _v in hm.iter() { }
|
||||
|
||||
|
||||
|
||||
|
||||
let bt: BTreeMap<(), ()> = BTreeMap::new();
|
||||
for _v in bt.iter() { }
|
||||
|
||||
|
||||
|
||||
|
||||
let hs: HashSet<()> = HashSet::new();
|
||||
for _v in hs.iter() { }
|
||||
|
||||
|
||||
|
||||
|
||||
let bs: BTreeSet<()> = BTreeSet::new();
|
||||
for _v in bs.iter() { }
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
for _v in vec.iter().next() { }
|
||||
|
||||
let u = Unrelated(vec![]);
|
||||
|
@ -442,19 +323,11 @@ fn main() {
|
|||
|
||||
let m : HashMap<u64, u64> = HashMap::new();
|
||||
for (_, v) in &m {
|
||||
|
||||
|
||||
|
||||
|
||||
let _v = v;
|
||||
}
|
||||
|
||||
let m : Rc<HashMap<u64, u64>> = Rc::new(HashMap::new());
|
||||
for (_, v) in &*m {
|
||||
|
||||
|
||||
|
||||
|
||||
let _v = v;
|
||||
// Here the `*` is not actually necesarry, but the test tests that we don't suggest
|
||||
// `in *m.values()` as we used to
|
||||
|
@ -462,29 +335,17 @@ fn main() {
|
|||
|
||||
let mut m : HashMap<u64, u64> = HashMap::new();
|
||||
for (_, v) in &mut m {
|
||||
|
||||
|
||||
|
||||
|
||||
let _v = v;
|
||||
}
|
||||
|
||||
let m: &mut HashMap<u64, u64> = &mut HashMap::new();
|
||||
for (_, v) in &mut *m {
|
||||
|
||||
|
||||
|
||||
|
||||
let _v = v;
|
||||
}
|
||||
|
||||
let m : HashMap<u64, u64> = HashMap::new();
|
||||
let rm = &m;
|
||||
for (k, _value) in rm {
|
||||
|
||||
|
||||
|
||||
|
||||
let _k = k;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
error: for loop over `option`, which is an `Option`. This is more readably written as an `if let` statement.
|
||||
--> $DIR/for_loop.rs:18:14
|
||||
--> $DIR/for_loop.rs:17:14
|
||||
|
|
||||
18 | for x in option {
|
||||
17 | for x in option {
|
||||
| ^^^^^^
|
||||
|
|
||||
= note: #[deny(for_loop_over_option)] implied by #[deny(clippy)]
|
||||
|
@ -13,9 +13,9 @@ note: lint level defined here
|
|||
= help: consider replacing `for x in option` with `if let Some(x) = option`
|
||||
|
||||
error: for loop over `result`, which is a `Result`. This is more readably written as an `if let` statement.
|
||||
--> $DIR/for_loop.rs:26:14
|
||||
--> $DIR/for_loop.rs:22:14
|
||||
|
|
||||
26 | for x in result {
|
||||
22 | for x in result {
|
||||
| ^^^^^^
|
||||
|
|
||||
= note: #[deny(for_loop_over_result)] implied by #[deny(clippy)]
|
||||
|
@ -27,21 +27,20 @@ note: lint level defined here
|
|||
= help: consider replacing `for x in result` with `if let Ok(x) = result`
|
||||
|
||||
error: for loop over `option.ok_or("x not found")`, which is a `Result`. This is more readably written as an `if let` statement.
|
||||
--> $DIR/for_loop.rs:32:14
|
||||
--> $DIR/for_loop.rs:26:14
|
||||
|
|
||||
32 | for x in option.ok_or("x not found") {
|
||||
26 | for x in option.ok_or("x not found") {
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: #[deny(for_loop_over_result)] implied by #[deny(clippy)]
|
||||
= help: consider replacing `for x in option.ok_or("x not found")` with `if let Ok(x) = option.ok_or("x not found")`
|
||||
|
||||
error: you are iterating over `Iterator::next()` which is an Option; this will compile but is probably not what you want
|
||||
--> $DIR/for_loop.rs:40:5
|
||||
--> $DIR/for_loop.rs:31:5
|
||||
|
|
||||
40 | / for x in v.iter().next() {
|
||||
41 | |
|
||||
42 | | println!("{}", x);
|
||||
43 | | }
|
||||
31 | / for x in v.iter().next() {
|
||||
32 | | println!("{}", x);
|
||||
33 | | }
|
||||
| |_____^
|
||||
|
|
||||
= note: #[deny(iter_next_loop)] implied by #[deny(clippy)]
|
||||
|
@ -52,522 +51,442 @@ note: lint level defined here
|
|||
| ^^^^^^
|
||||
|
||||
error: for loop over `v.iter().next().and(Some(0))`, which is an `Option`. This is more readably written as an `if let` statement.
|
||||
--> $DIR/for_loop.rs:47:14
|
||||
--> $DIR/for_loop.rs:36:14
|
||||
|
|
||||
47 | for x in v.iter().next().and(Some(0)) {
|
||||
36 | for x in v.iter().next().and(Some(0)) {
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: #[deny(for_loop_over_option)] implied by #[deny(clippy)]
|
||||
= help: consider replacing `for x in v.iter().next().and(Some(0))` with `if let Some(x) = v.iter().next().and(Some(0))`
|
||||
|
||||
error: for loop over `v.iter().next().ok_or("x not found")`, which is a `Result`. This is more readably written as an `if let` statement.
|
||||
--> $DIR/for_loop.rs:53:14
|
||||
--> $DIR/for_loop.rs:40:14
|
||||
|
|
||||
53 | for x in v.iter().next().ok_or("x not found") {
|
||||
40 | for x in v.iter().next().ok_or("x not found") {
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: #[deny(for_loop_over_result)] implied by #[deny(clippy)]
|
||||
= help: consider replacing `for x in v.iter().next().ok_or("x not found")` with `if let Ok(x) = v.iter().next().ok_or("x not found")`
|
||||
|
||||
error: the loop variable `i` is only used to index `vec`.
|
||||
--> $DIR/for_loop.rs:99:5
|
||||
|
|
||||
99 | / for i in 0..vec.len() {
|
||||
100 | |
|
||||
101 | |
|
||||
102 | |
|
||||
103 | |
|
||||
104 | | println!("{}", vec[i]);
|
||||
105 | | }
|
||||
| |_____^
|
||||
|
|
||||
--> $DIR/for_loop.rs:84:5
|
||||
|
|
||||
84 | / for i in 0..vec.len() {
|
||||
85 | | println!("{}", vec[i]);
|
||||
86 | | }
|
||||
| |_____^
|
||||
|
|
||||
note: lint level defined here
|
||||
--> $DIR/for_loop.rs:90:8
|
||||
|
|
||||
90 | #[deny(needless_range_loop, explicit_iter_loop, explicit_into_iter_loop, iter_next_loop, reverse_range_loop, explicit_counter_loop, for_kv_map)]
|
||||
| ^^^^^^^^^^^^^^^^^^^
|
||||
--> $DIR/for_loop.rs:75:8
|
||||
|
|
||||
75 | #[deny(needless_range_loop, explicit_iter_loop, explicit_into_iter_loop, iter_next_loop, reverse_range_loop, explicit_counter_loop, for_kv_map)]
|
||||
| ^^^^^^^^^^^^^^^^^^^
|
||||
help: consider using an iterator
|
||||
| for <item> in &vec {
|
||||
| for <item> in &vec {
|
||||
|
||||
warning: unused variable: `i`
|
||||
--> $DIR/for_loop.rs:107:9
|
||||
|
|
||||
107 | for i in 0..vec.len() {
|
||||
| ^
|
||||
|
|
||||
= note: #[warn(unused_variables)] on by default
|
||||
--> $DIR/for_loop.rs:88:9
|
||||
|
|
||||
88 | for i in 0..vec.len() {
|
||||
| ^
|
||||
|
|
||||
= note: #[warn(unused_variables)] on by default
|
||||
|
||||
error: the loop variable `i` is only used to index `vec`.
|
||||
--> $DIR/for_loop.rs:113:5
|
||||
|
|
||||
113 | for i in 0..vec.len() { let _ = vec[i]; }
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
--> $DIR/for_loop.rs:93:5
|
||||
|
|
||||
93 | for i in 0..vec.len() { let _ = vec[i]; }
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
help: consider using an iterator
|
||||
| for <item> in &vec { let _ = vec[i]; }
|
||||
| for <item> in &vec { let _ = vec[i]; }
|
||||
|
||||
error: the loop variable `j` is only used to index `STATIC`.
|
||||
--> $DIR/for_loop.rs:120:5
|
||||
|
|
||||
120 | / for j in 0..4 {
|
||||
121 | |
|
||||
122 | |
|
||||
123 | |
|
||||
124 | |
|
||||
125 | | println!("{:?}", STATIC[j]);
|
||||
126 | | }
|
||||
| |_____^
|
||||
|
|
||||
--> $DIR/for_loop.rs:96:5
|
||||
|
|
||||
96 | / for j in 0..4 {
|
||||
97 | | println!("{:?}", STATIC[j]);
|
||||
98 | | }
|
||||
| |_____^
|
||||
|
|
||||
help: consider using an iterator
|
||||
| for <item> in STATIC.iter().take(4) {
|
||||
| for <item> in STATIC.iter().take(4) {
|
||||
|
||||
error: the loop variable `j` is only used to index `CONST`.
|
||||
--> $DIR/for_loop.rs:128:5
|
||||
--> $DIR/for_loop.rs:100:5
|
||||
|
|
||||
128 | / for j in 0..4 {
|
||||
129 | |
|
||||
130 | |
|
||||
131 | |
|
||||
132 | |
|
||||
133 | | println!("{:?}", CONST[j]);
|
||||
134 | | }
|
||||
100 | / for j in 0..4 {
|
||||
101 | | println!("{:?}", CONST[j]);
|
||||
102 | | }
|
||||
| |_____^
|
||||
|
|
||||
help: consider using an iterator
|
||||
| for <item> in CONST.iter().take(4) {
|
||||
|
||||
error: the loop variable `i` is used to index `vec`
|
||||
--> $DIR/for_loop.rs:136:5
|
||||
--> $DIR/for_loop.rs:104:5
|
||||
|
|
||||
136 | / for i in 0..vec.len() {
|
||||
137 | |
|
||||
138 | |
|
||||
139 | |
|
||||
140 | |
|
||||
141 | | println!("{} {}", vec[i], i);
|
||||
142 | | }
|
||||
104 | / for i in 0..vec.len() {
|
||||
105 | | println!("{} {}", vec[i], i);
|
||||
106 | | }
|
||||
| |_____^
|
||||
|
|
||||
help: consider using an iterator
|
||||
| for (i, <item>) in vec.iter().enumerate() {
|
||||
|
||||
error: the loop variable `i` is only used to index `vec2`.
|
||||
--> $DIR/for_loop.rs:147:5
|
||||
--> $DIR/for_loop.rs:111:5
|
||||
|
|
||||
147 | / for i in 0..vec.len() {
|
||||
148 | |
|
||||
149 | |
|
||||
150 | |
|
||||
151 | |
|
||||
152 | | println!("{}", vec2[i]);
|
||||
153 | | }
|
||||
111 | / for i in 0..vec.len() {
|
||||
112 | | println!("{}", vec2[i]);
|
||||
113 | | }
|
||||
| |_____^
|
||||
|
|
||||
help: consider using an iterator
|
||||
| for <item> in vec2.iter().take(vec.len()) {
|
||||
|
||||
error: the loop variable `i` is only used to index `vec`.
|
||||
--> $DIR/for_loop.rs:155:5
|
||||
--> $DIR/for_loop.rs:115:5
|
||||
|
|
||||
155 | / for i in 5..vec.len() {
|
||||
156 | |
|
||||
157 | |
|
||||
158 | |
|
||||
159 | |
|
||||
160 | | println!("{}", vec[i]);
|
||||
161 | | }
|
||||
115 | / for i in 5..vec.len() {
|
||||
116 | | println!("{}", vec[i]);
|
||||
117 | | }
|
||||
| |_____^
|
||||
|
|
||||
help: consider using an iterator
|
||||
| for <item> in vec.iter().skip(5) {
|
||||
|
||||
error: the loop variable `i` is only used to index `vec`.
|
||||
--> $DIR/for_loop.rs:163:5
|
||||
--> $DIR/for_loop.rs:119:5
|
||||
|
|
||||
163 | / for i in 0..MAX_LEN {
|
||||
164 | |
|
||||
165 | |
|
||||
166 | |
|
||||
167 | |
|
||||
168 | | println!("{}", vec[i]);
|
||||
169 | | }
|
||||
119 | / for i in 0..MAX_LEN {
|
||||
120 | | println!("{}", vec[i]);
|
||||
121 | | }
|
||||
| |_____^
|
||||
|
|
||||
help: consider using an iterator
|
||||
| for <item> in vec.iter().take(MAX_LEN) {
|
||||
|
||||
error: the loop variable `i` is only used to index `vec`.
|
||||
--> $DIR/for_loop.rs:171:5
|
||||
--> $DIR/for_loop.rs:123:5
|
||||
|
|
||||
171 | / for i in 0...MAX_LEN {
|
||||
172 | |
|
||||
173 | |
|
||||
174 | |
|
||||
175 | |
|
||||
176 | | println!("{}", vec[i]);
|
||||
177 | | }
|
||||
123 | / for i in 0...MAX_LEN {
|
||||
124 | | println!("{}", vec[i]);
|
||||
125 | | }
|
||||
| |_____^
|
||||
|
|
||||
help: consider using an iterator
|
||||
| for <item> in vec.iter().take(MAX_LEN + 1) {
|
||||
|
||||
error: the loop variable `i` is only used to index `vec`.
|
||||
--> $DIR/for_loop.rs:179:5
|
||||
--> $DIR/for_loop.rs:127:5
|
||||
|
|
||||
179 | / for i in 5..10 {
|
||||
180 | |
|
||||
181 | |
|
||||
182 | |
|
||||
183 | |
|
||||
184 | | println!("{}", vec[i]);
|
||||
185 | | }
|
||||
127 | / for i in 5..10 {
|
||||
128 | | println!("{}", vec[i]);
|
||||
129 | | }
|
||||
| |_____^
|
||||
|
|
||||
help: consider using an iterator
|
||||
| for <item> in vec.iter().take(10).skip(5) {
|
||||
|
||||
error: the loop variable `i` is only used to index `vec`.
|
||||
--> $DIR/for_loop.rs:187:5
|
||||
--> $DIR/for_loop.rs:131:5
|
||||
|
|
||||
187 | / for i in 5...10 {
|
||||
188 | |
|
||||
189 | |
|
||||
190 | |
|
||||
191 | |
|
||||
192 | | println!("{}", vec[i]);
|
||||
193 | | }
|
||||
131 | / for i in 5...10 {
|
||||
132 | | println!("{}", vec[i]);
|
||||
133 | | }
|
||||
| |_____^
|
||||
|
|
||||
help: consider using an iterator
|
||||
| for <item> in vec.iter().take(10 + 1).skip(5) {
|
||||
|
||||
error: the loop variable `i` is used to index `vec`
|
||||
--> $DIR/for_loop.rs:195:5
|
||||
--> $DIR/for_loop.rs:135:5
|
||||
|
|
||||
195 | / for i in 5..vec.len() {
|
||||
196 | |
|
||||
197 | |
|
||||
198 | |
|
||||
199 | |
|
||||
200 | | println!("{} {}", vec[i], i);
|
||||
201 | | }
|
||||
135 | / for i in 5..vec.len() {
|
||||
136 | | println!("{} {}", vec[i], i);
|
||||
137 | | }
|
||||
| |_____^
|
||||
|
|
||||
help: consider using an iterator
|
||||
| for (i, <item>) in vec.iter().enumerate().skip(5) {
|
||||
|
||||
error: the loop variable `i` is used to index `vec`
|
||||
--> $DIR/for_loop.rs:203:5
|
||||
--> $DIR/for_loop.rs:139:5
|
||||
|
|
||||
203 | / for i in 5..10 {
|
||||
204 | |
|
||||
205 | |
|
||||
206 | |
|
||||
207 | |
|
||||
208 | | println!("{} {}", vec[i], i);
|
||||
209 | | }
|
||||
139 | / for i in 5..10 {
|
||||
140 | | println!("{} {}", vec[i], i);
|
||||
141 | | }
|
||||
| |_____^
|
||||
|
|
||||
help: consider using an iterator
|
||||
| for (i, <item>) in vec.iter().enumerate().take(10).skip(5) {
|
||||
|
||||
error: this range is empty so this for loop will never run
|
||||
--> $DIR/for_loop.rs:211:5
|
||||
--> $DIR/for_loop.rs:143:5
|
||||
|
|
||||
211 | / for i in 10..0 {
|
||||
212 | |
|
||||
213 | |
|
||||
214 | |
|
||||
215 | | println!("{}", i);
|
||||
216 | | }
|
||||
143 | / for i in 10..0 {
|
||||
144 | | println!("{}", i);
|
||||
145 | | }
|
||||
| |_____^
|
||||
|
|
||||
note: lint level defined here
|
||||
--> $DIR/for_loop.rs:90:90
|
||||
--> $DIR/for_loop.rs:75:90
|
||||
|
|
||||
90 | #[deny(needless_range_loop, explicit_iter_loop, explicit_into_iter_loop, iter_next_loop, reverse_range_loop, explicit_counter_loop, for_kv_map)]
|
||||
75 | #[deny(needless_range_loop, explicit_iter_loop, explicit_into_iter_loop, iter_next_loop, reverse_range_loop, explicit_counter_loop, for_kv_map)]
|
||||
| ^^^^^^^^^^^^^^^^^^
|
||||
help: consider using the following if you are attempting to iterate over this range in reverse
|
||||
| for i in (0..10).rev() {
|
||||
|
||||
error: this range is empty so this for loop will never run
|
||||
--> $DIR/for_loop.rs:218:5
|
||||
--> $DIR/for_loop.rs:147:5
|
||||
|
|
||||
218 | / for i in 10...0 {
|
||||
219 | |
|
||||
220 | |
|
||||
221 | |
|
||||
222 | | println!("{}", i);
|
||||
223 | | }
|
||||
147 | / for i in 10...0 {
|
||||
148 | | println!("{}", i);
|
||||
149 | | }
|
||||
| |_____^
|
||||
|
|
||||
help: consider using the following if you are attempting to iterate over this range in reverse
|
||||
| for i in (0...10).rev() {
|
||||
|
||||
error: this range is empty so this for loop will never run
|
||||
--> $DIR/for_loop.rs:225:5
|
||||
--> $DIR/for_loop.rs:151:5
|
||||
|
|
||||
225 | / for i in MAX_LEN..0 {
|
||||
226 | |
|
||||
227 | |
|
||||
228 | | println!("{}", i);
|
||||
229 | | }
|
||||
151 | / for i in MAX_LEN..0 {
|
||||
152 | | println!("{}", i);
|
||||
153 | | }
|
||||
| |_____^
|
||||
|
|
||||
help: consider using the following if you are attempting to iterate over this range in reverse
|
||||
| for i in (0..MAX_LEN).rev() {
|
||||
|
||||
error: this range is empty so this for loop will never run
|
||||
--> $DIR/for_loop.rs:231:5
|
||||
--> $DIR/for_loop.rs:155:5
|
||||
|
|
||||
231 | / for i in 5..5 {
|
||||
232 | | println!("{}", i);
|
||||
233 | | }
|
||||
155 | / for i in 5..5 {
|
||||
156 | | println!("{}", i);
|
||||
157 | | }
|
||||
| |_____^
|
||||
|
||||
error: this range is empty so this for loop will never run
|
||||
--> $DIR/for_loop.rs:252:5
|
||||
--> $DIR/for_loop.rs:176:5
|
||||
|
|
||||
252 | / for i in 10..5+4 {
|
||||
253 | |
|
||||
254 | |
|
||||
255 | |
|
||||
256 | | println!("{}", i);
|
||||
257 | | }
|
||||
176 | / for i in 10..5+4 {
|
||||
177 | | println!("{}", i);
|
||||
178 | | }
|
||||
| |_____^
|
||||
|
|
||||
help: consider using the following if you are attempting to iterate over this range in reverse
|
||||
| for i in (5+4..10).rev() {
|
||||
|
||||
error: this range is empty so this for loop will never run
|
||||
--> $DIR/for_loop.rs:259:5
|
||||
--> $DIR/for_loop.rs:180:5
|
||||
|
|
||||
259 | / for i in (5+2)..(3-1) {
|
||||
260 | |
|
||||
261 | |
|
||||
262 | |
|
||||
263 | | println!("{}", i);
|
||||
264 | | }
|
||||
180 | / for i in (5+2)..(3-1) {
|
||||
181 | | println!("{}", i);
|
||||
182 | | }
|
||||
| |_____^
|
||||
|
|
||||
help: consider using the following if you are attempting to iterate over this range in reverse
|
||||
| for i in ((3-1)..(5+2)).rev() {
|
||||
|
||||
error: this range is empty so this for loop will never run
|
||||
--> $DIR/for_loop.rs:266:5
|
||||
--> $DIR/for_loop.rs:184:5
|
||||
|
|
||||
266 | / for i in (5+2)..(8-1) {
|
||||
267 | | println!("{}", i);
|
||||
268 | | }
|
||||
184 | / for i in (5+2)..(8-1) {
|
||||
185 | | println!("{}", i);
|
||||
186 | | }
|
||||
| |_____^
|
||||
|
||||
error: it is more idiomatic to loop over references to containers instead of using explicit iteration methods
|
||||
--> $DIR/for_loop.rs:289:15
|
||||
--> $DIR/for_loop.rs:207:15
|
||||
|
|
||||
289 | for _v in vec.iter() { }
|
||||
207 | for _v in vec.iter() { }
|
||||
| ^^^^^^^^^^ help: to write this more concisely, try `&vec`
|
||||
|
|
||||
note: lint level defined here
|
||||
--> $DIR/for_loop.rs:90:29
|
||||
--> $DIR/for_loop.rs:75:29
|
||||
|
|
||||
90 | #[deny(needless_range_loop, explicit_iter_loop, explicit_into_iter_loop, iter_next_loop, reverse_range_loop, explicit_counter_loop, for_kv_map)]
|
||||
75 | #[deny(needless_range_loop, explicit_iter_loop, explicit_into_iter_loop, iter_next_loop, reverse_range_loop, explicit_counter_loop, for_kv_map)]
|
||||
| ^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: it is more idiomatic to loop over references to containers instead of using explicit iteration methods
|
||||
--> $DIR/for_loop.rs:294:15
|
||||
--> $DIR/for_loop.rs:209:15
|
||||
|
|
||||
294 | for _v in vec.iter_mut() { }
|
||||
209 | for _v in vec.iter_mut() { }
|
||||
| ^^^^^^^^^^^^^^ help: to write this more concisely, try `&mut vec`
|
||||
|
||||
error: it is more idiomatic to loop over containers instead of using explicit iteration methods`
|
||||
--> $DIR/for_loop.rs:300:15
|
||||
--> $DIR/for_loop.rs:212:15
|
||||
|
|
||||
300 | for _v in out_vec.into_iter() { }
|
||||
212 | for _v in out_vec.into_iter() { }
|
||||
| ^^^^^^^^^^^^^^^^^^^ help: to write this more concisely, try `out_vec`
|
||||
|
|
||||
note: lint level defined here
|
||||
--> $DIR/for_loop.rs:90:49
|
||||
--> $DIR/for_loop.rs:75:49
|
||||
|
|
||||
90 | #[deny(needless_range_loop, explicit_iter_loop, explicit_into_iter_loop, iter_next_loop, reverse_range_loop, explicit_counter_loop, for_kv_map)]
|
||||
75 | #[deny(needless_range_loop, explicit_iter_loop, explicit_into_iter_loop, iter_next_loop, reverse_range_loop, explicit_counter_loop, for_kv_map)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: it is more idiomatic to loop over references to containers instead of using explicit iteration methods
|
||||
--> $DIR/for_loop.rs:306:15
|
||||
--> $DIR/for_loop.rs:215:15
|
||||
|
|
||||
306 | for _v in array.into_iter() {}
|
||||
215 | for _v in array.into_iter() {}
|
||||
| ^^^^^^^^^^^^^^^^^ help: to write this more concisely, try `&array`
|
||||
|
||||
error: it is more idiomatic to loop over references to containers instead of using explicit iteration methods
|
||||
--> $DIR/for_loop.rs:311:15
|
||||
--> $DIR/for_loop.rs:220:15
|
||||
|
|
||||
311 | for _v in [1, 2, 3].iter() { }
|
||||
220 | for _v in [1, 2, 3].iter() { }
|
||||
| ^^^^^^^^^^^^^^^^ help: to write this more concisely, try `&[1, 2, 3]`
|
||||
|
||||
error: it is more idiomatic to loop over references to containers instead of using explicit iteration methods
|
||||
--> $DIR/for_loop.rs:318:15
|
||||
--> $DIR/for_loop.rs:224:15
|
||||
|
|
||||
318 | for _v in [0; 32].iter() {}
|
||||
224 | for _v in [0; 32].iter() {}
|
||||
| ^^^^^^^^^^^^^^ help: to write this more concisely, try `&[0; 32]`
|
||||
|
||||
error: it is more idiomatic to loop over references to containers instead of using explicit iteration methods
|
||||
--> $DIR/for_loop.rs:326:15
|
||||
--> $DIR/for_loop.rs:229:15
|
||||
|
|
||||
326 | for _v in ll.iter() { }
|
||||
229 | for _v in ll.iter() { }
|
||||
| ^^^^^^^^^ help: to write this more concisely, try `&ll`
|
||||
|
||||
error: it is more idiomatic to loop over references to containers instead of using explicit iteration methods
|
||||
--> $DIR/for_loop.rs:332:15
|
||||
--> $DIR/for_loop.rs:232:15
|
||||
|
|
||||
332 | for _v in vd.iter() { }
|
||||
232 | for _v in vd.iter() { }
|
||||
| ^^^^^^^^^ help: to write this more concisely, try `&vd`
|
||||
|
||||
error: it is more idiomatic to loop over references to containers instead of using explicit iteration methods
|
||||
--> $DIR/for_loop.rs:338:15
|
||||
--> $DIR/for_loop.rs:235:15
|
||||
|
|
||||
338 | for _v in bh.iter() { }
|
||||
235 | for _v in bh.iter() { }
|
||||
| ^^^^^^^^^ help: to write this more concisely, try `&bh`
|
||||
|
||||
error: it is more idiomatic to loop over references to containers instead of using explicit iteration methods
|
||||
--> $DIR/for_loop.rs:344:15
|
||||
--> $DIR/for_loop.rs:238:15
|
||||
|
|
||||
344 | for _v in hm.iter() { }
|
||||
238 | for _v in hm.iter() { }
|
||||
| ^^^^^^^^^ help: to write this more concisely, try `&hm`
|
||||
|
||||
error: it is more idiomatic to loop over references to containers instead of using explicit iteration methods
|
||||
--> $DIR/for_loop.rs:350:15
|
||||
--> $DIR/for_loop.rs:241:15
|
||||
|
|
||||
350 | for _v in bt.iter() { }
|
||||
241 | for _v in bt.iter() { }
|
||||
| ^^^^^^^^^ help: to write this more concisely, try `&bt`
|
||||
|
||||
error: it is more idiomatic to loop over references to containers instead of using explicit iteration methods
|
||||
--> $DIR/for_loop.rs:356:15
|
||||
--> $DIR/for_loop.rs:244:15
|
||||
|
|
||||
356 | for _v in hs.iter() { }
|
||||
244 | for _v in hs.iter() { }
|
||||
| ^^^^^^^^^ help: to write this more concisely, try `&hs`
|
||||
|
||||
error: it is more idiomatic to loop over references to containers instead of using explicit iteration methods
|
||||
--> $DIR/for_loop.rs:362:15
|
||||
--> $DIR/for_loop.rs:247:15
|
||||
|
|
||||
362 | for _v in bs.iter() { }
|
||||
247 | for _v in bs.iter() { }
|
||||
| ^^^^^^^^^ help: to write this more concisely, try `&bs`
|
||||
|
||||
error: you are iterating over `Iterator::next()` which is an Option; this will compile but is probably not what you want
|
||||
--> $DIR/for_loop.rs:368:5
|
||||
--> $DIR/for_loop.rs:249:5
|
||||
|
|
||||
368 | for _v in vec.iter().next() { }
|
||||
249 | for _v in vec.iter().next() { }
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
note: lint level defined here
|
||||
--> $DIR/for_loop.rs:90:74
|
||||
--> $DIR/for_loop.rs:75:74
|
||||
|
|
||||
90 | #[deny(needless_range_loop, explicit_iter_loop, explicit_into_iter_loop, iter_next_loop, reverse_range_loop, explicit_counter_loop, for_kv_map)]
|
||||
75 | #[deny(needless_range_loop, explicit_iter_loop, explicit_into_iter_loop, iter_next_loop, reverse_range_loop, explicit_counter_loop, for_kv_map)]
|
||||
| ^^^^^^^^^^^^^^
|
||||
|
||||
error: you are collect()ing an iterator and throwing away the result. Consider using an explicit for loop to exhaust the iterator
|
||||
--> $DIR/for_loop.rs:375:5
|
||||
--> $DIR/for_loop.rs:256:5
|
||||
|
|
||||
375 | vec.iter().map(|x| out.push(x)).collect::<Vec<_>>();
|
||||
256 | vec.iter().map(|x| out.push(x)).collect::<Vec<_>>();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
note: lint level defined here
|
||||
--> $DIR/for_loop.rs:91:8
|
||||
--> $DIR/for_loop.rs:76:8
|
||||
|
|
||||
91 | #[deny(unused_collect)]
|
||||
76 | #[deny(unused_collect)]
|
||||
| ^^^^^^^^^^^^^^
|
||||
|
||||
error: the variable `_index` is used as a loop counter. Consider using `for (_index, item) in &vec.enumerate()` or similar iterators
|
||||
--> $DIR/for_loop.rs:380:5
|
||||
--> $DIR/for_loop.rs:261:5
|
||||
|
|
||||
380 | for _v in &vec { _index += 1 }
|
||||
261 | for _v in &vec { _index += 1 }
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
note: lint level defined here
|
||||
--> $DIR/for_loop.rs:90:110
|
||||
--> $DIR/for_loop.rs:75:110
|
||||
|
|
||||
90 | #[deny(needless_range_loop, explicit_iter_loop, explicit_into_iter_loop, iter_next_loop, reverse_range_loop, explicit_counter_loop, for_kv_map)]
|
||||
75 | #[deny(needless_range_loop, explicit_iter_loop, explicit_into_iter_loop, iter_next_loop, reverse_range_loop, explicit_counter_loop, for_kv_map)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: the variable `_index` is used as a loop counter. Consider using `for (_index, item) in &vec.enumerate()` or similar iterators
|
||||
--> $DIR/for_loop.rs:384:5
|
||||
--> $DIR/for_loop.rs:265:5
|
||||
|
|
||||
384 | for _v in &vec { _index += 1 }
|
||||
265 | for _v in &vec { _index += 1 }
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: you seem to want to iterate on a map's values
|
||||
--> $DIR/for_loop.rs:444:5
|
||||
--> $DIR/for_loop.rs:325:5
|
||||
|
|
||||
444 | / for (_, v) in &m {
|
||||
445 | |
|
||||
446 | |
|
||||
447 | |
|
||||
448 | |
|
||||
449 | | let _v = v;
|
||||
450 | | }
|
||||
325 | / for (_, v) in &m {
|
||||
326 | | let _v = v;
|
||||
327 | | }
|
||||
| |_____^
|
||||
|
|
||||
note: lint level defined here
|
||||
--> $DIR/for_loop.rs:90:133
|
||||
--> $DIR/for_loop.rs:75:133
|
||||
|
|
||||
90 | #[deny(needless_range_loop, explicit_iter_loop, explicit_into_iter_loop, iter_next_loop, reverse_range_loop, explicit_counter_loop, for_kv_map)]
|
||||
75 | #[deny(needless_range_loop, explicit_iter_loop, explicit_into_iter_loop, iter_next_loop, reverse_range_loop, explicit_counter_loop, for_kv_map)]
|
||||
| ^^^^^^^^^^
|
||||
help: use the corresponding method
|
||||
| for v in m.values() {
|
||||
|
||||
error: you seem to want to iterate on a map's values
|
||||
--> $DIR/for_loop.rs:453:5
|
||||
--> $DIR/for_loop.rs:330:5
|
||||
|
|
||||
453 | / for (_, v) in &*m {
|
||||
454 | |
|
||||
455 | |
|
||||
456 | |
|
||||
... |
|
||||
460 | | // `in *m.values()` as we used to
|
||||
461 | | }
|
||||
330 | / for (_, v) in &*m {
|
||||
331 | | let _v = v;
|
||||
332 | | // Here the `*` is not actually necesarry, but the test tests that we don't suggest
|
||||
333 | | // `in *m.values()` as we used to
|
||||
334 | | }
|
||||
| |_____^
|
||||
|
|
||||
help: use the corresponding method
|
||||
| for v in (*m).values() {
|
||||
|
||||
error: you seem to want to iterate on a map's values
|
||||
--> $DIR/for_loop.rs:464:5
|
||||
--> $DIR/for_loop.rs:337:5
|
||||
|
|
||||
464 | / for (_, v) in &mut m {
|
||||
465 | |
|
||||
466 | |
|
||||
467 | |
|
||||
468 | |
|
||||
469 | | let _v = v;
|
||||
470 | | }
|
||||
337 | / for (_, v) in &mut m {
|
||||
338 | | let _v = v;
|
||||
339 | | }
|
||||
| |_____^
|
||||
|
|
||||
help: use the corresponding method
|
||||
| for v in m.values_mut() {
|
||||
|
||||
error: you seem to want to iterate on a map's values
|
||||
--> $DIR/for_loop.rs:473:5
|
||||
--> $DIR/for_loop.rs:342:5
|
||||
|
|
||||
473 | / for (_, v) in &mut *m {
|
||||
474 | |
|
||||
475 | |
|
||||
476 | |
|
||||
477 | |
|
||||
478 | | let _v = v;
|
||||
479 | | }
|
||||
342 | / for (_, v) in &mut *m {
|
||||
343 | | let _v = v;
|
||||
344 | | }
|
||||
| |_____^
|
||||
|
|
||||
help: use the corresponding method
|
||||
| for v in (*m).values_mut() {
|
||||
|
||||
error: you seem to want to iterate on a map's keys
|
||||
--> $DIR/for_loop.rs:483:5
|
||||
--> $DIR/for_loop.rs:348:5
|
||||
|
|
||||
483 | / for (k, _value) in rm {
|
||||
484 | |
|
||||
485 | |
|
||||
486 | |
|
||||
487 | |
|
||||
488 | | let _k = k;
|
||||
489 | | }
|
||||
348 | / for (k, _value) in rm {
|
||||
349 | | let _k = k;
|
||||
350 | | }
|
||||
| |_____^
|
||||
|
|
||||
help: use the corresponding method
|
||||
|
|
|
@ -13,8 +13,6 @@ fn main() {
|
|||
// weird `else if` formatting:
|
||||
if foo() {
|
||||
} if foo() {
|
||||
|
||||
|
||||
}
|
||||
|
||||
let _ = { // if as the last expression
|
||||
|
@ -22,8 +20,6 @@ fn main() {
|
|||
|
||||
if foo() {
|
||||
} if foo() {
|
||||
|
||||
|
||||
}
|
||||
else {
|
||||
}
|
||||
|
@ -32,8 +28,6 @@ fn main() {
|
|||
let _ = { // if in the middle of a block
|
||||
if foo() {
|
||||
} if foo() {
|
||||
|
||||
|
||||
}
|
||||
else {
|
||||
}
|
||||
|
@ -43,15 +37,11 @@ fn main() {
|
|||
|
||||
if foo() {
|
||||
} else
|
||||
|
||||
|
||||
if foo() { // the span of the above error should continue here
|
||||
}
|
||||
|
||||
if foo() {
|
||||
}
|
||||
|
||||
|
||||
else
|
||||
if foo() { // the span of the above error should continue here
|
||||
}
|
||||
|
@ -73,25 +63,17 @@ fn main() {
|
|||
|
||||
if foo() {
|
||||
}
|
||||
|
||||
else if
|
||||
|
||||
foo() {}
|
||||
|
||||
// weird op_eq formatting:
|
||||
let mut a = 42;
|
||||
a =- 35;
|
||||
|
||||
|
||||
a =* &191;
|
||||
|
||||
|
||||
|
||||
let mut b = true;
|
||||
b =! false;
|
||||
|
||||
|
||||
|
||||
// those are ok:
|
||||
a = -35;
|
||||
a = *&191;
|
||||
|
@ -100,14 +82,10 @@ fn main() {
|
|||
// possible missing comma in an array
|
||||
let _ = &[
|
||||
-1, -2, -3 // <= no comma here
|
||||
|
||||
|
||||
-4, -5, -6
|
||||
];
|
||||
let _ = &[
|
||||
-1, -2, -3 // <= no comma here
|
||||
|
||||
|
||||
*4, -5, -6
|
||||
];
|
||||
|
||||
|
|
|
@ -13,54 +13,50 @@ note: lint level defined here
|
|||
= note: to remove this lint, add the missing `else` or add a new line before the second `if`
|
||||
|
||||
error: this looks like an `else if` but the `else` is missing
|
||||
--> $DIR/formatting.rs:24:10
|
||||
--> $DIR/formatting.rs:22:10
|
||||
|
|
||||
24 | } if foo() {
|
||||
22 | } if foo() {
|
||||
| ^
|
||||
|
|
||||
= note: #[deny(suspicious_else_formatting)] implied by #[deny(clippy)]
|
||||
= note: to remove this lint, add the missing `else` or add a new line before the second `if`
|
||||
|
||||
error: this looks like an `else if` but the `else` is missing
|
||||
--> $DIR/formatting.rs:34:10
|
||||
--> $DIR/formatting.rs:30:10
|
||||
|
|
||||
34 | } if foo() {
|
||||
30 | } if foo() {
|
||||
| ^
|
||||
|
|
||||
= note: #[deny(suspicious_else_formatting)] implied by #[deny(clippy)]
|
||||
= note: to remove this lint, add the missing `else` or add a new line before the second `if`
|
||||
|
||||
error: this is an `else if` but the formatting might hide it
|
||||
--> $DIR/formatting.rs:45:6
|
||||
--> $DIR/formatting.rs:39:6
|
||||
|
|
||||
45 | } else
|
||||
39 | } else
|
||||
| ______^
|
||||
46 | |
|
||||
47 | |
|
||||
48 | | if foo() { // the span of the above error should continue here
|
||||
40 | | if foo() { // the span of the above error should continue here
|
||||
| |____^
|
||||
|
|
||||
= note: #[deny(suspicious_else_formatting)] implied by #[deny(clippy)]
|
||||
= note: to remove this lint, remove the `else` or remove the new line between `else` and `if`
|
||||
|
||||
error: this is an `else if` but the formatting might hide it
|
||||
--> $DIR/formatting.rs:52:6
|
||||
--> $DIR/formatting.rs:44:6
|
||||
|
|
||||
52 | }
|
||||
44 | }
|
||||
| ______^
|
||||
53 | |
|
||||
54 | |
|
||||
55 | | else
|
||||
56 | | if foo() { // the span of the above error should continue here
|
||||
45 | | else
|
||||
46 | | if foo() { // the span of the above error should continue here
|
||||
| |____^
|
||||
|
|
||||
= note: #[deny(suspicious_else_formatting)] implied by #[deny(clippy)]
|
||||
= note: to remove this lint, remove the `else` or remove the new line between `else` and `if`
|
||||
|
||||
error: this looks like you are trying to use `.. -= ..`, but you really are doing `.. = (- ..)`
|
||||
--> $DIR/formatting.rs:83:6
|
||||
--> $DIR/formatting.rs:71:6
|
||||
|
|
||||
83 | a =- 35;
|
||||
71 | a =- 35;
|
||||
| ^^^^
|
||||
|
|
||||
= note: #[deny(suspicious_assignment_formatting)] implied by #[deny(clippy)]
|
||||
|
@ -72,45 +68,45 @@ note: lint level defined here
|
|||
= note: to remove this lint, use either `-=` or `= -`
|
||||
|
||||
error: this looks like you are trying to use `.. *= ..`, but you really are doing `.. = (* ..)`
|
||||
--> $DIR/formatting.rs:86:6
|
||||
--> $DIR/formatting.rs:72:6
|
||||
|
|
||||
86 | a =* &191;
|
||||
72 | a =* &191;
|
||||
| ^^^^
|
||||
|
|
||||
= note: #[deny(suspicious_assignment_formatting)] implied by #[deny(clippy)]
|
||||
= note: to remove this lint, use either `*=` or `= *`
|
||||
|
||||
error: this looks like you are trying to use `.. != ..`, but you really are doing `.. = (! ..)`
|
||||
--> $DIR/formatting.rs:91:6
|
||||
--> $DIR/formatting.rs:75:6
|
||||
|
|
||||
91 | b =! false;
|
||||
75 | b =! false;
|
||||
| ^^^^
|
||||
|
|
||||
= note: #[deny(suspicious_assignment_formatting)] implied by #[deny(clippy)]
|
||||
= note: to remove this lint, use either `!=` or `= !`
|
||||
|
||||
error: possibly missing a comma here
|
||||
--> $DIR/formatting.rs:102:19
|
||||
|
|
||||
102 | -1, -2, -3 // <= no comma here
|
||||
| ^
|
||||
|
|
||||
= note: #[deny(possible_missing_comma)] implied by #[deny(clippy)]
|
||||
--> $DIR/formatting.rs:84:19
|
||||
|
|
||||
84 | -1, -2, -3 // <= no comma here
|
||||
| ^
|
||||
|
|
||||
= note: #[deny(possible_missing_comma)] implied by #[deny(clippy)]
|
||||
note: lint level defined here
|
||||
--> $DIR/formatting.rs:4:9
|
||||
|
|
||||
4 | #![deny(clippy)]
|
||||
| ^^^^^^
|
||||
= note: to remove this lint, add a comma or write the expr in a single line
|
||||
--> $DIR/formatting.rs:4:9
|
||||
|
|
||||
4 | #![deny(clippy)]
|
||||
| ^^^^^^
|
||||
= note: to remove this lint, add a comma or write the expr in a single line
|
||||
|
||||
error: possibly missing a comma here
|
||||
--> $DIR/formatting.rs:108:19
|
||||
|
|
||||
108 | -1, -2, -3 // <= no comma here
|
||||
| ^
|
||||
|
|
||||
= note: #[deny(possible_missing_comma)] implied by #[deny(clippy)]
|
||||
= note: to remove this lint, add a comma or write the expr in a single line
|
||||
--> $DIR/formatting.rs:88:19
|
||||
|
|
||||
88 | -1, -2, -3 // <= no comma here
|
||||
| ^
|
||||
|
|
||||
= note: #[deny(possible_missing_comma)] implied by #[deny(clippy)]
|
||||
= note: to remove this lint, add a comma or write the expr in a single line
|
||||
|
||||
error: aborting due to 10 previous errors
|
||||
|
||||
|
|
|
@ -9,7 +9,6 @@
|
|||
fn good(_one: u32, _two: u32, _three: &str, _four: bool, _five: f32, _six: f32, _seven: bool) {}
|
||||
|
||||
fn bad(_one: u32, _two: u32, _three: &str, _four: bool, _five: f32, _six: f32, _seven: bool, _eight: ()) {
|
||||
|
||||
}
|
||||
|
||||
// don't lint extern fns
|
||||
|
@ -19,7 +18,6 @@ pub trait Foo {
|
|||
fn good(_one: u32, _two: u32, _three: &str, _four: bool, _five: f32, _six: f32, _seven: bool);
|
||||
fn bad(_one: u32, _two: u32, _three: &str, _four: bool, _five: f32, _six: f32, _seven: bool, _eight: ());
|
||||
|
||||
|
||||
fn ptr(p: *const u8);
|
||||
}
|
||||
|
||||
|
@ -28,7 +26,6 @@ pub struct Bar;
|
|||
impl Bar {
|
||||
fn good_method(_one: u32, _two: u32, _three: &str, _four: bool, _five: f32, _six: f32, _seven: bool) {}
|
||||
fn bad_method(_one: u32, _two: u32, _three: &str, _four: bool, _five: f32, _six: f32, _seven: bool, _eight: ()) {}
|
||||
|
||||
}
|
||||
|
||||
// ok, we don’t want to warn implementations
|
||||
|
@ -38,11 +35,8 @@ impl Foo for Bar {
|
|||
|
||||
fn ptr(p: *const u8) {
|
||||
println!("{}", unsafe { *p });
|
||||
|
||||
println!("{:?}", unsafe { p.as_ref() });
|
||||
|
||||
unsafe { std::ptr::read(p) };
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -54,11 +48,8 @@ fn private(p: *const u8) {
|
|||
|
||||
pub fn public(p: *const u8) {
|
||||
println!("{}", unsafe { *p });
|
||||
|
||||
println!("{:?}", unsafe { p.as_ref() });
|
||||
|
||||
unsafe { std::ptr::read(p) };
|
||||
|
||||
}
|
||||
|
||||
impl Bar {
|
||||
|
@ -68,11 +59,8 @@ impl Bar {
|
|||
|
||||
pub fn public(self, p: *const u8) {
|
||||
println!("{}", unsafe { *p });
|
||||
|
||||
println!("{:?}", unsafe { p.as_ref() });
|
||||
|
||||
unsafe { std::ptr::read(p) };
|
||||
|
||||
}
|
||||
|
||||
pub fn public_ok(self, p: *const u8) {
|
||||
|
|
|
@ -2,8 +2,7 @@ error: this function has too many arguments (8/7)
|
|||
--> $DIR/functions.rs:11:1
|
||||
|
|
||||
11 | / fn bad(_one: u32, _two: u32, _three: &str, _four: bool, _five: f32, _six: f32, _seven: bool, _eight: ()) {
|
||||
12 | |
|
||||
13 | | }
|
||||
12 | | }
|
||||
| |_^
|
||||
|
|
||||
= note: #[deny(too_many_arguments)] implied by #[deny(clippy)]
|
||||
|
@ -14,25 +13,25 @@ note: lint level defined here
|
|||
| ^^^^^^
|
||||
|
||||
error: this function has too many arguments (8/7)
|
||||
--> $DIR/functions.rs:20:5
|
||||
--> $DIR/functions.rs:19:5
|
||||
|
|
||||
20 | fn bad(_one: u32, _two: u32, _three: &str, _four: bool, _five: f32, _six: f32, _seven: bool, _eight: ());
|
||||
19 | fn bad(_one: u32, _two: u32, _three: &str, _four: bool, _five: f32, _six: f32, _seven: bool, _eight: ());
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: #[deny(too_many_arguments)] implied by #[deny(clippy)]
|
||||
|
||||
error: this function has too many arguments (8/7)
|
||||
--> $DIR/functions.rs:30:5
|
||||
--> $DIR/functions.rs:28:5
|
||||
|
|
||||
30 | fn bad_method(_one: u32, _two: u32, _three: &str, _four: bool, _five: f32, _six: f32, _seven: bool, _eight: ()) {}
|
||||
28 | fn bad_method(_one: u32, _two: u32, _three: &str, _four: bool, _five: f32, _six: f32, _seven: bool, _eight: ()) {}
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: #[deny(too_many_arguments)] implied by #[deny(clippy)]
|
||||
|
||||
error: this public function dereferences a raw pointer but is not marked `unsafe`
|
||||
--> $DIR/functions.rs:40:34
|
||||
--> $DIR/functions.rs:37:34
|
||||
|
|
||||
40 | println!("{}", unsafe { *p });
|
||||
37 | println!("{}", unsafe { *p });
|
||||
| ^
|
||||
|
|
||||
= note: #[deny(not_unsafe_ptr_arg_deref)] implied by #[deny(clippy)]
|
||||
|
@ -43,65 +42,65 @@ note: lint level defined here
|
|||
| ^^^^^^
|
||||
|
||||
error: this public function dereferences a raw pointer but is not marked `unsafe`
|
||||
--> $DIR/functions.rs:42:35
|
||||
--> $DIR/functions.rs:38:35
|
||||
|
|
||||
42 | println!("{:?}", unsafe { p.as_ref() });
|
||||
38 | println!("{:?}", unsafe { p.as_ref() });
|
||||
| ^
|
||||
|
|
||||
= note: #[deny(not_unsafe_ptr_arg_deref)] implied by #[deny(clippy)]
|
||||
|
||||
error: this public function dereferences a raw pointer but is not marked `unsafe`
|
||||
--> $DIR/functions.rs:44:33
|
||||
--> $DIR/functions.rs:39:33
|
||||
|
|
||||
44 | unsafe { std::ptr::read(p) };
|
||||
39 | unsafe { std::ptr::read(p) };
|
||||
| ^
|
||||
|
|
||||
= note: #[deny(not_unsafe_ptr_arg_deref)] implied by #[deny(clippy)]
|
||||
|
||||
error: this public function dereferences a raw pointer but is not marked `unsafe`
|
||||
--> $DIR/functions.rs:56:30
|
||||
--> $DIR/functions.rs:50:30
|
||||
|
|
||||
56 | println!("{}", unsafe { *p });
|
||||
50 | println!("{}", unsafe { *p });
|
||||
| ^
|
||||
|
|
||||
= note: #[deny(not_unsafe_ptr_arg_deref)] implied by #[deny(clippy)]
|
||||
|
||||
error: this public function dereferences a raw pointer but is not marked `unsafe`
|
||||
--> $DIR/functions.rs:58:31
|
||||
--> $DIR/functions.rs:51:31
|
||||
|
|
||||
58 | println!("{:?}", unsafe { p.as_ref() });
|
||||
51 | println!("{:?}", unsafe { p.as_ref() });
|
||||
| ^
|
||||
|
|
||||
= note: #[deny(not_unsafe_ptr_arg_deref)] implied by #[deny(clippy)]
|
||||
|
||||
error: this public function dereferences a raw pointer but is not marked `unsafe`
|
||||
--> $DIR/functions.rs:60:29
|
||||
--> $DIR/functions.rs:52:29
|
||||
|
|
||||
60 | unsafe { std::ptr::read(p) };
|
||||
52 | unsafe { std::ptr::read(p) };
|
||||
| ^
|
||||
|
|
||||
= note: #[deny(not_unsafe_ptr_arg_deref)] implied by #[deny(clippy)]
|
||||
|
||||
error: this public function dereferences a raw pointer but is not marked `unsafe`
|
||||
--> $DIR/functions.rs:70:34
|
||||
--> $DIR/functions.rs:61:34
|
||||
|
|
||||
70 | println!("{}", unsafe { *p });
|
||||
61 | println!("{}", unsafe { *p });
|
||||
| ^
|
||||
|
|
||||
= note: #[deny(not_unsafe_ptr_arg_deref)] implied by #[deny(clippy)]
|
||||
|
||||
error: this public function dereferences a raw pointer but is not marked `unsafe`
|
||||
--> $DIR/functions.rs:72:35
|
||||
--> $DIR/functions.rs:62:35
|
||||
|
|
||||
72 | println!("{:?}", unsafe { p.as_ref() });
|
||||
62 | println!("{:?}", unsafe { p.as_ref() });
|
||||
| ^
|
||||
|
|
||||
= note: #[deny(not_unsafe_ptr_arg_deref)] implied by #[deny(clippy)]
|
||||
|
||||
error: this public function dereferences a raw pointer but is not marked `unsafe`
|
||||
--> $DIR/functions.rs:74:33
|
||||
--> $DIR/functions.rs:63:33
|
||||
|
|
||||
74 | unsafe { std::ptr::read(p) };
|
||||
63 | unsafe { std::ptr::read(p) };
|
||||
| ^
|
||||
|
|
||||
= note: #[deny(not_unsafe_ptr_arg_deref)] implied by #[deny(clippy)]
|
||||
|
|
|
@ -8,46 +8,28 @@
|
|||
fn main() {
|
||||
if let Ok(_) = Ok::<i32, i32>(42) {}
|
||||
|
||||
|
||||
|
||||
|
||||
if let Err(_) = Err::<i32, i32>(42) {
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
if let None = None::<()> {
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
if let Some(_) = Some(42) {
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
if Ok::<i32, i32>(42).is_ok() {
|
||||
|
||||
}
|
||||
|
||||
if Err::<i32, i32>(42).is_err() {
|
||||
|
||||
}
|
||||
|
||||
if None::<i32>.is_none() {
|
||||
|
||||
}
|
||||
|
||||
if Some(42).is_some() {
|
||||
|
||||
}
|
||||
|
||||
if let Ok(x) = Ok::<i32,i32>(42) {
|
||||
println!("{}", x);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -12,25 +12,25 @@ note: lint level defined here
|
|||
| ^^^^^^
|
||||
|
||||
error: redundant pattern matching, consider using `is_err()`
|
||||
--> $DIR/if_let_redundant_pattern_matching.rs:14:12
|
||||
--> $DIR/if_let_redundant_pattern_matching.rs:11:12
|
||||
|
|
||||
14 | if let Err(_) = Err::<i32, i32>(42) {
|
||||
11 | if let Err(_) = Err::<i32, i32>(42) {
|
||||
| -------^^^^^^---------------------- help: try this `if Err::<i32, i32>(42).is_err()`
|
||||
|
|
||||
= note: #[deny(if_let_redundant_pattern_matching)] implied by #[deny(clippy)]
|
||||
|
||||
error: redundant pattern matching, consider using `is_none()`
|
||||
--> $DIR/if_let_redundant_pattern_matching.rs:20:12
|
||||
--> $DIR/if_let_redundant_pattern_matching.rs:14:12
|
||||
|
|
||||
20 | if let None = None::<()> {
|
||||
14 | if let None = None::<()> {
|
||||
| -------^^^^------------- help: try this `if None::<()>.is_none()`
|
||||
|
|
||||
= note: #[deny(if_let_redundant_pattern_matching)] implied by #[deny(clippy)]
|
||||
|
||||
error: redundant pattern matching, consider using `is_some()`
|
||||
--> $DIR/if_let_redundant_pattern_matching.rs:26:12
|
||||
--> $DIR/if_let_redundant_pattern_matching.rs:17:12
|
||||
|
|
||||
26 | if let Some(_) = Some(42) {
|
||||
17 | if let Some(_) = Some(42) {
|
||||
| -------^^^^^^^----------- help: try this `if Some(42).is_some()`
|
||||
|
|
||||
= note: #[deny(if_let_redundant_pattern_matching)] implied by #[deny(clippy)]
|
||||
|
|
|
@ -128,16 +128,10 @@ impl HasWrongIsEmpty {
|
|||
fn main() {
|
||||
let x = [1, 2];
|
||||
if x.len() == 0 {
|
||||
|
||||
|
||||
|
||||
println!("This should not happen!");
|
||||
}
|
||||
|
||||
if "".len() == 0 {
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
let y = One;
|
||||
|
@ -152,30 +146,18 @@ fn main() {
|
|||
|
||||
let has_is_empty = HasIsEmpty;
|
||||
if has_is_empty.len() == 0 {
|
||||
|
||||
|
||||
|
||||
println!("Or this!");
|
||||
}
|
||||
if has_is_empty.len() != 0 {
|
||||
|
||||
|
||||
|
||||
println!("Or this!");
|
||||
}
|
||||
if has_is_empty.len() > 0 {
|
||||
|
||||
|
||||
|
||||
println!("Or this!");
|
||||
}
|
||||
assert!(!has_is_empty.is_empty());
|
||||
|
||||
let with_is_empty: &WithIsEmpty = &Wither;
|
||||
if with_is_empty.len() == 0 {
|
||||
|
||||
|
||||
|
||||
println!("Or this!");
|
||||
}
|
||||
assert!(!with_is_empty.is_empty());
|
||||
|
|
|
@ -59,39 +59,39 @@ note: lint level defined here
|
|||
| ^^^^^^^^
|
||||
|
||||
error: length comparison to zero
|
||||
--> $DIR/len_zero.rs:137:8
|
||||
--> $DIR/len_zero.rs:134:8
|
||||
|
|
||||
137 | if "".len() == 0 {
|
||||
134 | if "".len() == 0 {
|
||||
| ^^^^^^^^^^^^^ help: using `is_empty` is more concise: `"".is_empty()`
|
||||
|
||||
error: length comparison to zero
|
||||
--> $DIR/len_zero.rs:148:8
|
||||
|
|
||||
148 | if has_is_empty.len() == 0 {
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is more concise: `has_is_empty.is_empty()`
|
||||
|
||||
error: length comparison to zero
|
||||
--> $DIR/len_zero.rs:151:8
|
||||
|
|
||||
151 | if has_is_empty.len() != 0 {
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is more concise: `!has_is_empty.is_empty()`
|
||||
|
||||
error: length comparison to zero
|
||||
--> $DIR/len_zero.rs:154:8
|
||||
|
|
||||
154 | if has_is_empty.len() == 0 {
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is more concise: `has_is_empty.is_empty()`
|
||||
154 | if has_is_empty.len() > 0 {
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is more concise: `!has_is_empty.is_empty()`
|
||||
|
||||
error: length comparison to zero
|
||||
--> $DIR/len_zero.rs:160:8
|
||||
|
|
||||
160 | if has_is_empty.len() != 0 {
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is more concise: `!has_is_empty.is_empty()`
|
||||
|
||||
error: length comparison to zero
|
||||
--> $DIR/len_zero.rs:166:8
|
||||
|
|
||||
166 | if has_is_empty.len() > 0 {
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is more concise: `!has_is_empty.is_empty()`
|
||||
|
||||
error: length comparison to zero
|
||||
--> $DIR/len_zero.rs:175:8
|
||||
|
|
||||
175 | if with_is_empty.len() == 0 {
|
||||
160 | if with_is_empty.len() == 0 {
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is more concise: `with_is_empty.is_empty()`
|
||||
|
||||
error: length comparison to zero
|
||||
--> $DIR/len_zero.rs:190:8
|
||||
--> $DIR/len_zero.rs:172:8
|
||||
|
|
||||
190 | if b.len() != 0 {
|
||||
172 | if b.len() != 0 {
|
||||
| ^^^^^^^^^^^^ help: using `is_empty` is more concise: `!b.is_empty()`
|
||||
|
||||
error: aborting due to 11 previous errors
|
||||
|
|
|
@ -55,17 +55,11 @@ fn main() {
|
|||
issue985_alt();
|
||||
|
||||
let mut foo = 0;
|
||||
|
||||
|
||||
|
||||
if f() {
|
||||
foo = 42;
|
||||
}
|
||||
|
||||
let mut bar = 0;
|
||||
|
||||
|
||||
|
||||
if f() {
|
||||
f();
|
||||
bar = 42;
|
||||
|
@ -75,10 +69,6 @@ fn main() {
|
|||
}
|
||||
|
||||
let quz;
|
||||
|
||||
|
||||
|
||||
|
||||
if f() {
|
||||
quz = 42;
|
||||
} else {
|
||||
|
@ -87,7 +77,6 @@ fn main() {
|
|||
|
||||
// `toto` is used several times
|
||||
let mut toto;
|
||||
|
||||
if f() {
|
||||
toto = 42;
|
||||
} else {
|
||||
|
@ -109,9 +98,6 @@ fn main() {
|
|||
|
||||
// baz needs to be mut
|
||||
let mut baz = 0;
|
||||
|
||||
|
||||
|
||||
if f() {
|
||||
baz = 42;
|
||||
}
|
||||
|
|
|
@ -2,12 +2,9 @@ error: `if _ { .. } else { .. }` is an expression
|
|||
--> $DIR/let_if_seq.rs:57:5
|
||||
|
|
||||
57 | / let mut foo = 0;
|
||||
58 | |
|
||||
59 | |
|
||||
60 | |
|
||||
61 | | if f() {
|
||||
62 | | foo = 42;
|
||||
63 | | }
|
||||
58 | | if f() {
|
||||
59 | | foo = 42;
|
||||
60 | | }
|
||||
| |_____^ help: it is more idiomatic to write `let <mut> foo = if f() { 42 } else { 0 };`
|
||||
|
|
||||
note: lint level defined here
|
||||
|
@ -18,41 +15,37 @@ note: lint level defined here
|
|||
= note: you might not need `mut` at all
|
||||
|
||||
error: `if _ { .. } else { .. }` is an expression
|
||||
--> $DIR/let_if_seq.rs:65:5
|
||||
--> $DIR/let_if_seq.rs:62:5
|
||||
|
|
||||
65 | / let mut bar = 0;
|
||||
66 | |
|
||||
67 | |
|
||||
68 | |
|
||||
62 | / let mut bar = 0;
|
||||
63 | | if f() {
|
||||
64 | | f();
|
||||
65 | | bar = 42;
|
||||
... |
|
||||
74 | | f();
|
||||
75 | | }
|
||||
68 | | f();
|
||||
69 | | }
|
||||
| |_____^ help: it is more idiomatic to write `let <mut> bar = if f() { ..; 42 } else { ..; 0 };`
|
||||
|
|
||||
= note: you might not need `mut` at all
|
||||
|
||||
error: `if _ { .. } else { .. }` is an expression
|
||||
--> $DIR/let_if_seq.rs:77:5
|
||||
--> $DIR/let_if_seq.rs:71:5
|
||||
|
|
||||
77 | / let quz;
|
||||
78 | |
|
||||
79 | |
|
||||
80 | |
|
||||
... |
|
||||
85 | | quz = 0;
|
||||
86 | | }
|
||||
71 | / let quz;
|
||||
72 | | if f() {
|
||||
73 | | quz = 42;
|
||||
74 | | } else {
|
||||
75 | | quz = 0;
|
||||
76 | | }
|
||||
| |_____^ help: it is more idiomatic to write `let quz = if f() { 42 } else { 0 };`
|
||||
|
||||
error: `if _ { .. } else { .. }` is an expression
|
||||
--> $DIR/let_if_seq.rs:111:5
|
||||
--> $DIR/let_if_seq.rs:100:5
|
||||
|
|
||||
111 | / let mut baz = 0;
|
||||
112 | |
|
||||
113 | |
|
||||
114 | |
|
||||
115 | | if f() {
|
||||
116 | | baz = 42;
|
||||
117 | | }
|
||||
100 | / let mut baz = 0;
|
||||
101 | | if f() {
|
||||
102 | | baz = 42;
|
||||
103 | | }
|
||||
| |_____^ help: it is more idiomatic to write `let <mut> baz = if f() { 42 } else { 0 };`
|
||||
|
|
||||
= note: you might not need `mut` at all
|
||||
|
|
|
@ -6,10 +6,8 @@
|
|||
|
||||
fn distinct_lifetimes<'a, 'b>(_x: &'a u8, _y: &'b u8, _z: u8) { }
|
||||
|
||||
|
||||
fn distinct_and_static<'a, 'b>(_x: &'a u8, _y: &'b u8, _z: &'static u8) { }
|
||||
|
||||
|
||||
fn same_lifetime_on_input<'a>(_x: &'a u8, _y: &'a u8) { } // no error, same lifetime on two params
|
||||
|
||||
fn only_static_on_input(_x: &u8, _y: &u8, _z: &'static u8) { } // no error, static involved
|
||||
|
@ -18,7 +16,6 @@ fn mut_and_static_input(_x: &mut u8, _y: &'static str) { }
|
|||
|
||||
fn in_and_out<'a>(x: &'a u8, _y: u8) -> &'a u8 { x }
|
||||
|
||||
|
||||
fn multiple_in_and_out_1<'a>(x: &'a u8, _y: &'a u8) -> &'a u8 { x } // no error, multiple input refs
|
||||
|
||||
fn multiple_in_and_out_2<'a, 'b>(x: &'a u8, _y: &'b u8) -> &'a u8 { x } // no error, multiple input refs
|
||||
|
@ -31,18 +28,15 @@ fn deep_reference_2<'a>(x: Result<&'a u8, &'a u8>) -> &'a u8 { x.unwrap() } // n
|
|||
|
||||
fn deep_reference_3<'a>(x: &'a u8, _y: u8) -> Result<&'a u8, ()> { Ok(x) }
|
||||
|
||||
|
||||
// where clause, but without lifetimes
|
||||
fn where_clause_without_lt<'a, T>(x: &'a u8, _y: u8) -> Result<&'a u8, ()> where T: Copy { Ok(x) }
|
||||
|
||||
|
||||
type Ref<'r> = &'r u8;
|
||||
|
||||
fn lifetime_param_1<'a>(_x: Ref<'a>, _y: &'a u8) { } // no error, same lifetime on two params
|
||||
|
||||
fn lifetime_param_2<'a, 'b>(_x: Ref<'a>, _y: &'b u8) { }
|
||||
|
||||
|
||||
fn lifetime_param_3<'a, 'b: 'a>(_x: Ref<'a>, _y: &'b u8) { } // no error, bounded lifetime
|
||||
|
||||
fn lifetime_param_4<'a, 'b>(_x: Ref<'a>, _y: &'b u8) where 'b: 'a { } // no error, bounded lifetime
|
||||
|
@ -66,12 +60,10 @@ struct X {
|
|||
impl X {
|
||||
fn self_and_out<'s>(&'s self) -> &'s u8 { &self.x }
|
||||
|
||||
|
||||
fn self_and_in_out<'s, 't>(&'s self, _x: &'t u8) -> &'s u8 { &self.x } // no error, multiple input refs
|
||||
|
||||
fn distinct_self_and_in<'s, 't>(&'s self, _x: &'t u8) { }
|
||||
|
||||
|
||||
fn self_and_same_in<'s>(&'s self, _x: &'s u8) { } // no error, same lifetimes on two params
|
||||
}
|
||||
|
||||
|
|
|
@ -11,83 +11,83 @@ note: lint level defined here
|
|||
| ^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: explicit lifetimes given in parameter types where they could be elided
|
||||
--> $DIR/lifetimes.rs:10:1
|
||||
|
|
||||
10 | fn distinct_and_static<'a, 'b>(_x: &'a u8, _y: &'b u8, _z: &'static u8) { }
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
--> $DIR/lifetimes.rs:9:1
|
||||
|
|
||||
9 | fn distinct_and_static<'a, 'b>(_x: &'a u8, _y: &'b u8, _z: &'static u8) { }
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: explicit lifetimes given in parameter types where they could be elided
|
||||
--> $DIR/lifetimes.rs:19:1
|
||||
--> $DIR/lifetimes.rs:17:1
|
||||
|
|
||||
19 | fn in_and_out<'a>(x: &'a u8, _y: u8) -> &'a u8 { x }
|
||||
17 | fn in_and_out<'a>(x: &'a u8, _y: u8) -> &'a u8 { x }
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: explicit lifetimes given in parameter types where they could be elided
|
||||
--> $DIR/lifetimes.rs:29:1
|
||||
|
|
||||
29 | fn deep_reference_3<'a>(x: &'a u8, _y: u8) -> Result<&'a u8, ()> { Ok(x) }
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: explicit lifetimes given in parameter types where they could be elided
|
||||
--> $DIR/lifetimes.rs:32:1
|
||||
|
|
||||
32 | fn deep_reference_3<'a>(x: &'a u8, _y: u8) -> Result<&'a u8, ()> { Ok(x) }
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: explicit lifetimes given in parameter types where they could be elided
|
||||
--> $DIR/lifetimes.rs:36:1
|
||||
|
|
||||
36 | fn where_clause_without_lt<'a, T>(x: &'a u8, _y: u8) -> Result<&'a u8, ()> where T: Copy { Ok(x) }
|
||||
32 | fn where_clause_without_lt<'a, T>(x: &'a u8, _y: u8) -> Result<&'a u8, ()> where T: Copy { Ok(x) }
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: explicit lifetimes given in parameter types where they could be elided
|
||||
--> $DIR/lifetimes.rs:43:1
|
||||
--> $DIR/lifetimes.rs:38:1
|
||||
|
|
||||
43 | fn lifetime_param_2<'a, 'b>(_x: Ref<'a>, _y: &'b u8) { }
|
||||
38 | fn lifetime_param_2<'a, 'b>(_x: Ref<'a>, _y: &'b u8) { }
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: explicit lifetimes given in parameter types where they could be elided
|
||||
--> $DIR/lifetimes.rs:58:1
|
||||
--> $DIR/lifetimes.rs:52:1
|
||||
|
|
||||
58 | / fn fn_bound_2<'a, F, I>(_m: Lt<'a, I>, _f: F) -> Lt<'a, I>
|
||||
59 | | where for<'x> F: Fn(Lt<'x, I>) -> Lt<'x, I>
|
||||
60 | | { unreachable!() }
|
||||
52 | / fn fn_bound_2<'a, F, I>(_m: Lt<'a, I>, _f: F) -> Lt<'a, I>
|
||||
53 | | where for<'x> F: Fn(Lt<'x, I>) -> Lt<'x, I>
|
||||
54 | | { unreachable!() }
|
||||
| |__________________^
|
||||
|
||||
error: explicit lifetimes given in parameter types where they could be elided
|
||||
--> $DIR/lifetimes.rs:67:5
|
||||
--> $DIR/lifetimes.rs:61:5
|
||||
|
|
||||
67 | fn self_and_out<'s>(&'s self) -> &'s u8 { &self.x }
|
||||
61 | fn self_and_out<'s>(&'s self) -> &'s u8 { &self.x }
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: explicit lifetimes given in parameter types where they could be elided
|
||||
--> $DIR/lifetimes.rs:72:5
|
||||
--> $DIR/lifetimes.rs:65:5
|
||||
|
|
||||
72 | fn distinct_self_and_in<'s, 't>(&'s self, _x: &'t u8) { }
|
||||
65 | fn distinct_self_and_in<'s, 't>(&'s self, _x: &'t u8) { }
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: explicit lifetimes given in parameter types where they could be elided
|
||||
--> $DIR/lifetimes.rs:89:1
|
||||
--> $DIR/lifetimes.rs:81:1
|
||||
|
|
||||
89 | fn struct_with_lt<'a>(_foo: Foo<'a>) -> &'a str { unimplemented!() }
|
||||
81 | fn struct_with_lt<'a>(_foo: Foo<'a>) -> &'a str { unimplemented!() }
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: explicit lifetimes given in parameter types where they could be elided
|
||||
--> $DIR/lifetimes.rs:109:1
|
||||
--> $DIR/lifetimes.rs:101:1
|
||||
|
|
||||
109 | fn trait_obj_elided2<'a>(_arg: &'a Drop) -> &'a str { unimplemented!() }
|
||||
101 | fn trait_obj_elided2<'a>(_arg: &'a Drop) -> &'a str { unimplemented!() }
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: explicit lifetimes given in parameter types where they could be elided
|
||||
--> $DIR/lifetimes.rs:113:1
|
||||
--> $DIR/lifetimes.rs:105:1
|
||||
|
|
||||
113 | fn alias_with_lt<'a>(_foo: FooAlias<'a>) -> &'a str { unimplemented!() }
|
||||
105 | fn alias_with_lt<'a>(_foo: FooAlias<'a>) -> &'a str { unimplemented!() }
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: explicit lifetimes given in parameter types where they could be elided
|
||||
--> $DIR/lifetimes.rs:124:1
|
||||
--> $DIR/lifetimes.rs:116:1
|
||||
|
|
||||
124 | fn named_input_elided_output<'a>(_arg: &'a str) -> &str { unimplemented!() }
|
||||
116 | fn named_input_elided_output<'a>(_arg: &'a str) -> &str { unimplemented!() }
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: explicit lifetimes given in parameter types where they could be elided
|
||||
--> $DIR/lifetimes.rs:128:1
|
||||
--> $DIR/lifetimes.rs:120:1
|
||||
|
|
||||
128 | fn trait_bound_ok<'a, T: WithLifetime<'static>>(_: &'a u8, _: T) { unimplemented!() }
|
||||
120 | fn trait_bound_ok<'a, T: WithLifetime<'static>>(_: &'a u8, _: T) { unimplemented!() }
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: aborting due to 14 previous errors
|
||||
|
|
|
@ -11,7 +11,6 @@ use rustc::lint::{LintPass, LintArray};
|
|||
declare_lint! { GOOD_LINT, Warn, "good lint" }
|
||||
declare_lint! { MISSING_LINT, Warn, "missing lint" }
|
||||
|
||||
|
||||
pub struct Pass;
|
||||
|
||||
impl LintPass for Pass {
|
||||
|
@ -23,5 +22,3 @@ impl LintPass for Pass {
|
|||
fn main() {
|
||||
let _ = MISSING_LINT;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -28,11 +28,6 @@ fn main() {
|
|||
let ok10 = 0_i64;
|
||||
let fail8 = 0123;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
let ok11 = 0o123;
|
||||
let ok12 = 0b101010;
|
||||
}
|
||||
|
|
|
@ -24,9 +24,6 @@ fn dummy() {
|
|||
|
||||
fn unwrap_addr() -> Option<&'static ExprNode> {
|
||||
match ExprNode::Butterflies {
|
||||
|
||||
|
||||
|
||||
ExprNode::ExprAddrOf => Some(&NODE),
|
||||
_ => { let x = 5; None },
|
||||
}
|
||||
|
@ -36,18 +33,12 @@ fn single_match(){
|
|||
let x = Some(1u8);
|
||||
|
||||
match x {
|
||||
|
||||
|
||||
|
||||
Some(y) => { println!("{:?}", y); }
|
||||
_ => ()
|
||||
};
|
||||
|
||||
let z = (1u8,1u8);
|
||||
match z {
|
||||
|
||||
|
||||
|
||||
(2...3, 7...9) => dummy(),
|
||||
_ => {}
|
||||
};
|
||||
|
@ -70,17 +61,11 @@ fn single_match_know_enum() {
|
|||
let y : Result<_, i8> = Ok(1i8);
|
||||
|
||||
match x {
|
||||
|
||||
|
||||
|
||||
Some(y) => dummy(),
|
||||
None => ()
|
||||
};
|
||||
|
||||
match y {
|
||||
|
||||
|
||||
|
||||
Ok(y) => dummy(),
|
||||
Err(..) => ()
|
||||
};
|
||||
|
@ -88,9 +73,6 @@ fn single_match_know_enum() {
|
|||
let c = Cow::Borrowed("");
|
||||
|
||||
match c {
|
||||
|
||||
|
||||
|
||||
Cow::Borrowed(..) => dummy(),
|
||||
Cow::Owned(..) => (),
|
||||
};
|
||||
|
@ -112,51 +94,32 @@ fn match_bool() {
|
|||
let test: bool = true;
|
||||
|
||||
match test {
|
||||
|
||||
|
||||
|
||||
true => 0,
|
||||
false => 42,
|
||||
};
|
||||
|
||||
let option = 1;
|
||||
match option == 1 {
|
||||
|
||||
|
||||
|
||||
true => 1,
|
||||
false => 0,
|
||||
};
|
||||
|
||||
match test {
|
||||
|
||||
|
||||
|
||||
true => (),
|
||||
false => { println!("Noooo!"); }
|
||||
};
|
||||
|
||||
match test {
|
||||
|
||||
|
||||
|
||||
false => { println!("Noooo!"); }
|
||||
_ => (),
|
||||
};
|
||||
|
||||
match test && test {
|
||||
|
||||
|
||||
|
||||
|
||||
false => { println!("Noooo!"); }
|
||||
_ => (),
|
||||
};
|
||||
|
||||
match test {
|
||||
|
||||
|
||||
|
||||
false => { println!("Noooo!"); }
|
||||
true => { println!("Yes!"); }
|
||||
};
|
||||
|
@ -173,9 +136,6 @@ fn ref_pats() {
|
|||
{
|
||||
let v = &Some(0);
|
||||
match v {
|
||||
|
||||
|
||||
|
||||
&Some(v) => println!("{:?}", v),
|
||||
&None => println!("none"),
|
||||
}
|
||||
|
@ -186,18 +146,12 @@ fn ref_pats() {
|
|||
}
|
||||
let tup =& (1, 2);
|
||||
match tup {
|
||||
|
||||
|
||||
|
||||
&(v, 1) => println!("{}", v),
|
||||
_ => println!("none"),
|
||||
}
|
||||
// special case: using & both in expr and pats
|
||||
let w = Some(0);
|
||||
match &w {
|
||||
|
||||
|
||||
|
||||
&Some(v) => println!("{:?}", v),
|
||||
&None => println!("none"),
|
||||
}
|
||||
|
@ -209,17 +163,11 @@ fn ref_pats() {
|
|||
|
||||
let a = &Some(0);
|
||||
if let &None = a {
|
||||
|
||||
|
||||
|
||||
println!("none");
|
||||
}
|
||||
|
||||
let b = Some(0);
|
||||
if let &None = &b {
|
||||
|
||||
|
||||
|
||||
println!("none");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,12 +2,9 @@ error: you seem to be trying to use match for destructuring a single pattern. Co
|
|||
--> $DIR/matches.rs:26:5
|
||||
|
|
||||
26 | / match ExprNode::Butterflies {
|
||||
27 | |
|
||||
28 | |
|
||||
29 | |
|
||||
30 | | ExprNode::ExprAddrOf => Some(&NODE),
|
||||
31 | | _ => { let x = 5; None },
|
||||
32 | | }
|
||||
27 | | ExprNode::ExprAddrOf => Some(&NODE),
|
||||
28 | | _ => { let x = 5; None },
|
||||
29 | | }
|
||||
| |_____^ help: try this `if let ExprNode::ExprAddrOf = ExprNode::Butterflies { Some(&NODE) } else { let x = 5; None }`
|
||||
|
|
||||
note: lint level defined here
|
||||
|
@ -17,15 +14,12 @@ note: lint level defined here
|
|||
| ^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: you seem to be trying to use match for destructuring a single pattern. Consider using `if let`
|
||||
--> $DIR/matches.rs:38:5
|
||||
--> $DIR/matches.rs:35:5
|
||||
|
|
||||
38 | / match x {
|
||||
39 | |
|
||||
40 | |
|
||||
41 | |
|
||||
42 | | Some(y) => { println!("{:?}", y); }
|
||||
43 | | _ => ()
|
||||
44 | | };
|
||||
35 | / match x {
|
||||
36 | | Some(y) => { println!("{:?}", y); }
|
||||
37 | | _ => ()
|
||||
38 | | };
|
||||
| |_____^ help: try this `if let Some(y) = x { println!("{:?}", y); }`
|
||||
|
|
||||
= note: #[deny(single_match)] implied by #[deny(clippy)]
|
||||
|
@ -36,140 +30,113 @@ note: lint level defined here
|
|||
| ^^^^^^
|
||||
|
||||
error: you seem to be trying to use match for destructuring a single pattern. Consider using `if let`
|
||||
--> $DIR/matches.rs:47:5
|
||||
--> $DIR/matches.rs:41:5
|
||||
|
|
||||
47 | / match z {
|
||||
48 | |
|
||||
49 | |
|
||||
50 | |
|
||||
51 | | (2...3, 7...9) => dummy(),
|
||||
52 | | _ => {}
|
||||
53 | | };
|
||||
41 | / match z {
|
||||
42 | | (2...3, 7...9) => dummy(),
|
||||
43 | | _ => {}
|
||||
44 | | };
|
||||
| |_____^ help: try this `if let (2...3, 7...9) = z { dummy() }`
|
||||
|
|
||||
= note: #[deny(single_match)] implied by #[deny(clippy)]
|
||||
|
||||
error: you seem to be trying to use match for destructuring a single pattern. Consider using `if let`
|
||||
--> $DIR/matches.rs:72:5
|
||||
--> $DIR/matches.rs:63:5
|
||||
|
|
||||
72 | / match x {
|
||||
73 | |
|
||||
74 | |
|
||||
75 | |
|
||||
76 | | Some(y) => dummy(),
|
||||
77 | | None => ()
|
||||
78 | | };
|
||||
63 | / match x {
|
||||
64 | | Some(y) => dummy(),
|
||||
65 | | None => ()
|
||||
66 | | };
|
||||
| |_____^ help: try this `if let Some(y) = x { dummy() }`
|
||||
|
|
||||
= note: #[deny(single_match)] implied by #[deny(clippy)]
|
||||
|
||||
error: you seem to be trying to use match for destructuring a single pattern. Consider using `if let`
|
||||
--> $DIR/matches.rs:80:5
|
||||
--> $DIR/matches.rs:68:5
|
||||
|
|
||||
80 | / match y {
|
||||
81 | |
|
||||
82 | |
|
||||
83 | |
|
||||
84 | | Ok(y) => dummy(),
|
||||
85 | | Err(..) => ()
|
||||
86 | | };
|
||||
68 | / match y {
|
||||
69 | | Ok(y) => dummy(),
|
||||
70 | | Err(..) => ()
|
||||
71 | | };
|
||||
| |_____^ help: try this `if let Ok(y) = y { dummy() }`
|
||||
|
|
||||
= note: #[deny(single_match)] implied by #[deny(clippy)]
|
||||
|
||||
error: you seem to be trying to use match for destructuring a single pattern. Consider using `if let`
|
||||
--> $DIR/matches.rs:90:5
|
||||
--> $DIR/matches.rs:75:5
|
||||
|
|
||||
90 | / match c {
|
||||
91 | |
|
||||
92 | |
|
||||
93 | |
|
||||
94 | | Cow::Borrowed(..) => dummy(),
|
||||
95 | | Cow::Owned(..) => (),
|
||||
96 | | };
|
||||
75 | / match c {
|
||||
76 | | Cow::Borrowed(..) => dummy(),
|
||||
77 | | Cow::Owned(..) => (),
|
||||
78 | | };
|
||||
| |_____^ help: try this `if let Cow::Borrowed(..) = c { dummy() }`
|
||||
|
|
||||
= note: #[deny(single_match)] implied by #[deny(clippy)]
|
||||
|
||||
error: you seem to be trying to match on a boolean expression
|
||||
--> $DIR/matches.rs:114:5
|
||||
|
|
||||
114 | / match test {
|
||||
115 | |
|
||||
116 | |
|
||||
117 | |
|
||||
118 | | true => 0,
|
||||
119 | | false => 42,
|
||||
120 | | };
|
||||
| |_____^ help: consider using an if/else expression `if test { 0 } else { 42 }`
|
||||
|
|
||||
= note: #[deny(match_bool)] implied by #[deny(clippy)]
|
||||
--> $DIR/matches.rs:96:5
|
||||
|
|
||||
96 | / match test {
|
||||
97 | | true => 0,
|
||||
98 | | false => 42,
|
||||
99 | | };
|
||||
| |_____^ help: consider using an if/else expression `if test { 0 } else { 42 }`
|
||||
|
|
||||
= note: #[deny(match_bool)] implied by #[deny(clippy)]
|
||||
note: lint level defined here
|
||||
--> $DIR/matches.rs:5:9
|
||||
|
|
||||
5 | #![deny(clippy)]
|
||||
| ^^^^^^
|
||||
--> $DIR/matches.rs:5:9
|
||||
|
|
||||
5 | #![deny(clippy)]
|
||||
| ^^^^^^
|
||||
|
||||
error: you seem to be trying to match on a boolean expression
|
||||
--> $DIR/matches.rs:123:5
|
||||
--> $DIR/matches.rs:102:5
|
||||
|
|
||||
123 | / match option == 1 {
|
||||
124 | |
|
||||
125 | |
|
||||
126 | |
|
||||
127 | | true => 1,
|
||||
128 | | false => 0,
|
||||
129 | | };
|
||||
102 | / match option == 1 {
|
||||
103 | | true => 1,
|
||||
104 | | false => 0,
|
||||
105 | | };
|
||||
| |_____^ help: consider using an if/else expression `if option == 1 { 1 } else { 0 }`
|
||||
|
|
||||
= note: #[deny(match_bool)] implied by #[deny(clippy)]
|
||||
|
||||
error: you seem to be trying to match on a boolean expression
|
||||
--> $DIR/matches.rs:131:5
|
||||
--> $DIR/matches.rs:107:5
|
||||
|
|
||||
131 | / match test {
|
||||
132 | |
|
||||
133 | |
|
||||
134 | |
|
||||
135 | | true => (),
|
||||
136 | | false => { println!("Noooo!"); }
|
||||
137 | | };
|
||||
107 | / match test {
|
||||
108 | | true => (),
|
||||
109 | | false => { println!("Noooo!"); }
|
||||
110 | | };
|
||||
| |_____^ help: consider using an if/else expression `if !test { println!("Noooo!"); }`
|
||||
|
|
||||
= note: #[deny(match_bool)] implied by #[deny(clippy)]
|
||||
|
||||
error: you seem to be trying to match on a boolean expression
|
||||
--> $DIR/matches.rs:139:5
|
||||
--> $DIR/matches.rs:112:5
|
||||
|
|
||||
139 | / match test {
|
||||
140 | |
|
||||
141 | |
|
||||
142 | |
|
||||
143 | | false => { println!("Noooo!"); }
|
||||
144 | | _ => (),
|
||||
145 | | };
|
||||
112 | / match test {
|
||||
113 | | false => { println!("Noooo!"); }
|
||||
114 | | _ => (),
|
||||
115 | | };
|
||||
| |_____^ help: consider using an if/else expression `if !test { println!("Noooo!"); }`
|
||||
|
|
||||
= note: #[deny(match_bool)] implied by #[deny(clippy)]
|
||||
|
||||
error: you seem to be trying to match on a boolean expression
|
||||
--> $DIR/matches.rs:147:5
|
||||
--> $DIR/matches.rs:117:5
|
||||
|
|
||||
147 | / match test && test {
|
||||
148 | |
|
||||
149 | |
|
||||
150 | |
|
||||
... |
|
||||
153 | | _ => (),
|
||||
154 | | };
|
||||
117 | / match test && test {
|
||||
118 | | false => { println!("Noooo!"); }
|
||||
119 | | _ => (),
|
||||
120 | | };
|
||||
| |_____^ help: consider using an if/else expression `if !(test && test) { println!("Noooo!"); }`
|
||||
|
|
||||
= note: #[deny(match_bool)] implied by #[deny(clippy)]
|
||||
|
||||
error: equal expressions as operands to `&&`
|
||||
--> $DIR/matches.rs:147:11
|
||||
--> $DIR/matches.rs:117:11
|
||||
|
|
||||
147 | match test && test {
|
||||
117 | match test && test {
|
||||
| ^^^^^^^^^^^^
|
||||
|
|
||||
= note: #[deny(eq_op)] implied by #[deny(clippy)]
|
||||
|
@ -180,29 +147,23 @@ note: lint level defined here
|
|||
| ^^^^^^
|
||||
|
||||
error: you seem to be trying to match on a boolean expression
|
||||
--> $DIR/matches.rs:156:5
|
||||
--> $DIR/matches.rs:122:5
|
||||
|
|
||||
156 | / match test {
|
||||
157 | |
|
||||
158 | |
|
||||
159 | |
|
||||
160 | | false => { println!("Noooo!"); }
|
||||
161 | | true => { println!("Yes!"); }
|
||||
162 | | };
|
||||
122 | / match test {
|
||||
123 | | false => { println!("Noooo!"); }
|
||||
124 | | true => { println!("Yes!"); }
|
||||
125 | | };
|
||||
| |_____^ help: consider using an if/else expression `if test { println!("Yes!"); } else { println!("Noooo!"); }`
|
||||
|
|
||||
= note: #[deny(match_bool)] implied by #[deny(clippy)]
|
||||
|
||||
error: you don't need to add `&` to all patterns
|
||||
--> $DIR/matches.rs:175:9
|
||||
--> $DIR/matches.rs:138:9
|
||||
|
|
||||
175 | / match v {
|
||||
176 | |
|
||||
177 | |
|
||||
178 | |
|
||||
179 | | &Some(v) => println!("{:?}", v),
|
||||
180 | | &None => println!("none"),
|
||||
181 | | }
|
||||
138 | / match v {
|
||||
139 | | &Some(v) => println!("{:?}", v),
|
||||
140 | | &None => println!("none"),
|
||||
141 | | }
|
||||
| |_________^
|
||||
|
|
||||
= note: #[deny(match_ref_pats)] implied by #[deny(clippy)]
|
||||
|
@ -215,15 +176,12 @@ help: instead of prefixing all patterns with `&`, you can dereference the expres
|
|||
| match *v { .. }
|
||||
|
||||
error: you don't need to add `&` to all patterns
|
||||
--> $DIR/matches.rs:188:5
|
||||
--> $DIR/matches.rs:148:5
|
||||
|
|
||||
188 | / match tup {
|
||||
189 | |
|
||||
190 | |
|
||||
191 | |
|
||||
192 | | &(v, 1) => println!("{}", v),
|
||||
193 | | _ => println!("none"),
|
||||
194 | | }
|
||||
148 | / match tup {
|
||||
149 | | &(v, 1) => println!("{}", v),
|
||||
150 | | _ => println!("none"),
|
||||
151 | | }
|
||||
| |_____^
|
||||
|
|
||||
= note: #[deny(match_ref_pats)] implied by #[deny(clippy)]
|
||||
|
@ -231,28 +189,22 @@ help: instead of prefixing all patterns with `&`, you can dereference the expres
|
|||
| match *tup { .. }
|
||||
|
||||
error: you don't need to add `&` to both the expression and the patterns
|
||||
--> $DIR/matches.rs:197:5
|
||||
--> $DIR/matches.rs:154:5
|
||||
|
|
||||
197 | / match &w {
|
||||
198 | |
|
||||
199 | |
|
||||
200 | |
|
||||
201 | | &Some(v) => println!("{:?}", v),
|
||||
202 | | &None => println!("none"),
|
||||
203 | | }
|
||||
154 | / match &w {
|
||||
155 | | &Some(v) => println!("{:?}", v),
|
||||
156 | | &None => println!("none"),
|
||||
157 | | }
|
||||
| |_____^ help: try `match w { .. }`
|
||||
|
|
||||
= note: #[deny(match_ref_pats)] implied by #[deny(clippy)]
|
||||
|
||||
error: you don't need to add `&` to all patterns
|
||||
--> $DIR/matches.rs:211:5
|
||||
--> $DIR/matches.rs:165:5
|
||||
|
|
||||
211 | / if let &None = a {
|
||||
212 | |
|
||||
213 | |
|
||||
214 | |
|
||||
215 | | println!("none");
|
||||
216 | | }
|
||||
165 | / if let &None = a {
|
||||
166 | | println!("none");
|
||||
167 | | }
|
||||
| |_____^
|
||||
|
|
||||
= note: #[deny(match_ref_pats)] implied by #[deny(clippy)]
|
||||
|
@ -260,22 +212,19 @@ help: instead of prefixing all patterns with `&`, you can dereference the expres
|
|||
| if let .. = *a { .. }
|
||||
|
||||
error: you don't need to add `&` to both the expression and the patterns
|
||||
--> $DIR/matches.rs:219:5
|
||||
--> $DIR/matches.rs:170:5
|
||||
|
|
||||
219 | / if let &None = &b {
|
||||
220 | |
|
||||
221 | |
|
||||
222 | |
|
||||
223 | | println!("none");
|
||||
224 | | }
|
||||
170 | / if let &None = &b {
|
||||
171 | | println!("none");
|
||||
172 | | }
|
||||
| |_____^ help: try `if let .. = b { .. }`
|
||||
|
|
||||
= note: #[deny(match_ref_pats)] implied by #[deny(clippy)]
|
||||
|
||||
error: some ranges overlap
|
||||
--> $DIR/matches.rs:231:9
|
||||
--> $DIR/matches.rs:179:9
|
||||
|
|
||||
231 | 0 ... 10 => println!("0 ... 10"),
|
||||
179 | 0 ... 10 => println!("0 ... 10"),
|
||||
| ^^^^^^^^
|
||||
|
|
||||
= note: #[deny(match_overlapping_arm)] implied by #[deny(clippy)]
|
||||
|
@ -285,67 +234,67 @@ note: lint level defined here
|
|||
5 | #![deny(clippy)]
|
||||
| ^^^^^^
|
||||
note: overlaps with this
|
||||
--> $DIR/matches.rs:232:9
|
||||
--> $DIR/matches.rs:180:9
|
||||
|
|
||||
232 | 0 ... 11 => println!("0 ... 11"),
|
||||
180 | 0 ... 11 => println!("0 ... 11"),
|
||||
| ^^^^^^^^
|
||||
|
||||
error: some ranges overlap
|
||||
--> $DIR/matches.rs:237:9
|
||||
--> $DIR/matches.rs:185:9
|
||||
|
|
||||
237 | 0 ... 5 => println!("0 ... 5"),
|
||||
185 | 0 ... 5 => println!("0 ... 5"),
|
||||
| ^^^^^^^
|
||||
|
|
||||
= note: #[deny(match_overlapping_arm)] implied by #[deny(clippy)]
|
||||
note: overlaps with this
|
||||
--> $DIR/matches.rs:239:9
|
||||
--> $DIR/matches.rs:187:9
|
||||
|
|
||||
239 | FOO ... 11 => println!("0 ... 11"),
|
||||
187 | FOO ... 11 => println!("0 ... 11"),
|
||||
| ^^^^^^^^^^
|
||||
|
||||
error: some ranges overlap
|
||||
--> $DIR/matches.rs:245:9
|
||||
--> $DIR/matches.rs:193:9
|
||||
|
|
||||
245 | 0 ... 5 => println!("0 ... 5"),
|
||||
193 | 0 ... 5 => println!("0 ... 5"),
|
||||
| ^^^^^^^
|
||||
|
|
||||
= note: #[deny(match_overlapping_arm)] implied by #[deny(clippy)]
|
||||
note: overlaps with this
|
||||
--> $DIR/matches.rs:244:9
|
||||
--> $DIR/matches.rs:192:9
|
||||
|
|
||||
244 | 2 => println!("2"),
|
||||
192 | 2 => println!("2"),
|
||||
| ^
|
||||
|
||||
error: some ranges overlap
|
||||
--> $DIR/matches.rs:251:9
|
||||
--> $DIR/matches.rs:199:9
|
||||
|
|
||||
251 | 0 ... 2 => println!("0 ... 2"),
|
||||
199 | 0 ... 2 => println!("0 ... 2"),
|
||||
| ^^^^^^^
|
||||
|
|
||||
= note: #[deny(match_overlapping_arm)] implied by #[deny(clippy)]
|
||||
note: overlaps with this
|
||||
--> $DIR/matches.rs:250:9
|
||||
--> $DIR/matches.rs:198:9
|
||||
|
|
||||
250 | 2 => println!("2"),
|
||||
198 | 2 => println!("2"),
|
||||
| ^
|
||||
|
||||
error: some ranges overlap
|
||||
--> $DIR/matches.rs:274:9
|
||||
--> $DIR/matches.rs:222:9
|
||||
|
|
||||
274 | 0 .. 11 => println!("0 .. 11"),
|
||||
222 | 0 .. 11 => println!("0 .. 11"),
|
||||
| ^^^^^^^
|
||||
|
|
||||
= note: #[deny(match_overlapping_arm)] implied by #[deny(clippy)]
|
||||
note: overlaps with this
|
||||
--> $DIR/matches.rs:275:9
|
||||
--> $DIR/matches.rs:223:9
|
||||
|
|
||||
275 | 0 ... 11 => println!("0 ... 11"),
|
||||
223 | 0 ... 11 => println!("0 ... 11"),
|
||||
| ^^^^^^^^
|
||||
|
||||
error: Err(_) will match all errors, maybe not a good idea
|
||||
--> $DIR/matches.rs:292:9
|
||||
--> $DIR/matches.rs:240:9
|
||||
|
|
||||
292 | Err(_) => panic!("err")
|
||||
240 | Err(_) => panic!("err")
|
||||
| ^^^^^^
|
||||
|
|
||||
= note: #[deny(match_wild_err_arm)] implied by #[deny(clippy)]
|
||||
|
@ -357,18 +306,18 @@ note: lint level defined here
|
|||
= note: to remove this warning, match each error seperately or use unreachable macro
|
||||
|
||||
error: Err(_) will match all errors, maybe not a good idea
|
||||
--> $DIR/matches.rs:298:9
|
||||
--> $DIR/matches.rs:246:9
|
||||
|
|
||||
298 | Err(_) => {panic!()}
|
||||
246 | Err(_) => {panic!()}
|
||||
| ^^^^^^
|
||||
|
|
||||
= note: #[deny(match_wild_err_arm)] implied by #[deny(clippy)]
|
||||
= note: to remove this warning, match each error seperately or use unreachable macro
|
||||
|
||||
error: Err(_) will match all errors, maybe not a good idea
|
||||
--> $DIR/matches.rs:304:9
|
||||
--> $DIR/matches.rs:252:9
|
||||
|
|
||||
304 | Err(_) => {panic!();}
|
||||
252 | Err(_) => {panic!();}
|
||||
| ^^^^^^
|
||||
|
|
||||
= note: #[deny(match_wild_err_arm)] implied by #[deny(clippy)]
|
||||
|
|
|
@ -17,14 +17,11 @@ fn main() {
|
|||
let six: Arc<i32> = Arc::new(6);
|
||||
memstuff::forget(six);
|
||||
|
||||
|
||||
let seven: Rc<i32> = Rc::new(7);
|
||||
std::mem::forget(seven);
|
||||
|
||||
|
||||
let eight: Vec<i32> = vec![8];
|
||||
forgetSomething(eight);
|
||||
|
||||
|
||||
std::mem::forget(7);
|
||||
}
|
||||
|
|
|
@ -11,15 +11,15 @@ note: lint level defined here
|
|||
| ^^^^^^^^^^
|
||||
|
||||
error: usage of mem::forget on Drop type
|
||||
--> $DIR/mem_forget.rs:22:5
|
||||
--> $DIR/mem_forget.rs:21:5
|
||||
|
|
||||
22 | std::mem::forget(seven);
|
||||
21 | std::mem::forget(seven);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: usage of mem::forget on Drop type
|
||||
--> $DIR/mem_forget.rs:26:5
|
||||
--> $DIR/mem_forget.rs:24:5
|
||||
|
|
||||
26 | forgetSomething(eight);
|
||||
24 | forgetSomething(eight);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: aborting due to 3 previous errors
|
||||
|
|
|
@ -28,8 +28,6 @@ impl T {
|
|||
fn to_something(self) -> u32 { 0 }
|
||||
|
||||
fn new(self) {}
|
||||
|
||||
|
||||
}
|
||||
|
||||
struct Lt<'a> {
|
||||
|
@ -195,8 +193,6 @@ fn filter_next() {
|
|||
// check single-line case
|
||||
let _ = v.iter().filter(|&x| *x < 0).next();
|
||||
|
||||
|
||||
|
||||
// check multi-line case
|
||||
let _ = v.iter().filter(|&x| {
|
||||
*x < 0
|
||||
|
@ -215,8 +211,6 @@ fn search_is_some() {
|
|||
// check `find().is_some()`, single-line
|
||||
let _ = v.iter().find(|&x| *x < 0).is_some();
|
||||
|
||||
|
||||
|
||||
// check `find().is_some()`, multi-line
|
||||
let _ = v.iter().find(|&x| {
|
||||
*x < 0
|
||||
|
@ -226,8 +220,6 @@ fn search_is_some() {
|
|||
// check `position().is_some()`, single-line
|
||||
let _ = v.iter().position(|&x| x < 0).is_some();
|
||||
|
||||
|
||||
|
||||
// check `position().is_some()`, multi-line
|
||||
let _ = v.iter().position(|&x| {
|
||||
x < 0
|
||||
|
@ -237,8 +229,6 @@ fn search_is_some() {
|
|||
// check `rposition().is_some()`, single-line
|
||||
let _ = v.iter().rposition(|&x| x < 0).is_some();
|
||||
|
||||
|
||||
|
||||
// check `rposition().is_some()`, multi-line
|
||||
let _ = v.iter().rposition(|&x| {
|
||||
x < 0
|
||||
|
@ -277,74 +267,40 @@ fn or_fun_call() {
|
|||
let with_constructor = Some(vec![1]);
|
||||
with_constructor.unwrap_or(make());
|
||||
|
||||
|
||||
|
||||
|
||||
let with_new = Some(vec![1]);
|
||||
with_new.unwrap_or(Vec::new());
|
||||
|
||||
|
||||
|
||||
|
||||
let with_const_args = Some(vec![1]);
|
||||
with_const_args.unwrap_or(Vec::with_capacity(12));
|
||||
|
||||
|
||||
|
||||
|
||||
let with_err : Result<_, ()> = Ok(vec![1]);
|
||||
with_err.unwrap_or(make());
|
||||
|
||||
|
||||
|
||||
|
||||
let with_err_args : Result<_, ()> = Ok(vec![1]);
|
||||
with_err_args.unwrap_or(Vec::with_capacity(12));
|
||||
|
||||
|
||||
|
||||
|
||||
let with_default_trait = Some(1);
|
||||
with_default_trait.unwrap_or(Default::default());
|
||||
|
||||
|
||||
|
||||
|
||||
let with_default_type = Some(1);
|
||||
with_default_type.unwrap_or(u64::default());
|
||||
|
||||
|
||||
|
||||
|
||||
let with_vec = Some(vec![1]);
|
||||
with_vec.unwrap_or(vec![]);
|
||||
|
||||
|
||||
// FIXME #944: ~|SUGGESTION with_vec.unwrap_or_else(|| vec![]);
|
||||
|
||||
let without_default = Some(Foo);
|
||||
without_default.unwrap_or(Foo::new());
|
||||
|
||||
|
||||
|
||||
|
||||
let mut map = HashMap::<u64, String>::new();
|
||||
map.entry(42).or_insert(String::new());
|
||||
|
||||
|
||||
|
||||
|
||||
let mut btree = BTreeMap::<u64, String>::new();
|
||||
btree.entry(42).or_insert(String::new());
|
||||
|
||||
|
||||
|
||||
|
||||
let stringy = Some(String::from(""));
|
||||
let _ = stringy.unwrap_or("".to_owned());
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// Checks implementation of `ITER_NTH` lint
|
||||
|
@ -356,27 +312,20 @@ fn iter_nth() {
|
|||
{
|
||||
// Make sure we lint `.iter()` for relevant types
|
||||
let bad_vec = some_vec.iter().nth(3);
|
||||
|
||||
let bad_slice = &some_vec[..].iter().nth(3);
|
||||
|
||||
let bad_boxed_slice = boxed_slice.iter().nth(3);
|
||||
|
||||
let bad_vec_deque = some_vec_deque.iter().nth(3);
|
||||
|
||||
}
|
||||
|
||||
{
|
||||
// Make sure we lint `.iter_mut()` for relevant types
|
||||
let bad_vec = some_vec.iter_mut().nth(3);
|
||||
|
||||
}
|
||||
{
|
||||
let bad_slice = &some_vec[..].iter_mut().nth(3);
|
||||
|
||||
}
|
||||
{
|
||||
let bad_vec_deque = some_vec_deque.iter_mut().nth(3);
|
||||
|
||||
}
|
||||
|
||||
// Make sure we don't lint for non-relevant types
|
||||
|
@ -388,19 +337,10 @@ fn iter_nth() {
|
|||
/// Checks implementation of `ITER_SKIP_NEXT` lint
|
||||
fn iter_skip_next() {
|
||||
let mut some_vec = vec![0, 1, 2, 3];
|
||||
|
||||
let _ = some_vec.iter().skip(42).next();
|
||||
|
||||
|
||||
let _ = some_vec.iter().cycle().skip(42).next();
|
||||
|
||||
|
||||
let _ = (1..10).skip(10).next();
|
||||
|
||||
|
||||
let _ = &some_vec[..].iter().skip(3).next();
|
||||
|
||||
|
||||
let foo = IteratorFalsePositives { foo : 0 };
|
||||
let _ = foo.skip(42).next();
|
||||
let _ = foo.filter().skip(42).next();
|
||||
|
@ -427,51 +367,19 @@ fn get_unwrap() {
|
|||
|
||||
{ // Test `get().unwrap()`
|
||||
let _ = boxed_slice.get(1).unwrap();
|
||||
|
||||
|
||||
|
||||
let _ = some_slice.get(0).unwrap();
|
||||
|
||||
|
||||
|
||||
let _ = some_vec.get(0).unwrap();
|
||||
|
||||
|
||||
|
||||
let _ = some_vecdeque.get(0).unwrap();
|
||||
|
||||
|
||||
|
||||
let _ = some_hashmap.get(&1).unwrap();
|
||||
|
||||
|
||||
|
||||
let _ = some_btreemap.get(&1).unwrap();
|
||||
|
||||
|
||||
|
||||
|
||||
let _ = false_positive.get(0).unwrap();
|
||||
}
|
||||
|
||||
{ // Test `get_mut().unwrap()`
|
||||
*boxed_slice.get_mut(0).unwrap() = 1;
|
||||
|
||||
|
||||
|
||||
*some_slice.get_mut(0).unwrap() = 1;
|
||||
|
||||
|
||||
|
||||
*some_vec.get_mut(0).unwrap() = 1;
|
||||
|
||||
|
||||
|
||||
*some_vecdeque.get_mut(0).unwrap() = 1;
|
||||
|
||||
|
||||
|
||||
|
||||
// Check false positives
|
||||
*some_hashmap.get_mut(&1).unwrap() = 'b';
|
||||
*some_btreemap.get_mut(&1).unwrap() = 'b';
|
||||
|
@ -515,14 +423,7 @@ struct MyErrorWithParam<T> {
|
|||
#[allow(unnecessary_operation)]
|
||||
fn starts_with() {
|
||||
"".chars().next() == Some(' ');
|
||||
|
||||
|
||||
|
||||
|
||||
Some(' ') != "".chars().next();
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
fn str_extend_chars() {
|
||||
|
@ -533,21 +434,12 @@ fn str_extend_chars() {
|
|||
s.push_str(abc);
|
||||
s.extend(abc.chars());
|
||||
|
||||
|
||||
|
||||
|
||||
s.push_str("abc");
|
||||
s.extend("abc".chars());
|
||||
|
||||
|
||||
|
||||
|
||||
s.push_str(&def);
|
||||
s.extend(def.chars());
|
||||
|
||||
|
||||
|
||||
|
||||
s.extend(abc.chars().skip(1));
|
||||
s.extend("abc".chars().skip(1));
|
||||
s.extend(['a', 'b', 'c'].iter());
|
||||
|
@ -559,21 +451,15 @@ fn str_extend_chars() {
|
|||
fn clone_on_copy() {
|
||||
42.clone();
|
||||
|
||||
|
||||
vec![1].clone(); // ok, not a Copy type
|
||||
Some(vec![1]).clone(); // ok, not a Copy type
|
||||
(&42).clone();
|
||||
|
||||
|
||||
}
|
||||
|
||||
fn clone_on_copy_generic<T: Copy>(t: T) {
|
||||
t.clone();
|
||||
|
||||
|
||||
Some(t).clone();
|
||||
|
||||
|
||||
}
|
||||
|
||||
fn clone_on_double_ref() {
|
||||
|
@ -581,24 +467,17 @@ fn clone_on_double_ref() {
|
|||
let y = &&x;
|
||||
let z: &Vec<_> = y.clone();
|
||||
|
||||
|
||||
println!("{:p} {:p}",*y, z);
|
||||
}
|
||||
|
||||
fn single_char_pattern() {
|
||||
let x = "foo";
|
||||
x.split("x");
|
||||
|
||||
|
||||
|
||||
|
||||
x.split("xx");
|
||||
|
||||
x.split('x');
|
||||
|
||||
let y = "x";
|
||||
x.split(y);
|
||||
|
||||
// Not yet testing for multi-byte characters
|
||||
// Changing `r.len() == 1` to `r.chars().count() == 1` in `lint_single_char_pattern`
|
||||
// should have done this but produced an ICE
|
||||
|
@ -610,72 +489,23 @@ fn single_char_pattern() {
|
|||
x.split("💣");
|
||||
// Can't use this lint for unicode code points which don't fit in a char
|
||||
x.split("❤️");
|
||||
|
||||
x.contains("x");
|
||||
|
||||
|
||||
|
||||
x.starts_with("x");
|
||||
|
||||
|
||||
|
||||
x.ends_with("x");
|
||||
|
||||
|
||||
|
||||
x.find("x");
|
||||
|
||||
|
||||
|
||||
x.rfind("x");
|
||||
|
||||
|
||||
|
||||
x.rsplit("x");
|
||||
|
||||
|
||||
|
||||
x.split_terminator("x");
|
||||
|
||||
|
||||
|
||||
x.rsplit_terminator("x");
|
||||
|
||||
|
||||
|
||||
x.splitn(0, "x");
|
||||
|
||||
|
||||
|
||||
x.rsplitn(0, "x");
|
||||
|
||||
|
||||
|
||||
x.matches("x");
|
||||
|
||||
|
||||
|
||||
x.rmatches("x");
|
||||
|
||||
|
||||
|
||||
x.match_indices("x");
|
||||
|
||||
|
||||
|
||||
x.rmatch_indices("x");
|
||||
|
||||
|
||||
|
||||
x.trim_left_matches("x");
|
||||
|
||||
|
||||
|
||||
x.trim_right_matches("x");
|
||||
|
||||
|
||||
|
||||
|
||||
let h = HashSet::<String>::new();
|
||||
h.contains("X"); // should not warn
|
||||
}
|
||||
|
@ -685,15 +515,11 @@ fn temporary_cstring() {
|
|||
use std::ffi::CString;
|
||||
|
||||
CString::new("foo").unwrap().as_ptr();
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
fn iter_clone_collect() {
|
||||
let v = [1,2,3,4,5];
|
||||
let v2 : Vec<isize> = v.iter().cloned().collect();
|
||||
|
||||
let v3 : HashSet<isize> = v.iter().cloned().collect();
|
||||
let v4 : VecDeque<isize> = v.iter().cloned().collect();
|
||||
}
|
||||
|
|
|
@ -62,53 +62,53 @@ note: lint level defined here
|
|||
| ^^^^^^
|
||||
|
||||
error: called `map(f).unwrap_or(a)` on an Option value. This can be done more directly by calling `map_or(a, f)` instead
|
||||
--> $DIR/methods.rs:99:13
|
||||
|
|
||||
99 | let _ = opt.map(|x| x + 1)
|
||||
| _____________^
|
||||
100 | |
|
||||
101 | | .unwrap_or(0); // should lint even though this call is on a separate line
|
||||
| |____________________________^
|
||||
|
|
||||
= note: #[deny(option_map_unwrap_or)] implied by #[deny(clippy_pedantic)]
|
||||
--> $DIR/methods.rs:97:13
|
||||
|
|
||||
97 | let _ = opt.map(|x| x + 1)
|
||||
| _____________^
|
||||
98 | |
|
||||
99 | | .unwrap_or(0); // should lint even though this call is on a separate line
|
||||
| |____________________________^
|
||||
|
|
||||
= note: #[deny(option_map_unwrap_or)] implied by #[deny(clippy_pedantic)]
|
||||
note: lint level defined here
|
||||
--> $DIR/methods.rs:5:17
|
||||
|
|
||||
5 | #![deny(clippy, clippy_pedantic)]
|
||||
| ^^^^^^^^^^^^^^^
|
||||
= note: replace `map(|x| x + 1).unwrap_or(0)` with `map_or(0, |x| x + 1)`
|
||||
--> $DIR/methods.rs:5:17
|
||||
|
|
||||
5 | #![deny(clippy, clippy_pedantic)]
|
||||
| ^^^^^^^^^^^^^^^
|
||||
= note: replace `map(|x| x + 1).unwrap_or(0)` with `map_or(0, |x| x + 1)`
|
||||
|
||||
error: called `map(f).unwrap_or(a)` on an Option value. This can be done more directly by calling `map_or(a, f)` instead
|
||||
--> $DIR/methods.rs:103:13
|
||||
--> $DIR/methods.rs:101:13
|
||||
|
|
||||
103 | let _ = opt.map(|x| {
|
||||
101 | let _ = opt.map(|x| {
|
||||
| _____________^
|
||||
104 | | x + 1
|
||||
105 | | }
|
||||
106 | | ).unwrap_or(0);
|
||||
102 | | x + 1
|
||||
103 | | }
|
||||
104 | | ).unwrap_or(0);
|
||||
| |____________________________^
|
||||
|
|
||||
= note: #[deny(option_map_unwrap_or)] implied by #[deny(clippy_pedantic)]
|
||||
|
||||
error: called `map(f).unwrap_or(a)` on an Option value. This can be done more directly by calling `map_or(a, f)` instead
|
||||
--> $DIR/methods.rs:107:13
|
||||
--> $DIR/methods.rs:105:13
|
||||
|
|
||||
107 | let _ = opt.map(|x| x + 1)
|
||||
105 | let _ = opt.map(|x| x + 1)
|
||||
| _____________^
|
||||
108 | | .unwrap_or({
|
||||
109 | | 0
|
||||
110 | | });
|
||||
106 | | .unwrap_or({
|
||||
107 | | 0
|
||||
108 | | });
|
||||
| |__________________^
|
||||
|
|
||||
= note: #[deny(option_map_unwrap_or)] implied by #[deny(clippy_pedantic)]
|
||||
|
||||
error: called `map(f).unwrap_or_else(g)` on an Option value. This can be done more directly by calling `map_or_else(g, f)` instead
|
||||
--> $DIR/methods.rs:116:13
|
||||
--> $DIR/methods.rs:114:13
|
||||
|
|
||||
116 | let _ = opt.map(|x| x + 1)
|
||||
114 | let _ = opt.map(|x| x + 1)
|
||||
| _____________^
|
||||
117 | |
|
||||
118 | | .unwrap_or_else(|| 0); // should lint even though this call is on a separate line
|
||||
115 | |
|
||||
116 | | .unwrap_or_else(|| 0); // should lint even though this call is on a separate line
|
||||
| |____________________________________^
|
||||
|
|
||||
= note: #[deny(option_map_unwrap_or_else)] implied by #[deny(clippy_pedantic)]
|
||||
|
@ -120,33 +120,33 @@ note: lint level defined here
|
|||
= note: replace `map(|x| x + 1).unwrap_or_else(|| 0)` with `map_or_else(|| 0, |x| x + 1)`
|
||||
|
||||
error: called `map(f).unwrap_or_else(g)` on an Option value. This can be done more directly by calling `map_or_else(g, f)` instead
|
||||
--> $DIR/methods.rs:120:13
|
||||
--> $DIR/methods.rs:118:13
|
||||
|
|
||||
120 | let _ = opt.map(|x| {
|
||||
118 | let _ = opt.map(|x| {
|
||||
| _____________^
|
||||
121 | | x + 1
|
||||
122 | | }
|
||||
123 | | ).unwrap_or_else(|| 0);
|
||||
119 | | x + 1
|
||||
120 | | }
|
||||
121 | | ).unwrap_or_else(|| 0);
|
||||
| |____________________________________^
|
||||
|
|
||||
= note: #[deny(option_map_unwrap_or_else)] implied by #[deny(clippy_pedantic)]
|
||||
|
||||
error: called `map(f).unwrap_or_else(g)` on an Option value. This can be done more directly by calling `map_or_else(g, f)` instead
|
||||
--> $DIR/methods.rs:124:13
|
||||
--> $DIR/methods.rs:122:13
|
||||
|
|
||||
124 | let _ = opt.map(|x| x + 1)
|
||||
122 | let _ = opt.map(|x| x + 1)
|
||||
| _____________^
|
||||
125 | | .unwrap_or_else(||
|
||||
126 | | 0
|
||||
127 | | );
|
||||
123 | | .unwrap_or_else(||
|
||||
124 | | 0
|
||||
125 | | );
|
||||
| |_________________^
|
||||
|
|
||||
= note: #[deny(option_map_unwrap_or_else)] implied by #[deny(clippy_pedantic)]
|
||||
|
||||
error: called `filter(p).next()` on an `Iterator`. This is more succinctly expressed by calling `.find(p)` instead.
|
||||
--> $DIR/methods.rs:196:13
|
||||
--> $DIR/methods.rs:194:13
|
||||
|
|
||||
196 | let _ = v.iter().filter(|&x| *x < 0).next();
|
||||
194 | let _ = v.iter().filter(|&x| *x < 0).next();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: #[deny(filter_next)] implied by #[deny(clippy)]
|
||||
|
@ -158,21 +158,21 @@ note: lint level defined here
|
|||
= note: replace `filter(|&x| *x < 0).next()` with `find(|&x| *x < 0)`
|
||||
|
||||
error: called `filter(p).next()` on an `Iterator`. This is more succinctly expressed by calling `.find(p)` instead.
|
||||
--> $DIR/methods.rs:201:13
|
||||
--> $DIR/methods.rs:197:13
|
||||
|
|
||||
201 | let _ = v.iter().filter(|&x| {
|
||||
197 | let _ = v.iter().filter(|&x| {
|
||||
| _____________^
|
||||
202 | | *x < 0
|
||||
203 | | }
|
||||
204 | | ).next();
|
||||
198 | | *x < 0
|
||||
199 | | }
|
||||
200 | | ).next();
|
||||
| |___________________________^
|
||||
|
|
||||
= note: #[deny(filter_next)] implied by #[deny(clippy)]
|
||||
|
||||
error: called `is_some()` after searching an `Iterator` with find. This is more succinctly expressed by calling `any()`.
|
||||
--> $DIR/methods.rs:216:13
|
||||
--> $DIR/methods.rs:212:13
|
||||
|
|
||||
216 | let _ = v.iter().find(|&x| *x < 0).is_some();
|
||||
212 | let _ = v.iter().find(|&x| *x < 0).is_some();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: #[deny(search_is_some)] implied by #[deny(clippy)]
|
||||
|
@ -184,63 +184,63 @@ note: lint level defined here
|
|||
= note: replace `find(|&x| *x < 0).is_some()` with `any(|&x| *x < 0)`
|
||||
|
||||
error: called `is_some()` after searching an `Iterator` with find. This is more succinctly expressed by calling `any()`.
|
||||
--> $DIR/methods.rs:221:13
|
||||
--> $DIR/methods.rs:215:13
|
||||
|
|
||||
221 | let _ = v.iter().find(|&x| {
|
||||
215 | let _ = v.iter().find(|&x| {
|
||||
| _____________^
|
||||
222 | | *x < 0
|
||||
223 | | }
|
||||
224 | | ).is_some();
|
||||
216 | | *x < 0
|
||||
217 | | }
|
||||
218 | | ).is_some();
|
||||
| |______________________________^
|
||||
|
|
||||
= note: #[deny(search_is_some)] implied by #[deny(clippy)]
|
||||
|
||||
error: called `is_some()` after searching an `Iterator` with position. This is more succinctly expressed by calling `any()`.
|
||||
--> $DIR/methods.rs:227:13
|
||||
--> $DIR/methods.rs:221:13
|
||||
|
|
||||
227 | let _ = v.iter().position(|&x| x < 0).is_some();
|
||||
221 | let _ = v.iter().position(|&x| x < 0).is_some();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: #[deny(search_is_some)] implied by #[deny(clippy)]
|
||||
= note: replace `position(|&x| x < 0).is_some()` with `any(|&x| x < 0)`
|
||||
|
||||
error: called `is_some()` after searching an `Iterator` with position. This is more succinctly expressed by calling `any()`.
|
||||
--> $DIR/methods.rs:232:13
|
||||
--> $DIR/methods.rs:224:13
|
||||
|
|
||||
232 | let _ = v.iter().position(|&x| {
|
||||
224 | let _ = v.iter().position(|&x| {
|
||||
| _____________^
|
||||
233 | | x < 0
|
||||
234 | | }
|
||||
235 | | ).is_some();
|
||||
225 | | x < 0
|
||||
226 | | }
|
||||
227 | | ).is_some();
|
||||
| |______________________________^
|
||||
|
|
||||
= note: #[deny(search_is_some)] implied by #[deny(clippy)]
|
||||
|
||||
error: called `is_some()` after searching an `Iterator` with rposition. This is more succinctly expressed by calling `any()`.
|
||||
--> $DIR/methods.rs:238:13
|
||||
--> $DIR/methods.rs:230:13
|
||||
|
|
||||
238 | let _ = v.iter().rposition(|&x| x < 0).is_some();
|
||||
230 | let _ = v.iter().rposition(|&x| x < 0).is_some();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: #[deny(search_is_some)] implied by #[deny(clippy)]
|
||||
= note: replace `rposition(|&x| x < 0).is_some()` with `any(|&x| x < 0)`
|
||||
|
||||
error: called `is_some()` after searching an `Iterator` with rposition. This is more succinctly expressed by calling `any()`.
|
||||
--> $DIR/methods.rs:243:13
|
||||
--> $DIR/methods.rs:233:13
|
||||
|
|
||||
243 | let _ = v.iter().rposition(|&x| {
|
||||
233 | let _ = v.iter().rposition(|&x| {
|
||||
| _____________^
|
||||
244 | | x < 0
|
||||
245 | | }
|
||||
246 | | ).is_some();
|
||||
234 | | x < 0
|
||||
235 | | }
|
||||
236 | | ).is_some();
|
||||
| |______________________________^
|
||||
|
|
||||
= note: #[deny(search_is_some)] implied by #[deny(clippy)]
|
||||
|
||||
error: use of `unwrap_or` followed by a function call
|
||||
--> $DIR/methods.rs:278:5
|
||||
--> $DIR/methods.rs:268:5
|
||||
|
|
||||
278 | with_constructor.unwrap_or(make());
|
||||
268 | with_constructor.unwrap_or(make());
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this `with_constructor.unwrap_or_else(make)`
|
||||
|
|
||||
= note: #[deny(or_fun_call)] implied by #[deny(clippy)]
|
||||
|
@ -251,97 +251,97 @@ note: lint level defined here
|
|||
| ^^^^^^
|
||||
|
||||
error: use of `unwrap_or` followed by a call to `new`
|
||||
--> $DIR/methods.rs:284:5
|
||||
--> $DIR/methods.rs:271:5
|
||||
|
|
||||
284 | with_new.unwrap_or(Vec::new());
|
||||
271 | with_new.unwrap_or(Vec::new());
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this `with_new.unwrap_or_default()`
|
||||
|
|
||||
= note: #[deny(or_fun_call)] implied by #[deny(clippy)]
|
||||
|
||||
error: use of `unwrap_or` followed by a function call
|
||||
--> $DIR/methods.rs:290:5
|
||||
--> $DIR/methods.rs:274:5
|
||||
|
|
||||
290 | with_const_args.unwrap_or(Vec::with_capacity(12));
|
||||
274 | with_const_args.unwrap_or(Vec::with_capacity(12));
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this `with_const_args.unwrap_or_else(|| Vec::with_capacity(12))`
|
||||
|
|
||||
= note: #[deny(or_fun_call)] implied by #[deny(clippy)]
|
||||
|
||||
error: use of `unwrap_or` followed by a function call
|
||||
--> $DIR/methods.rs:296:5
|
||||
--> $DIR/methods.rs:277:5
|
||||
|
|
||||
296 | with_err.unwrap_or(make());
|
||||
277 | with_err.unwrap_or(make());
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this `with_err.unwrap_or_else(|_| make())`
|
||||
|
|
||||
= note: #[deny(or_fun_call)] implied by #[deny(clippy)]
|
||||
|
||||
error: use of `unwrap_or` followed by a function call
|
||||
--> $DIR/methods.rs:302:5
|
||||
--> $DIR/methods.rs:280:5
|
||||
|
|
||||
302 | with_err_args.unwrap_or(Vec::with_capacity(12));
|
||||
280 | with_err_args.unwrap_or(Vec::with_capacity(12));
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this `with_err_args.unwrap_or_else(|_| Vec::with_capacity(12))`
|
||||
|
|
||||
= note: #[deny(or_fun_call)] implied by #[deny(clippy)]
|
||||
|
||||
error: use of `unwrap_or` followed by a call to `default`
|
||||
--> $DIR/methods.rs:308:5
|
||||
--> $DIR/methods.rs:283:5
|
||||
|
|
||||
308 | with_default_trait.unwrap_or(Default::default());
|
||||
283 | with_default_trait.unwrap_or(Default::default());
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this `with_default_trait.unwrap_or_default()`
|
||||
|
|
||||
= note: #[deny(or_fun_call)] implied by #[deny(clippy)]
|
||||
|
||||
error: use of `unwrap_or` followed by a call to `default`
|
||||
--> $DIR/methods.rs:314:5
|
||||
--> $DIR/methods.rs:286:5
|
||||
|
|
||||
314 | with_default_type.unwrap_or(u64::default());
|
||||
286 | with_default_type.unwrap_or(u64::default());
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this `with_default_type.unwrap_or_default()`
|
||||
|
|
||||
= note: #[deny(or_fun_call)] implied by #[deny(clippy)]
|
||||
|
||||
error: use of `unwrap_or` followed by a function call
|
||||
--> $DIR/methods.rs:320:5
|
||||
--> $DIR/methods.rs:289:5
|
||||
|
|
||||
320 | with_vec.unwrap_or(vec![]);
|
||||
289 | with_vec.unwrap_or(vec![]);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this `with_vec.unwrap_or_else(|| < [ _ ] > :: into_vec ( box [ $ ( $ x ) , * ] ))`
|
||||
|
|
||||
= note: #[deny(or_fun_call)] implied by #[deny(clippy)]
|
||||
|
||||
error: use of `unwrap_or` followed by a function call
|
||||
--> $DIR/methods.rs:326:5
|
||||
--> $DIR/methods.rs:294:5
|
||||
|
|
||||
326 | without_default.unwrap_or(Foo::new());
|
||||
294 | without_default.unwrap_or(Foo::new());
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this `without_default.unwrap_or_else(Foo::new)`
|
||||
|
|
||||
= note: #[deny(or_fun_call)] implied by #[deny(clippy)]
|
||||
|
||||
error: use of `or_insert` followed by a function call
|
||||
--> $DIR/methods.rs:332:5
|
||||
--> $DIR/methods.rs:297:5
|
||||
|
|
||||
332 | map.entry(42).or_insert(String::new());
|
||||
297 | map.entry(42).or_insert(String::new());
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this `map.entry(42).or_insert_with(String::new)`
|
||||
|
|
||||
= note: #[deny(or_fun_call)] implied by #[deny(clippy)]
|
||||
|
||||
error: use of `or_insert` followed by a function call
|
||||
--> $DIR/methods.rs:338:5
|
||||
--> $DIR/methods.rs:300:5
|
||||
|
|
||||
338 | btree.entry(42).or_insert(String::new());
|
||||
300 | btree.entry(42).or_insert(String::new());
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this `btree.entry(42).or_insert_with(String::new)`
|
||||
|
|
||||
= note: #[deny(or_fun_call)] implied by #[deny(clippy)]
|
||||
|
||||
error: use of `unwrap_or` followed by a function call
|
||||
--> $DIR/methods.rs:344:13
|
||||
--> $DIR/methods.rs:303:13
|
||||
|
|
||||
344 | let _ = stringy.unwrap_or("".to_owned());
|
||||
303 | let _ = stringy.unwrap_or("".to_owned());
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this `stringy.unwrap_or_else(|| "".to_owned())`
|
||||
|
|
||||
= note: #[deny(or_fun_call)] implied by #[deny(clippy)]
|
||||
|
||||
error: called `.iter().nth()` on a Vec. Calling `.get()` is both faster and more readable
|
||||
--> $DIR/methods.rs:358:23
|
||||
--> $DIR/methods.rs:314:23
|
||||
|
|
||||
358 | let bad_vec = some_vec.iter().nth(3);
|
||||
314 | let bad_vec = some_vec.iter().nth(3);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: #[deny(iter_nth)] implied by #[deny(clippy)]
|
||||
|
@ -352,57 +352,57 @@ note: lint level defined here
|
|||
| ^^^^^^
|
||||
|
||||
error: called `.iter().nth()` on a slice. Calling `.get()` is both faster and more readable
|
||||
--> $DIR/methods.rs:360:26
|
||||
--> $DIR/methods.rs:315:26
|
||||
|
|
||||
360 | let bad_slice = &some_vec[..].iter().nth(3);
|
||||
315 | let bad_slice = &some_vec[..].iter().nth(3);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: #[deny(iter_nth)] implied by #[deny(clippy)]
|
||||
|
||||
error: called `.iter().nth()` on a slice. Calling `.get()` is both faster and more readable
|
||||
--> $DIR/methods.rs:362:31
|
||||
--> $DIR/methods.rs:316:31
|
||||
|
|
||||
362 | let bad_boxed_slice = boxed_slice.iter().nth(3);
|
||||
316 | let bad_boxed_slice = boxed_slice.iter().nth(3);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: #[deny(iter_nth)] implied by #[deny(clippy)]
|
||||
|
||||
error: called `.iter().nth()` on a VecDeque. Calling `.get()` is both faster and more readable
|
||||
--> $DIR/methods.rs:364:29
|
||||
--> $DIR/methods.rs:317:29
|
||||
|
|
||||
364 | let bad_vec_deque = some_vec_deque.iter().nth(3);
|
||||
317 | let bad_vec_deque = some_vec_deque.iter().nth(3);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: #[deny(iter_nth)] implied by #[deny(clippy)]
|
||||
|
||||
error: called `.iter_mut().nth()` on a Vec. Calling `.get_mut()` is both faster and more readable
|
||||
--> $DIR/methods.rs:370:23
|
||||
--> $DIR/methods.rs:322:23
|
||||
|
|
||||
370 | let bad_vec = some_vec.iter_mut().nth(3);
|
||||
322 | let bad_vec = some_vec.iter_mut().nth(3);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: #[deny(iter_nth)] implied by #[deny(clippy)]
|
||||
|
||||
error: called `.iter_mut().nth()` on a slice. Calling `.get_mut()` is both faster and more readable
|
||||
--> $DIR/methods.rs:374:26
|
||||
--> $DIR/methods.rs:325:26
|
||||
|
|
||||
374 | let bad_slice = &some_vec[..].iter_mut().nth(3);
|
||||
325 | let bad_slice = &some_vec[..].iter_mut().nth(3);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: #[deny(iter_nth)] implied by #[deny(clippy)]
|
||||
|
||||
error: called `.iter_mut().nth()` on a VecDeque. Calling `.get_mut()` is both faster and more readable
|
||||
--> $DIR/methods.rs:378:29
|
||||
--> $DIR/methods.rs:328:29
|
||||
|
|
||||
378 | let bad_vec_deque = some_vec_deque.iter_mut().nth(3);
|
||||
328 | let bad_vec_deque = some_vec_deque.iter_mut().nth(3);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: #[deny(iter_nth)] implied by #[deny(clippy)]
|
||||
|
||||
error: called `skip(x).next()` on an iterator. This is more succinctly expressed by calling `nth(x)`
|
||||
--> $DIR/methods.rs:392:13
|
||||
--> $DIR/methods.rs:340:13
|
||||
|
|
||||
392 | let _ = some_vec.iter().skip(42).next();
|
||||
340 | let _ = some_vec.iter().skip(42).next();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: #[deny(iter_skip_next)] implied by #[deny(clippy)]
|
||||
|
@ -413,33 +413,33 @@ note: lint level defined here
|
|||
| ^^^^^^
|
||||
|
||||
error: called `skip(x).next()` on an iterator. This is more succinctly expressed by calling `nth(x)`
|
||||
--> $DIR/methods.rs:395:13
|
||||
--> $DIR/methods.rs:341:13
|
||||
|
|
||||
395 | let _ = some_vec.iter().cycle().skip(42).next();
|
||||
341 | let _ = some_vec.iter().cycle().skip(42).next();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: #[deny(iter_skip_next)] implied by #[deny(clippy)]
|
||||
|
||||
error: called `skip(x).next()` on an iterator. This is more succinctly expressed by calling `nth(x)`
|
||||
--> $DIR/methods.rs:398:13
|
||||
--> $DIR/methods.rs:342:13
|
||||
|
|
||||
398 | let _ = (1..10).skip(10).next();
|
||||
342 | let _ = (1..10).skip(10).next();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: #[deny(iter_skip_next)] implied by #[deny(clippy)]
|
||||
|
||||
error: called `skip(x).next()` on an iterator. This is more succinctly expressed by calling `nth(x)`
|
||||
--> $DIR/methods.rs:401:14
|
||||
--> $DIR/methods.rs:343:14
|
||||
|
|
||||
401 | let _ = &some_vec[..].iter().skip(3).next();
|
||||
343 | let _ = &some_vec[..].iter().skip(3).next();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: #[deny(iter_skip_next)] implied by #[deny(clippy)]
|
||||
|
||||
error: called `.get().unwrap()` on a slice. Using `[]` is more clear and more concise
|
||||
--> $DIR/methods.rs:429:17
|
||||
--> $DIR/methods.rs:369:17
|
||||
|
|
||||
429 | let _ = boxed_slice.get(1).unwrap();
|
||||
369 | let _ = boxed_slice.get(1).unwrap();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this `&boxed_slice[1]`
|
||||
|
|
||||
= note: #[deny(get_unwrap)] implied by #[deny(clippy)]
|
||||
|
@ -450,81 +450,81 @@ note: lint level defined here
|
|||
| ^^^^^^
|
||||
|
||||
error: called `.get().unwrap()` on a slice. Using `[]` is more clear and more concise
|
||||
--> $DIR/methods.rs:433:17
|
||||
--> $DIR/methods.rs:370:17
|
||||
|
|
||||
433 | let _ = some_slice.get(0).unwrap();
|
||||
370 | let _ = some_slice.get(0).unwrap();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this `&some_slice[0]`
|
||||
|
|
||||
= note: #[deny(get_unwrap)] implied by #[deny(clippy)]
|
||||
|
||||
error: called `.get().unwrap()` on a Vec. Using `[]` is more clear and more concise
|
||||
--> $DIR/methods.rs:437:17
|
||||
--> $DIR/methods.rs:371:17
|
||||
|
|
||||
437 | let _ = some_vec.get(0).unwrap();
|
||||
371 | let _ = some_vec.get(0).unwrap();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^ help: try this `&some_vec[0]`
|
||||
|
|
||||
= note: #[deny(get_unwrap)] implied by #[deny(clippy)]
|
||||
|
||||
error: called `.get().unwrap()` on a VecDeque. Using `[]` is more clear and more concise
|
||||
--> $DIR/methods.rs:441:17
|
||||
--> $DIR/methods.rs:372:17
|
||||
|
|
||||
441 | let _ = some_vecdeque.get(0).unwrap();
|
||||
372 | let _ = some_vecdeque.get(0).unwrap();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this `&some_vecdeque[0]`
|
||||
|
|
||||
= note: #[deny(get_unwrap)] implied by #[deny(clippy)]
|
||||
|
||||
error: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise
|
||||
--> $DIR/methods.rs:445:17
|
||||
--> $DIR/methods.rs:373:17
|
||||
|
|
||||
445 | let _ = some_hashmap.get(&1).unwrap();
|
||||
373 | let _ = some_hashmap.get(&1).unwrap();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this `&some_hashmap[&1]`
|
||||
|
|
||||
= note: #[deny(get_unwrap)] implied by #[deny(clippy)]
|
||||
|
||||
error: called `.get().unwrap()` on a BTreeMap. Using `[]` is more clear and more concise
|
||||
--> $DIR/methods.rs:449:17
|
||||
--> $DIR/methods.rs:374:17
|
||||
|
|
||||
449 | let _ = some_btreemap.get(&1).unwrap();
|
||||
374 | let _ = some_btreemap.get(&1).unwrap();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this `&some_btreemap[&1]`
|
||||
|
|
||||
= note: #[deny(get_unwrap)] implied by #[deny(clippy)]
|
||||
|
||||
error: called `.get_mut().unwrap()` on a slice. Using `[]` is more clear and more concise
|
||||
--> $DIR/methods.rs:458:10
|
||||
--> $DIR/methods.rs:379:10
|
||||
|
|
||||
458 | *boxed_slice.get_mut(0).unwrap() = 1;
|
||||
379 | *boxed_slice.get_mut(0).unwrap() = 1;
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this `&mut boxed_slice[0]`
|
||||
|
|
||||
= note: #[deny(get_unwrap)] implied by #[deny(clippy)]
|
||||
|
||||
error: called `.get_mut().unwrap()` on a slice. Using `[]` is more clear and more concise
|
||||
--> $DIR/methods.rs:462:10
|
||||
--> $DIR/methods.rs:380:10
|
||||
|
|
||||
462 | *some_slice.get_mut(0).unwrap() = 1;
|
||||
380 | *some_slice.get_mut(0).unwrap() = 1;
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this `&mut some_slice[0]`
|
||||
|
|
||||
= note: #[deny(get_unwrap)] implied by #[deny(clippy)]
|
||||
|
||||
error: called `.get_mut().unwrap()` on a Vec. Using `[]` is more clear and more concise
|
||||
--> $DIR/methods.rs:466:10
|
||||
--> $DIR/methods.rs:381:10
|
||||
|
|
||||
466 | *some_vec.get_mut(0).unwrap() = 1;
|
||||
381 | *some_vec.get_mut(0).unwrap() = 1;
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this `&mut some_vec[0]`
|
||||
|
|
||||
= note: #[deny(get_unwrap)] implied by #[deny(clippy)]
|
||||
|
||||
error: called `.get_mut().unwrap()` on a VecDeque. Using `[]` is more clear and more concise
|
||||
--> $DIR/methods.rs:470:10
|
||||
--> $DIR/methods.rs:382:10
|
||||
|
|
||||
470 | *some_vecdeque.get_mut(0).unwrap() = 1;
|
||||
382 | *some_vecdeque.get_mut(0).unwrap() = 1;
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this `&mut some_vecdeque[0]`
|
||||
|
|
||||
= note: #[deny(get_unwrap)] implied by #[deny(clippy)]
|
||||
|
||||
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:488:13
|
||||
--> $DIR/methods.rs:396:13
|
||||
|
|
||||
488 | let _ = opt.unwrap();
|
||||
396 | let _ = opt.unwrap();
|
||||
| ^^^^^^^^^^^^
|
||||
|
|
||||
= note: #[deny(option_unwrap_used)] implied by #[deny(clippy_pedantic)]
|
||||
|
@ -535,9 +535,9 @@ note: lint level defined here
|
|||
| ^^^^^^^^^^^^^^^
|
||||
|
||||
error: used unwrap() on a Result value. If you don't want to handle the Err case gracefully, consider using expect() to provide a better panic message
|
||||
--> $DIR/methods.rs:491:13
|
||||
--> $DIR/methods.rs:399:13
|
||||
|
|
||||
491 | let _ = res.unwrap();
|
||||
399 | let _ = res.unwrap();
|
||||
| ^^^^^^^^^^^^
|
||||
|
|
||||
= note: #[deny(result_unwrap_used)] implied by #[deny(clippy_pedantic)]
|
||||
|
@ -548,9 +548,9 @@ note: lint level defined here
|
|||
| ^^^^^^^^^^^^^^^
|
||||
|
||||
error: called `ok().expect()` on a Result value. You can call `expect` directly on the `Result`
|
||||
--> $DIR/methods.rs:493:5
|
||||
--> $DIR/methods.rs:401:5
|
||||
|
|
||||
493 | res.ok().expect("disaster!");
|
||||
401 | res.ok().expect("disaster!");
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: #[deny(ok_expect)] implied by #[deny(clippy)]
|
||||
|
@ -561,41 +561,41 @@ note: lint level defined here
|
|||
| ^^^^^^
|
||||
|
||||
error: called `ok().expect()` on a Result value. You can call `expect` directly on the `Result`
|
||||
--> $DIR/methods.rs:499:5
|
||||
--> $DIR/methods.rs:407:5
|
||||
|
|
||||
499 | res3.ok().expect("whoof");
|
||||
407 | res3.ok().expect("whoof");
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: #[deny(ok_expect)] implied by #[deny(clippy)]
|
||||
|
||||
error: called `ok().expect()` on a Result value. You can call `expect` directly on the `Result`
|
||||
--> $DIR/methods.rs:501:5
|
||||
--> $DIR/methods.rs:409:5
|
||||
|
|
||||
501 | res4.ok().expect("argh");
|
||||
409 | res4.ok().expect("argh");
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: #[deny(ok_expect)] implied by #[deny(clippy)]
|
||||
|
||||
error: called `ok().expect()` on a Result value. You can call `expect` directly on the `Result`
|
||||
--> $DIR/methods.rs:503:5
|
||||
--> $DIR/methods.rs:411:5
|
||||
|
|
||||
503 | res5.ok().expect("oops");
|
||||
411 | res5.ok().expect("oops");
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: #[deny(ok_expect)] implied by #[deny(clippy)]
|
||||
|
||||
error: called `ok().expect()` on a Result value. You can call `expect` directly on the `Result`
|
||||
--> $DIR/methods.rs:505:5
|
||||
--> $DIR/methods.rs:413:5
|
||||
|
|
||||
505 | res6.ok().expect("meh");
|
||||
413 | res6.ok().expect("meh");
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: #[deny(ok_expect)] implied by #[deny(clippy)]
|
||||
|
||||
error: you should use the `starts_with` method
|
||||
--> $DIR/methods.rs:517:5
|
||||
--> $DIR/methods.rs:425:5
|
||||
|
|
||||
517 | "".chars().next() == Some(' ');
|
||||
425 | "".chars().next() == Some(' ');
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: like this `"".starts_with(' ')`
|
||||
|
|
||||
= note: #[deny(chars_next_cmp)] implied by #[deny(clippy)]
|
||||
|
@ -606,17 +606,17 @@ note: lint level defined here
|
|||
| ^^^^^^
|
||||
|
||||
error: you should use the `starts_with` method
|
||||
--> $DIR/methods.rs:522:5
|
||||
--> $DIR/methods.rs:426:5
|
||||
|
|
||||
522 | Some(' ') != "".chars().next();
|
||||
426 | Some(' ') != "".chars().next();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: like this `!"".starts_with(' ')`
|
||||
|
|
||||
= note: #[deny(chars_next_cmp)] implied by #[deny(clippy)]
|
||||
|
||||
error: calling `.extend(_.chars())`
|
||||
--> $DIR/methods.rs:534:5
|
||||
--> $DIR/methods.rs:435:5
|
||||
|
|
||||
534 | s.extend(abc.chars());
|
||||
435 | s.extend(abc.chars());
|
||||
| ^^^^^^^^^^^^^^^^^^^^^ help: try this `s.push_str(abc)`
|
||||
|
|
||||
= note: #[deny(string_extend_chars)] implied by #[deny(clippy)]
|
||||
|
@ -627,25 +627,25 @@ note: lint level defined here
|
|||
| ^^^^^^
|
||||
|
||||
error: calling `.extend(_.chars())`
|
||||
--> $DIR/methods.rs:540:5
|
||||
--> $DIR/methods.rs:438:5
|
||||
|
|
||||
540 | s.extend("abc".chars());
|
||||
438 | s.extend("abc".chars());
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^ help: try this `s.push_str("abc")`
|
||||
|
|
||||
= note: #[deny(string_extend_chars)] implied by #[deny(clippy)]
|
||||
|
||||
error: calling `.extend(_.chars())`
|
||||
--> $DIR/methods.rs:546:5
|
||||
--> $DIR/methods.rs:441:5
|
||||
|
|
||||
546 | s.extend(def.chars());
|
||||
441 | s.extend(def.chars());
|
||||
| ^^^^^^^^^^^^^^^^^^^^^ help: try this `s.push_str(&def)`
|
||||
|
|
||||
= note: #[deny(string_extend_chars)] implied by #[deny(clippy)]
|
||||
|
||||
error: using `clone` on a `Copy` type
|
||||
--> $DIR/methods.rs:560:5
|
||||
--> $DIR/methods.rs:452:5
|
||||
|
|
||||
560 | 42.clone();
|
||||
452 | 42.clone();
|
||||
| ^^^^^^^^^^ help: try removing the `clone` call `42`
|
||||
|
|
||||
= note: #[deny(clone_on_copy)] implied by #[deny(clippy)]
|
||||
|
@ -656,33 +656,33 @@ note: lint level defined here
|
|||
| ^^^^^^
|
||||
|
||||
error: using `clone` on a `Copy` type
|
||||
--> $DIR/methods.rs:565:5
|
||||
--> $DIR/methods.rs:456:5
|
||||
|
|
||||
565 | (&42).clone();
|
||||
456 | (&42).clone();
|
||||
| ^^^^^^^^^^^^^ help: try dereferencing it `*(&42)`
|
||||
|
|
||||
= note: #[deny(clone_on_copy)] implied by #[deny(clippy)]
|
||||
|
||||
error: using `clone` on a `Copy` type
|
||||
--> $DIR/methods.rs:571:5
|
||||
--> $DIR/methods.rs:460:5
|
||||
|
|
||||
571 | t.clone();
|
||||
460 | t.clone();
|
||||
| ^^^^^^^^^ help: try removing the `clone` call `t`
|
||||
|
|
||||
= note: #[deny(clone_on_copy)] implied by #[deny(clippy)]
|
||||
|
||||
error: using `clone` on a `Copy` type
|
||||
--> $DIR/methods.rs:574:5
|
||||
--> $DIR/methods.rs:462:5
|
||||
|
|
||||
574 | Some(t).clone();
|
||||
462 | Some(t).clone();
|
||||
| ^^^^^^^^^^^^^^^ help: try removing the `clone` call `Some(t)`
|
||||
|
|
||||
= note: #[deny(clone_on_copy)] implied by #[deny(clippy)]
|
||||
|
||||
error: using `clone` on a double-reference; this will copy the reference instead of cloning the inner type
|
||||
--> $DIR/methods.rs:582:22
|
||||
--> $DIR/methods.rs:468:22
|
||||
|
|
||||
582 | let z: &Vec<_> = y.clone();
|
||||
468 | let z: &Vec<_> = y.clone();
|
||||
| ^^^^^^^^^ help: try dereferencing it `(*y).clone()`
|
||||
|
|
||||
= note: #[deny(clone_double_ref)] implied by #[deny(clippy)]
|
||||
|
@ -693,9 +693,9 @@ note: lint level defined here
|
|||
| ^^^^^^
|
||||
|
||||
error: single-character string constant used as pattern
|
||||
--> $DIR/methods.rs:590:13
|
||||
--> $DIR/methods.rs:475:13
|
||||
|
|
||||
590 | x.split("x");
|
||||
475 | x.split("x");
|
||||
| --------^^^- help: try using a char instead: `x.split('x')`
|
||||
|
|
||||
= note: #[deny(single_char_pattern)] implied by #[deny(clippy)]
|
||||
|
@ -706,137 +706,137 @@ note: lint level defined here
|
|||
| ^^^^^^
|
||||
|
||||
error: single-character string constant used as pattern
|
||||
--> $DIR/methods.rs:614:16
|
||||
--> $DIR/methods.rs:492:16
|
||||
|
|
||||
614 | x.contains("x");
|
||||
492 | x.contains("x");
|
||||
| -----------^^^- help: try using a char instead: `x.contains('x')`
|
||||
|
|
||||
= note: #[deny(single_char_pattern)] implied by #[deny(clippy)]
|
||||
|
||||
error: single-character string constant used as pattern
|
||||
--> $DIR/methods.rs:618:19
|
||||
--> $DIR/methods.rs:493:19
|
||||
|
|
||||
618 | x.starts_with("x");
|
||||
493 | x.starts_with("x");
|
||||
| --------------^^^- help: try using a char instead: `x.starts_with('x')`
|
||||
|
|
||||
= note: #[deny(single_char_pattern)] implied by #[deny(clippy)]
|
||||
|
||||
error: single-character string constant used as pattern
|
||||
--> $DIR/methods.rs:622:17
|
||||
--> $DIR/methods.rs:494:17
|
||||
|
|
||||
622 | x.ends_with("x");
|
||||
494 | x.ends_with("x");
|
||||
| ------------^^^- help: try using a char instead: `x.ends_with('x')`
|
||||
|
|
||||
= note: #[deny(single_char_pattern)] implied by #[deny(clippy)]
|
||||
|
||||
error: single-character string constant used as pattern
|
||||
--> $DIR/methods.rs:626:12
|
||||
--> $DIR/methods.rs:495:12
|
||||
|
|
||||
626 | x.find("x");
|
||||
495 | x.find("x");
|
||||
| -------^^^- help: try using a char instead: `x.find('x')`
|
||||
|
|
||||
= note: #[deny(single_char_pattern)] implied by #[deny(clippy)]
|
||||
|
||||
error: single-character string constant used as pattern
|
||||
--> $DIR/methods.rs:630:13
|
||||
--> $DIR/methods.rs:496:13
|
||||
|
|
||||
630 | x.rfind("x");
|
||||
496 | x.rfind("x");
|
||||
| --------^^^- help: try using a char instead: `x.rfind('x')`
|
||||
|
|
||||
= note: #[deny(single_char_pattern)] implied by #[deny(clippy)]
|
||||
|
||||
error: single-character string constant used as pattern
|
||||
--> $DIR/methods.rs:634:14
|
||||
--> $DIR/methods.rs:497:14
|
||||
|
|
||||
634 | x.rsplit("x");
|
||||
497 | x.rsplit("x");
|
||||
| ---------^^^- help: try using a char instead: `x.rsplit('x')`
|
||||
|
|
||||
= note: #[deny(single_char_pattern)] implied by #[deny(clippy)]
|
||||
|
||||
error: single-character string constant used as pattern
|
||||
--> $DIR/methods.rs:638:24
|
||||
--> $DIR/methods.rs:498:24
|
||||
|
|
||||
638 | x.split_terminator("x");
|
||||
498 | x.split_terminator("x");
|
||||
| -------------------^^^- help: try using a char instead: `x.split_terminator('x')`
|
||||
|
|
||||
= note: #[deny(single_char_pattern)] implied by #[deny(clippy)]
|
||||
|
||||
error: single-character string constant used as pattern
|
||||
--> $DIR/methods.rs:642:25
|
||||
--> $DIR/methods.rs:499:25
|
||||
|
|
||||
642 | x.rsplit_terminator("x");
|
||||
499 | x.rsplit_terminator("x");
|
||||
| --------------------^^^- help: try using a char instead: `x.rsplit_terminator('x')`
|
||||
|
|
||||
= note: #[deny(single_char_pattern)] implied by #[deny(clippy)]
|
||||
|
||||
error: single-character string constant used as pattern
|
||||
--> $DIR/methods.rs:646:17
|
||||
--> $DIR/methods.rs:500:17
|
||||
|
|
||||
646 | x.splitn(0, "x");
|
||||
500 | x.splitn(0, "x");
|
||||
| ------------^^^- help: try using a char instead: `x.splitn(0, 'x')`
|
||||
|
|
||||
= note: #[deny(single_char_pattern)] implied by #[deny(clippy)]
|
||||
|
||||
error: single-character string constant used as pattern
|
||||
--> $DIR/methods.rs:650:18
|
||||
--> $DIR/methods.rs:501:18
|
||||
|
|
||||
650 | x.rsplitn(0, "x");
|
||||
501 | x.rsplitn(0, "x");
|
||||
| -------------^^^- help: try using a char instead: `x.rsplitn(0, 'x')`
|
||||
|
|
||||
= note: #[deny(single_char_pattern)] implied by #[deny(clippy)]
|
||||
|
||||
error: single-character string constant used as pattern
|
||||
--> $DIR/methods.rs:654:15
|
||||
--> $DIR/methods.rs:502:15
|
||||
|
|
||||
654 | x.matches("x");
|
||||
502 | x.matches("x");
|
||||
| ----------^^^- help: try using a char instead: `x.matches('x')`
|
||||
|
|
||||
= note: #[deny(single_char_pattern)] implied by #[deny(clippy)]
|
||||
|
||||
error: single-character string constant used as pattern
|
||||
--> $DIR/methods.rs:658:16
|
||||
--> $DIR/methods.rs:503:16
|
||||
|
|
||||
658 | x.rmatches("x");
|
||||
503 | x.rmatches("x");
|
||||
| -----------^^^- help: try using a char instead: `x.rmatches('x')`
|
||||
|
|
||||
= note: #[deny(single_char_pattern)] implied by #[deny(clippy)]
|
||||
|
||||
error: single-character string constant used as pattern
|
||||
--> $DIR/methods.rs:662:21
|
||||
--> $DIR/methods.rs:504:21
|
||||
|
|
||||
662 | x.match_indices("x");
|
||||
504 | x.match_indices("x");
|
||||
| ----------------^^^- help: try using a char instead: `x.match_indices('x')`
|
||||
|
|
||||
= note: #[deny(single_char_pattern)] implied by #[deny(clippy)]
|
||||
|
||||
error: single-character string constant used as pattern
|
||||
--> $DIR/methods.rs:666:22
|
||||
--> $DIR/methods.rs:505:22
|
||||
|
|
||||
666 | x.rmatch_indices("x");
|
||||
505 | x.rmatch_indices("x");
|
||||
| -----------------^^^- help: try using a char instead: `x.rmatch_indices('x')`
|
||||
|
|
||||
= note: #[deny(single_char_pattern)] implied by #[deny(clippy)]
|
||||
|
||||
error: single-character string constant used as pattern
|
||||
--> $DIR/methods.rs:670:25
|
||||
--> $DIR/methods.rs:506:25
|
||||
|
|
||||
670 | x.trim_left_matches("x");
|
||||
506 | x.trim_left_matches("x");
|
||||
| --------------------^^^- help: try using a char instead: `x.trim_left_matches('x')`
|
||||
|
|
||||
= note: #[deny(single_char_pattern)] implied by #[deny(clippy)]
|
||||
|
||||
error: single-character string constant used as pattern
|
||||
--> $DIR/methods.rs:674:26
|
||||
--> $DIR/methods.rs:507:26
|
||||
|
|
||||
674 | x.trim_right_matches("x");
|
||||
507 | x.trim_right_matches("x");
|
||||
| ---------------------^^^- help: try using a char instead: `x.trim_right_matches('x')`
|
||||
|
|
||||
= note: #[deny(single_char_pattern)] implied by #[deny(clippy)]
|
||||
|
||||
error: you are getting the inner pointer of a temporary `CString`
|
||||
--> $DIR/methods.rs:687:5
|
||||
--> $DIR/methods.rs:517:5
|
||||
|
|
||||
687 | CString::new("foo").unwrap().as_ptr();
|
||||
517 | CString::new("foo").unwrap().as_ptr();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: #[deny(temporary_cstring_as_ptr)] implied by #[deny(clippy)]
|
||||
|
@ -847,15 +847,15 @@ note: lint level defined here
|
|||
| ^^^^^^
|
||||
= note: that pointer will be invalid outside this expression
|
||||
help: assign the `CString` to a variable to extend its lifetime
|
||||
--> $DIR/methods.rs:687:5
|
||||
--> $DIR/methods.rs:517:5
|
||||
|
|
||||
687 | CString::new("foo").unwrap().as_ptr();
|
||||
517 | CString::new("foo").unwrap().as_ptr();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: called `cloned().collect()` on a slice to create a `Vec`. Calling `to_vec()` is both faster and more readable
|
||||
--> $DIR/methods.rs:695:27
|
||||
--> $DIR/methods.rs:522:27
|
||||
|
|
||||
695 | let v2 : Vec<isize> = v.iter().cloned().collect();
|
||||
522 | let v2 : Vec<isize> = v.iter().cloned().collect();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: #[deny(iter_cloned_collect)] implied by #[deny(clippy)]
|
||||
|
|
|
@ -17,7 +17,6 @@ fn less_fun(x : *mut *mut u32) {
|
|||
|
||||
macro_rules! mut_ptr {
|
||||
($p:expr) => { &mut $p }
|
||||
|
||||
}
|
||||
|
||||
#[allow(unused_mut, unused_variables)]
|
||||
|
@ -29,25 +28,15 @@ fn main() {
|
|||
|
||||
if fun(x) {
|
||||
let y : &mut &mut u32 = &mut &mut 2;
|
||||
|
||||
|
||||
|
||||
**y + **x;
|
||||
}
|
||||
|
||||
if fun(x) {
|
||||
let y : &mut &mut &mut u32 = &mut &mut &mut 2;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
***y + **x;
|
||||
}
|
||||
|
||||
let mut z = mut_ptr!(&mut 3u32);
|
||||
|
||||
}
|
||||
|
||||
fn issue939() {
|
||||
|
|
|
@ -11,9 +11,9 @@ note: lint level defined here
|
|||
| ^^^^^^^
|
||||
|
||||
error: generally you want to avoid `&mut &mut _` if possible
|
||||
--> $DIR/mut_mut.rs:25:17
|
||||
--> $DIR/mut_mut.rs:24:17
|
||||
|
|
||||
25 | let mut x = &mut &mut 1u32;
|
||||
24 | let mut x = &mut &mut 1u32;
|
||||
| ^^^^^^^^^^^^^^
|
||||
|
||||
error: generally you want to avoid `&mut &mut _` if possible
|
||||
|
@ -22,67 +22,67 @@ error: generally you want to avoid `&mut &mut _` if possible
|
|||
19 | ($p:expr) => { &mut $p }
|
||||
| ^^^^^^^
|
||||
...
|
||||
49 | let mut z = mut_ptr!(&mut 3u32);
|
||||
39 | let mut z = mut_ptr!(&mut 3u32);
|
||||
| ------------------- in this macro invocation
|
||||
|
||||
error: this expression mutably borrows a mutable reference. Consider reborrowing
|
||||
--> $DIR/mut_mut.rs:27:21
|
||||
--> $DIR/mut_mut.rs:26:21
|
||||
|
|
||||
27 | let mut y = &mut x;
|
||||
26 | let mut y = &mut x;
|
||||
| ^^^^^^
|
||||
|
||||
error: generally you want to avoid `&mut &mut _` if possible
|
||||
--> $DIR/mut_mut.rs:31:17
|
||||
--> $DIR/mut_mut.rs:30:17
|
||||
|
|
||||
31 | let y : &mut &mut u32 = &mut &mut 2;
|
||||
30 | let y : &mut &mut u32 = &mut &mut 2;
|
||||
| ^^^^^^^^^^^^^
|
||||
|
||||
error: generally you want to avoid `&mut &mut _` if possible
|
||||
--> $DIR/mut_mut.rs:31:33
|
||||
--> $DIR/mut_mut.rs:30:33
|
||||
|
|
||||
31 | let y : &mut &mut u32 = &mut &mut 2;
|
||||
30 | let y : &mut &mut u32 = &mut &mut 2;
|
||||
| ^^^^^^^^^^^
|
||||
|
||||
error: generally you want to avoid `&mut &mut _` if possible
|
||||
--> $DIR/mut_mut.rs:31:17
|
||||
--> $DIR/mut_mut.rs:30:17
|
||||
|
|
||||
31 | let y : &mut &mut u32 = &mut &mut 2;
|
||||
30 | let y : &mut &mut u32 = &mut &mut 2;
|
||||
| ^^^^^^^^^^^^^
|
||||
|
||||
error: generally you want to avoid `&mut &mut _` if possible
|
||||
--> $DIR/mut_mut.rs:39:17
|
||||
--> $DIR/mut_mut.rs:35:17
|
||||
|
|
||||
39 | let y : &mut &mut &mut u32 = &mut &mut &mut 2;
|
||||
35 | let y : &mut &mut &mut u32 = &mut &mut &mut 2;
|
||||
| ^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: generally you want to avoid `&mut &mut _` if possible
|
||||
--> $DIR/mut_mut.rs:39:22
|
||||
--> $DIR/mut_mut.rs:35:22
|
||||
|
|
||||
39 | let y : &mut &mut &mut u32 = &mut &mut &mut 2;
|
||||
35 | let y : &mut &mut &mut u32 = &mut &mut &mut 2;
|
||||
| ^^^^^^^^^^^^^
|
||||
|
||||
error: generally you want to avoid `&mut &mut _` if possible
|
||||
--> $DIR/mut_mut.rs:39:38
|
||||
--> $DIR/mut_mut.rs:35:38
|
||||
|
|
||||
39 | let y : &mut &mut &mut u32 = &mut &mut &mut 2;
|
||||
35 | let y : &mut &mut &mut u32 = &mut &mut &mut 2;
|
||||
| ^^^^^^^^^^^^^^^^
|
||||
|
||||
error: generally you want to avoid `&mut &mut _` if possible
|
||||
--> $DIR/mut_mut.rs:39:17
|
||||
--> $DIR/mut_mut.rs:35:17
|
||||
|
|
||||
39 | let y : &mut &mut &mut u32 = &mut &mut &mut 2;
|
||||
35 | let y : &mut &mut &mut u32 = &mut &mut &mut 2;
|
||||
| ^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: generally you want to avoid `&mut &mut _` if possible
|
||||
--> $DIR/mut_mut.rs:39:22
|
||||
--> $DIR/mut_mut.rs:35:22
|
||||
|
|
||||
39 | let y : &mut &mut &mut u32 = &mut &mut &mut 2;
|
||||
35 | let y : &mut &mut &mut u32 = &mut &mut &mut 2;
|
||||
| ^^^^^^^^^^^^^
|
||||
|
||||
error: generally you want to avoid `&mut &mut _` if possible
|
||||
--> $DIR/mut_mut.rs:39:22
|
||||
--> $DIR/mut_mut.rs:35:22
|
||||
|
|
||||
39 | let y : &mut &mut &mut u32 = &mut &mut &mut 2;
|
||||
35 | let y : &mut &mut &mut u32 = &mut &mut &mut 2;
|
||||
| ^^^^^^^^^^^^^
|
||||
|
||||
error: aborting due to 13 previous errors
|
||||
|
|
|
@ -9,17 +9,8 @@ fn main() {
|
|||
if x { true } else { true };
|
||||
if x { false } else { false };
|
||||
if x { true } else { false };
|
||||
|
||||
|
||||
|
||||
if x { false } else { true };
|
||||
|
||||
|
||||
|
||||
if x && y { false } else { true };
|
||||
|
||||
|
||||
|
||||
if x { x } else { false }; // would also be questionable, but we don't catch this yet
|
||||
bool_ret(x);
|
||||
bool_ret2(x);
|
||||
|
@ -32,43 +23,29 @@ fn main() {
|
|||
#[allow(if_same_then_else, needless_return)]
|
||||
fn bool_ret(x: bool) -> bool {
|
||||
if x { return true } else { return true };
|
||||
|
||||
}
|
||||
|
||||
#[allow(if_same_then_else, needless_return)]
|
||||
fn bool_ret2(x: bool) -> bool {
|
||||
if x { return false } else { return false };
|
||||
|
||||
}
|
||||
|
||||
#[allow(needless_return)]
|
||||
fn bool_ret3(x: bool) -> bool {
|
||||
if x { return true } else { return false };
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
#[allow(needless_return)]
|
||||
fn bool_ret5(x: bool, y: bool) -> bool {
|
||||
if x && y { return true } else { return false };
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
#[allow(needless_return)]
|
||||
fn bool_ret4(x: bool) -> bool {
|
||||
if x { return false } else { return true };
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
#[allow(needless_return)]
|
||||
fn bool_ret6(x: bool, y: bool) -> bool {
|
||||
if x && y { return false } else { return true };
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -23,51 +23,51 @@ error: this if-then-else expression returns a bool literal
|
|||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: you can reduce it to `x`
|
||||
|
||||
error: this if-then-else expression returns a bool literal
|
||||
--> $DIR/needless_bool.rs:15:5
|
||||
--> $DIR/needless_bool.rs:12:5
|
||||
|
|
||||
15 | if x { false } else { true };
|
||||
12 | if x { false } else { true };
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: you can reduce it to `!x`
|
||||
|
||||
error: this if-then-else expression returns a bool literal
|
||||
--> $DIR/needless_bool.rs:19:5
|
||||
--> $DIR/needless_bool.rs:13:5
|
||||
|
|
||||
19 | if x && y { false } else { true };
|
||||
13 | if x && y { false } else { true };
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: you can reduce it to `!(x && y)`
|
||||
|
||||
error: this if-then-else expression will always return true
|
||||
--> $DIR/needless_bool.rs:34:5
|
||||
--> $DIR/needless_bool.rs:25:5
|
||||
|
|
||||
34 | if x { return true } else { return true };
|
||||
25 | if x { return true } else { return true };
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: this if-then-else expression will always return false
|
||||
--> $DIR/needless_bool.rs:40:5
|
||||
--> $DIR/needless_bool.rs:30:5
|
||||
|
|
||||
40 | if x { return false } else { return false };
|
||||
30 | if x { return false } else { return false };
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: this if-then-else expression returns a bool literal
|
||||
--> $DIR/needless_bool.rs:46:5
|
||||
--> $DIR/needless_bool.rs:35:5
|
||||
|
|
||||
46 | if x { return true } else { return false };
|
||||
35 | if x { return true } else { return false };
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: you can reduce it to `return x`
|
||||
|
||||
error: this if-then-else expression returns a bool literal
|
||||
--> $DIR/needless_bool.rs:54:5
|
||||
--> $DIR/needless_bool.rs:40:5
|
||||
|
|
||||
54 | if x && y { return true } else { return false };
|
||||
40 | if x && y { return true } else { return false };
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: you can reduce it to `return x && y`
|
||||
|
||||
error: this if-then-else expression returns a bool literal
|
||||
--> $DIR/needless_bool.rs:62:5
|
||||
--> $DIR/needless_bool.rs:45:5
|
||||
|
|
||||
62 | if x { return false } else { return true };
|
||||
45 | if x { return false } else { return true };
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: you can reduce it to `return !x`
|
||||
|
||||
error: this if-then-else expression returns a bool literal
|
||||
--> $DIR/needless_bool.rs:70:5
|
||||
--> $DIR/needless_bool.rs:50:5
|
||||
|
|
||||
70 | if x && y { return false } else { return true };
|
||||
50 | if x && y { return false } else { return true };
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: you can reduce it to `return !(x && y)`
|
||||
|
||||
error: aborting due to 11 previous errors
|
||||
|
|
|
@ -9,44 +9,25 @@ fn test_end_of_fn() -> bool {
|
|||
return true;
|
||||
}
|
||||
return true;
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
fn test_no_semicolon() -> bool {
|
||||
return true
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
fn test_if_block() -> bool {
|
||||
if true {
|
||||
return true;
|
||||
|
||||
|
||||
|
||||
} else {
|
||||
return false;
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
fn test_match(x: bool) -> bool {
|
||||
match x {
|
||||
true => return false,
|
||||
|
||||
|
||||
|
||||
|
||||
false => {
|
||||
return true;
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -54,14 +35,8 @@ fn test_match(x: bool) -> bool {
|
|||
fn test_closure() {
|
||||
let _ = || {
|
||||
return true;
|
||||
|
||||
|
||||
|
||||
};
|
||||
let _ = || return true;
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
fn main() {
|
||||
|
|
|
@ -11,45 +11,45 @@ note: lint level defined here
|
|||
| ^^^^^^^^^^^^^^^
|
||||
|
||||
error: unneeded return statement
|
||||
--> $DIR/needless_return.rs:18:5
|
||||
--> $DIR/needless_return.rs:15:5
|
||||
|
|
||||
18 | return true
|
||||
15 | return true
|
||||
| ^^^^^^^^^^^ help: remove `return` as shown: `true`
|
||||
|
||||
error: unneeded return statement
|
||||
--> $DIR/needless_return.rs:26:9
|
||||
--> $DIR/needless_return.rs:20:9
|
||||
|
|
||||
26 | return true;
|
||||
20 | return true;
|
||||
| ^^^^^^^^^^^^ help: remove `return` as shown: `true`
|
||||
|
||||
error: unneeded return statement
|
||||
--> $DIR/needless_return.rs:31:9
|
||||
--> $DIR/needless_return.rs:22:9
|
||||
|
|
||||
31 | return false;
|
||||
22 | return false;
|
||||
| ^^^^^^^^^^^^^ help: remove `return` as shown: `false`
|
||||
|
||||
error: unneeded return statement
|
||||
--> $DIR/needless_return.rs:40:17
|
||||
--> $DIR/needless_return.rs:28:17
|
||||
|
|
||||
40 | true => return false,
|
||||
28 | true => return false,
|
||||
| ^^^^^^^^^^^^ help: remove `return` as shown: `false`
|
||||
|
||||
error: unneeded return statement
|
||||
--> $DIR/needless_return.rs:46:13
|
||||
--> $DIR/needless_return.rs:30:13
|
||||
|
|
||||
46 | return true;
|
||||
30 | return true;
|
||||
| ^^^^^^^^^^^^ help: remove `return` as shown: `true`
|
||||
|
||||
error: unneeded return statement
|
||||
--> $DIR/needless_return.rs:56:9
|
||||
--> $DIR/needless_return.rs:37:9
|
||||
|
|
||||
56 | return true;
|
||||
37 | return true;
|
||||
| ^^^^^^^^^^^^ help: remove `return` as shown: `true`
|
||||
|
||||
error: unneeded return statement
|
||||
--> $DIR/needless_return.rs:61:16
|
||||
--> $DIR/needless_return.rs:39:16
|
||||
|
|
||||
61 | let _ = || return true;
|
||||
39 | let _ = || return true;
|
||||
| ^^^^^^^^^^^ help: remove `return` as shown: `true`
|
||||
|
||||
error: aborting due to 8 previous errors
|
||||
|
|
|
@ -29,10 +29,8 @@ fn main() {
|
|||
|
||||
x * -1;
|
||||
|
||||
|
||||
-1 * x;
|
||||
|
||||
|
||||
-1 * -1; // should be ok
|
||||
|
||||
X * -1; // should be ok
|
||||
|
|
|
@ -11,9 +11,9 @@ note: lint level defined here
|
|||
| ^^^^^^^^^^^^
|
||||
|
||||
error: Negation by multiplying with -1
|
||||
--> $DIR/neg_multiply.rs:33:5
|
||||
--> $DIR/neg_multiply.rs:32:5
|
||||
|
|
||||
33 | -1 * x;
|
||||
32 | -1 * x;
|
||||
| ^^^^^^
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
|
|
@ -6,22 +6,14 @@
|
|||
|
||||
pub struct Foo;
|
||||
|
||||
|
||||
|
||||
|
||||
impl Foo {
|
||||
pub fn new() -> Foo { Foo }
|
||||
|
||||
}
|
||||
|
||||
pub struct Bar;
|
||||
|
||||
|
||||
|
||||
|
||||
impl Bar {
|
||||
pub fn new() -> Self { Bar }
|
||||
|
||||
}
|
||||
|
||||
pub struct Ok;
|
||||
|
@ -70,13 +62,6 @@ pub struct LtKo<'a> {
|
|||
|
||||
impl<'c> LtKo<'c> {
|
||||
pub fn new() -> LtKo<'c> { unimplemented!() }
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// FIXME: that suggestion is missing lifetimes
|
||||
}
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
error: you should consider deriving a `Default` implementation for `Foo`
|
||||
--> $DIR/new_without_default.rs:13:5
|
||||
--> $DIR/new_without_default.rs:10:5
|
||||
|
|
||||
13 | pub fn new() -> Foo { Foo }
|
||||
10 | pub fn new() -> Foo { Foo }
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
note: lint level defined here
|
||||
|
@ -14,9 +14,9 @@ help: try this
|
|||
| pub struct Foo;
|
||||
|
||||
error: you should consider deriving a `Default` implementation for `Bar`
|
||||
--> $DIR/new_without_default.rs:23:5
|
||||
--> $DIR/new_without_default.rs:16:5
|
||||
|
|
||||
23 | pub fn new() -> Self { Bar }
|
||||
16 | pub fn new() -> Self { Bar }
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
help: try this
|
||||
|
@ -24,9 +24,9 @@ help: try this
|
|||
| pub struct Bar;
|
||||
|
||||
error: you should consider adding a `Default` implementation for `LtKo<'c>`
|
||||
--> $DIR/new_without_default.rs:72:5
|
||||
--> $DIR/new_without_default.rs:64:5
|
||||
|
|
||||
72 | pub fn new() -> LtKo<'c> { unimplemented!() }
|
||||
64 | pub fn new() -> LtKo<'c> { unimplemented!() }
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
note: lint level defined here
|
||||
|
|
|
@ -63,60 +63,22 @@ fn main() {
|
|||
unsafe { unsafe_fn() };
|
||||
|
||||
Tuple(get_number());
|
||||
|
||||
|
||||
Struct { field: get_number() };
|
||||
|
||||
|
||||
Struct { ..get_struct() };
|
||||
|
||||
|
||||
Enum::Tuple(get_number());
|
||||
|
||||
|
||||
Enum::Struct { field: get_number() };
|
||||
|
||||
|
||||
5 + get_number();
|
||||
|
||||
|
||||
*&get_number();
|
||||
|
||||
|
||||
&get_number();
|
||||
|
||||
|
||||
(5, 6, get_number());
|
||||
|
||||
|
||||
box get_number();
|
||||
|
||||
|
||||
get_number()..;
|
||||
|
||||
|
||||
..get_number();
|
||||
|
||||
|
||||
5..get_number();
|
||||
|
||||
|
||||
[42, get_number()];
|
||||
|
||||
|
||||
[42, 55][get_number() as usize];
|
||||
|
||||
|
||||
(42, get_number()).1;
|
||||
|
||||
|
||||
[get_number(); 55];
|
||||
|
||||
|
||||
[42; 55][get_number() as usize];
|
||||
|
||||
|
||||
{get_number()};
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -166,113 +166,113 @@ note: lint level defined here
|
|||
4 | #![deny(no_effect, unnecessary_operation)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: statement can be reduced
|
||||
--> $DIR/no_effect.rs:66:5
|
||||
|
|
||||
66 | Struct { field: get_number() };
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with `get_number();`
|
||||
|
||||
error: statement can be reduced
|
||||
--> $DIR/no_effect.rs:67:5
|
||||
|
|
||||
67 | Struct { ..get_struct() };
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with `get_struct();`
|
||||
|
||||
error: statement can be reduced
|
||||
--> $DIR/no_effect.rs:68:5
|
||||
|
|
||||
68 | Struct { field: get_number() };
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with `get_number();`
|
||||
68 | Enum::Tuple(get_number());
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with `get_number();`
|
||||
|
||||
error: statement can be reduced
|
||||
--> $DIR/no_effect.rs:69:5
|
||||
|
|
||||
69 | Enum::Struct { field: get_number() };
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with `get_number();`
|
||||
|
||||
error: statement can be reduced
|
||||
--> $DIR/no_effect.rs:70:5
|
||||
|
|
||||
70 | 5 + get_number();
|
||||
| ^^^^^^^^^^^^^^^^^ help: replace it with `5;get_number();`
|
||||
|
||||
error: statement can be reduced
|
||||
--> $DIR/no_effect.rs:71:5
|
||||
|
|
||||
71 | Struct { ..get_struct() };
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with `get_struct();`
|
||||
71 | *&get_number();
|
||||
| ^^^^^^^^^^^^^^^ help: replace it with `get_number();`
|
||||
|
||||
error: statement can be reduced
|
||||
--> $DIR/no_effect.rs:72:5
|
||||
|
|
||||
72 | &get_number();
|
||||
| ^^^^^^^^^^^^^^ help: replace it with `get_number();`
|
||||
|
||||
error: statement can be reduced
|
||||
--> $DIR/no_effect.rs:73:5
|
||||
|
|
||||
73 | (5, 6, get_number());
|
||||
| ^^^^^^^^^^^^^^^^^^^^^ help: replace it with `5;6;get_number();`
|
||||
|
||||
error: statement can be reduced
|
||||
--> $DIR/no_effect.rs:74:5
|
||||
|
|
||||
74 | Enum::Tuple(get_number());
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with `get_number();`
|
||||
74 | box get_number();
|
||||
| ^^^^^^^^^^^^^^^^^ help: replace it with `get_number();`
|
||||
|
||||
error: statement can be reduced
|
||||
--> $DIR/no_effect.rs:75:5
|
||||
|
|
||||
75 | get_number()..;
|
||||
| ^^^^^^^^^^^^^^^ help: replace it with `get_number();`
|
||||
|
||||
error: statement can be reduced
|
||||
--> $DIR/no_effect.rs:76:5
|
||||
|
|
||||
76 | ..get_number();
|
||||
| ^^^^^^^^^^^^^^^ help: replace it with `get_number();`
|
||||
|
||||
error: statement can be reduced
|
||||
--> $DIR/no_effect.rs:77:5
|
||||
|
|
||||
77 | Enum::Struct { field: get_number() };
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with `get_number();`
|
||||
77 | 5..get_number();
|
||||
| ^^^^^^^^^^^^^^^^ help: replace it with `5;get_number();`
|
||||
|
||||
error: statement can be reduced
|
||||
--> $DIR/no_effect.rs:78:5
|
||||
|
|
||||
78 | [42, get_number()];
|
||||
| ^^^^^^^^^^^^^^^^^^^ help: replace it with `42;get_number();`
|
||||
|
||||
error: statement can be reduced
|
||||
--> $DIR/no_effect.rs:79:5
|
||||
|
|
||||
79 | [42, 55][get_number() as usize];
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with `[42, 55];get_number() as usize;`
|
||||
|
||||
error: statement can be reduced
|
||||
--> $DIR/no_effect.rs:80:5
|
||||
|
|
||||
80 | 5 + get_number();
|
||||
| ^^^^^^^^^^^^^^^^^ help: replace it with `5;get_number();`
|
||||
80 | (42, get_number()).1;
|
||||
| ^^^^^^^^^^^^^^^^^^^^^ help: replace it with `42;get_number();`
|
||||
|
||||
error: statement can be reduced
|
||||
--> $DIR/no_effect.rs:81:5
|
||||
|
|
||||
81 | [get_number(); 55];
|
||||
| ^^^^^^^^^^^^^^^^^^^ help: replace it with `get_number();`
|
||||
|
||||
error: statement can be reduced
|
||||
--> $DIR/no_effect.rs:82:5
|
||||
|
|
||||
82 | [42; 55][get_number() as usize];
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with `[42; 55];get_number() as usize;`
|
||||
|
||||
error: statement can be reduced
|
||||
--> $DIR/no_effect.rs:83:5
|
||||
|
|
||||
83 | *&get_number();
|
||||
83 | {get_number()};
|
||||
| ^^^^^^^^^^^^^^^ help: replace it with `get_number();`
|
||||
|
||||
error: statement can be reduced
|
||||
--> $DIR/no_effect.rs:86:5
|
||||
|
|
||||
86 | &get_number();
|
||||
| ^^^^^^^^^^^^^^ help: replace it with `get_number();`
|
||||
|
||||
error: statement can be reduced
|
||||
--> $DIR/no_effect.rs:89:5
|
||||
|
|
||||
89 | (5, 6, get_number());
|
||||
| ^^^^^^^^^^^^^^^^^^^^^ help: replace it with `5;6;get_number();`
|
||||
|
||||
error: statement can be reduced
|
||||
--> $DIR/no_effect.rs:92:5
|
||||
|
|
||||
92 | box get_number();
|
||||
| ^^^^^^^^^^^^^^^^^ help: replace it with `get_number();`
|
||||
|
||||
error: statement can be reduced
|
||||
--> $DIR/no_effect.rs:95:5
|
||||
|
|
||||
95 | get_number()..;
|
||||
| ^^^^^^^^^^^^^^^ help: replace it with `get_number();`
|
||||
|
||||
error: statement can be reduced
|
||||
--> $DIR/no_effect.rs:98:5
|
||||
|
|
||||
98 | ..get_number();
|
||||
| ^^^^^^^^^^^^^^^ help: replace it with `get_number();`
|
||||
|
||||
error: statement can be reduced
|
||||
--> $DIR/no_effect.rs:101:5
|
||||
|
|
||||
101 | 5..get_number();
|
||||
| ^^^^^^^^^^^^^^^^ help: replace it with `5;get_number();`
|
||||
|
||||
error: statement can be reduced
|
||||
--> $DIR/no_effect.rs:104:5
|
||||
|
|
||||
104 | [42, get_number()];
|
||||
| ^^^^^^^^^^^^^^^^^^^ help: replace it with `42;get_number();`
|
||||
|
||||
error: statement can be reduced
|
||||
--> $DIR/no_effect.rs:107:5
|
||||
|
|
||||
107 | [42, 55][get_number() as usize];
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with `[42, 55];get_number() as usize;`
|
||||
|
||||
error: statement can be reduced
|
||||
--> $DIR/no_effect.rs:110:5
|
||||
|
|
||||
110 | (42, get_number()).1;
|
||||
| ^^^^^^^^^^^^^^^^^^^^^ help: replace it with `42;get_number();`
|
||||
|
||||
error: statement can be reduced
|
||||
--> $DIR/no_effect.rs:113:5
|
||||
|
|
||||
113 | [get_number(); 55];
|
||||
| ^^^^^^^^^^^^^^^^^^^ help: replace it with `get_number();`
|
||||
|
||||
error: statement can be reduced
|
||||
--> $DIR/no_effect.rs:116:5
|
||||
|
|
||||
116 | [42; 55][get_number() as usize];
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with `[42; 55];get_number() as usize;`
|
||||
|
||||
error: statement can be reduced
|
||||
--> $DIR/no_effect.rs:119:5
|
||||
|
|
||||
119 | {get_number()};
|
||||
| ^^^^^^^^^^^^^^^ help: replace it with `get_number();`
|
||||
|
||||
error: aborting due to 44 previous errors
|
||||
|
||||
|
|
|
@ -1,17 +1,6 @@
|
|||
#![feature(plugin)]
|
||||
#![plugin(clippy)]
|
||||
#![deny(clippy,similar_names)]
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#![allow(unused)]
|
||||
|
||||
|
||||
|
@ -129,18 +118,15 @@ fn bla() {
|
|||
}
|
||||
{
|
||||
let e: i32;
|
||||
|
||||
}
|
||||
{
|
||||
let e: i32;
|
||||
|
||||
let f: i32;
|
||||
|
||||
}
|
||||
match 5 {
|
||||
1 => println!(""),
|
||||
e => panic!(),
|
||||
|
||||
}
|
||||
match 5 {
|
||||
1 => println!(""),
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
error: binding's name is too similar to existing binding
|
||||
--> $DIR/non_expressive_names.rs:29:9
|
||||
--> $DIR/non_expressive_names.rs:18:9
|
||||
|
|
||||
29 | let bpple: i32;
|
||||
18 | let bpple: i32;
|
||||
| ^^^^^
|
||||
|
|
||||
note: lint level defined here
|
||||
|
@ -10,107 +10,107 @@ note: lint level defined here
|
|||
3 | #![deny(clippy,similar_names)]
|
||||
| ^^^^^^^^^^^^^
|
||||
note: existing binding defined here
|
||||
--> $DIR/non_expressive_names.rs:27:9
|
||||
--> $DIR/non_expressive_names.rs:16:9
|
||||
|
|
||||
27 | let apple: i32;
|
||||
16 | let apple: i32;
|
||||
| ^^^^^
|
||||
help: separate the discriminating character by an underscore like: `b_pple`
|
||||
--> $DIR/non_expressive_names.rs:29:9
|
||||
--> $DIR/non_expressive_names.rs:18:9
|
||||
|
|
||||
29 | let bpple: i32;
|
||||
18 | let bpple: i32;
|
||||
| ^^^^^
|
||||
|
||||
error: binding's name is too similar to existing binding
|
||||
--> $DIR/non_expressive_names.rs:31:9
|
||||
--> $DIR/non_expressive_names.rs:20:9
|
||||
|
|
||||
31 | let cpple: i32;
|
||||
20 | let cpple: i32;
|
||||
| ^^^^^
|
||||
|
|
||||
note: existing binding defined here
|
||||
--> $DIR/non_expressive_names.rs:27:9
|
||||
--> $DIR/non_expressive_names.rs:16:9
|
||||
|
|
||||
27 | let apple: i32;
|
||||
16 | let apple: i32;
|
||||
| ^^^^^
|
||||
help: separate the discriminating character by an underscore like: `c_pple`
|
||||
--> $DIR/non_expressive_names.rs:31:9
|
||||
--> $DIR/non_expressive_names.rs:20:9
|
||||
|
|
||||
31 | let cpple: i32;
|
||||
20 | let cpple: i32;
|
||||
| ^^^^^
|
||||
|
||||
error: binding's name is too similar to existing binding
|
||||
--> $DIR/non_expressive_names.rs:56:9
|
||||
--> $DIR/non_expressive_names.rs:45:9
|
||||
|
|
||||
56 | let bluby: i32;
|
||||
45 | let bluby: i32;
|
||||
| ^^^^^
|
||||
|
|
||||
note: existing binding defined here
|
||||
--> $DIR/non_expressive_names.rs:55:9
|
||||
--> $DIR/non_expressive_names.rs:44:9
|
||||
|
|
||||
55 | let blubx: i32;
|
||||
44 | let blubx: i32;
|
||||
| ^^^^^
|
||||
help: separate the discriminating character by an underscore like: `blub_y`
|
||||
--> $DIR/non_expressive_names.rs:56:9
|
||||
--> $DIR/non_expressive_names.rs:45:9
|
||||
|
|
||||
56 | let bluby: i32;
|
||||
45 | let bluby: i32;
|
||||
| ^^^^^
|
||||
|
||||
error: binding's name is too similar to existing binding
|
||||
--> $DIR/non_expressive_names.rs:61:9
|
||||
--> $DIR/non_expressive_names.rs:50:9
|
||||
|
|
||||
61 | let coke: i32;
|
||||
50 | let coke: i32;
|
||||
| ^^^^
|
||||
|
|
||||
note: existing binding defined here
|
||||
--> $DIR/non_expressive_names.rs:59:9
|
||||
--> $DIR/non_expressive_names.rs:48:9
|
||||
|
|
||||
59 | let cake: i32;
|
||||
48 | let cake: i32;
|
||||
| ^^^^
|
||||
|
||||
error: binding's name is too similar to existing binding
|
||||
--> $DIR/non_expressive_names.rs:79:9
|
||||
--> $DIR/non_expressive_names.rs:68:9
|
||||
|
|
||||
79 | let xyzeabc: i32;
|
||||
68 | let xyzeabc: i32;
|
||||
| ^^^^^^^
|
||||
|
|
||||
note: existing binding defined here
|
||||
--> $DIR/non_expressive_names.rs:77:9
|
||||
--> $DIR/non_expressive_names.rs:66:9
|
||||
|
|
||||
77 | let xyz1abc: i32;
|
||||
66 | let xyz1abc: i32;
|
||||
| ^^^^^^^
|
||||
|
||||
error: binding's name is too similar to existing binding
|
||||
--> $DIR/non_expressive_names.rs:83:9
|
||||
--> $DIR/non_expressive_names.rs:72:9
|
||||
|
|
||||
83 | let parsee: i32;
|
||||
72 | let parsee: i32;
|
||||
| ^^^^^^
|
||||
|
|
||||
note: existing binding defined here
|
||||
--> $DIR/non_expressive_names.rs:81:9
|
||||
--> $DIR/non_expressive_names.rs:70:9
|
||||
|
|
||||
81 | let parser: i32;
|
||||
70 | let parser: i32;
|
||||
| ^^^^^^
|
||||
help: separate the discriminating character by an underscore like: `parse_e`
|
||||
--> $DIR/non_expressive_names.rs:83:9
|
||||
--> $DIR/non_expressive_names.rs:72:9
|
||||
|
|
||||
83 | let parsee: i32;
|
||||
72 | let parsee: i32;
|
||||
| ^^^^^^
|
||||
|
||||
error: binding's name is too similar to existing binding
|
||||
--> $DIR/non_expressive_names.rs:97:16
|
||||
--> $DIR/non_expressive_names.rs:86:16
|
||||
|
|
||||
97 | bpple: sprang } = unimplemented!();
|
||||
86 | bpple: sprang } = unimplemented!();
|
||||
| ^^^^^^
|
||||
|
|
||||
note: existing binding defined here
|
||||
--> $DIR/non_expressive_names.rs:96:22
|
||||
--> $DIR/non_expressive_names.rs:85:22
|
||||
|
|
||||
96 | let Foo { apple: spring,
|
||||
85 | let Foo { apple: spring,
|
||||
| ^^^^^^
|
||||
|
||||
error: 5th binding whose name is just one char
|
||||
--> $DIR/non_expressive_names.rs:131:17
|
||||
--> $DIR/non_expressive_names.rs:120:17
|
||||
|
|
||||
131 | let e: i32;
|
||||
120 | let e: i32;
|
||||
| ^
|
||||
|
|
||||
= note: #[deny(many_single_char_names)] implied by #[deny(clippy)]
|
||||
|
@ -121,25 +121,25 @@ note: lint level defined here
|
|||
| ^^^^^^
|
||||
|
||||
error: 5th binding whose name is just one char
|
||||
--> $DIR/non_expressive_names.rs:135:17
|
||||
--> $DIR/non_expressive_names.rs:123:17
|
||||
|
|
||||
135 | let e: i32;
|
||||
123 | let e: i32;
|
||||
| ^
|
||||
|
|
||||
= note: #[deny(many_single_char_names)] implied by #[deny(clippy)]
|
||||
|
||||
error: 6th binding whose name is just one char
|
||||
--> $DIR/non_expressive_names.rs:137:17
|
||||
--> $DIR/non_expressive_names.rs:124:17
|
||||
|
|
||||
137 | let f: i32;
|
||||
124 | let f: i32;
|
||||
| ^
|
||||
|
|
||||
= note: #[deny(many_single_char_names)] implied by #[deny(clippy)]
|
||||
|
||||
error: 5th binding whose name is just one char
|
||||
--> $DIR/non_expressive_names.rs:142:13
|
||||
--> $DIR/non_expressive_names.rs:129:13
|
||||
|
|
||||
142 | e => panic!(),
|
||||
129 | e => panic!(),
|
||||
| ^
|
||||
|
|
||||
= note: #[deny(many_single_char_names)] implied by #[deny(clippy)]
|
||||
|
|
|
@ -5,7 +5,6 @@
|
|||
|
||||
fn str_to_int(x: &str) -> i32 {
|
||||
if let Some(y) = x.parse().ok() {
|
||||
|
||||
y
|
||||
} else {
|
||||
0
|
||||
|
|
|
@ -2,11 +2,10 @@ error: Matching on `Some` with `ok()` is redundant
|
|||
--> $DIR/ok_if_let.rs:7:5
|
||||
|
|
||||
7 | / if let Some(y) = x.parse().ok() {
|
||||
8 | |
|
||||
9 | | y
|
||||
10 | | } else {
|
||||
11 | | 0
|
||||
12 | | }
|
||||
8 | | y
|
||||
9 | | } else {
|
||||
10 | | 0
|
||||
11 | | }
|
||||
| |_____^
|
||||
|
|
||||
note: lint level defined here
|
||||
|
|
|
@ -9,7 +9,6 @@ struct Foo;
|
|||
impl PartialEq for Foo {
|
||||
fn eq(&self, _: &Foo) -> bool { true }
|
||||
fn ne(&self, _: &Foo) -> bool { false }
|
||||
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
|
|
|
@ -6,34 +6,15 @@
|
|||
#[allow(eq_op)]
|
||||
fn main() {
|
||||
1 << 2 + 3;
|
||||
|
||||
|
||||
1 + 2 << 3;
|
||||
|
||||
|
||||
4 >> 1 + 1;
|
||||
|
||||
|
||||
1 + 3 >> 2;
|
||||
|
||||
|
||||
1 ^ 1 - 1;
|
||||
|
||||
|
||||
3 | 2 - 1;
|
||||
|
||||
|
||||
3 & 5 - 2;
|
||||
|
||||
|
||||
|
||||
-1i32.abs();
|
||||
|
||||
|
||||
-1f32.abs();
|
||||
|
||||
|
||||
|
||||
// These should not trigger an error
|
||||
let _ = (-1i32).abs();
|
||||
let _ = (-1f32).abs();
|
||||
|
|
|
@ -10,52 +10,52 @@ note: lint level defined here
|
|||
4 | #[deny(precedence)]
|
||||
| ^^^^^^^^^^
|
||||
|
||||
error: operator precedence can trip the unwary
|
||||
--> $DIR/precedence.rs:9:5
|
||||
|
|
||||
9 | 1 + 2 << 3;
|
||||
| ^^^^^^^^^^ help: consider parenthesizing your expression `(1 + 2) << 3`
|
||||
|
||||
error: operator precedence can trip the unwary
|
||||
--> $DIR/precedence.rs:10:5
|
||||
|
|
||||
10 | 4 >> 1 + 1;
|
||||
| ^^^^^^^^^^ help: consider parenthesizing your expression `4 >> (1 + 1)`
|
||||
|
||||
error: operator precedence can trip the unwary
|
||||
--> $DIR/precedence.rs:11:5
|
||||
|
|
||||
11 | 1 + 2 << 3;
|
||||
| ^^^^^^^^^^ help: consider parenthesizing your expression `(1 + 2) << 3`
|
||||
11 | 1 + 3 >> 2;
|
||||
| ^^^^^^^^^^ help: consider parenthesizing your expression `(1 + 3) >> 2`
|
||||
|
||||
error: operator precedence can trip the unwary
|
||||
--> $DIR/precedence.rs:12:5
|
||||
|
|
||||
12 | 1 ^ 1 - 1;
|
||||
| ^^^^^^^^^ help: consider parenthesizing your expression `1 ^ (1 - 1)`
|
||||
|
||||
error: operator precedence can trip the unwary
|
||||
--> $DIR/precedence.rs:13:5
|
||||
|
|
||||
13 | 3 | 2 - 1;
|
||||
| ^^^^^^^^^ help: consider parenthesizing your expression `3 | (2 - 1)`
|
||||
|
||||
error: operator precedence can trip the unwary
|
||||
--> $DIR/precedence.rs:14:5
|
||||
|
|
||||
14 | 4 >> 1 + 1;
|
||||
| ^^^^^^^^^^ help: consider parenthesizing your expression `4 >> (1 + 1)`
|
||||
|
||||
error: operator precedence can trip the unwary
|
||||
--> $DIR/precedence.rs:17:5
|
||||
|
|
||||
17 | 1 + 3 >> 2;
|
||||
| ^^^^^^^^^^ help: consider parenthesizing your expression `(1 + 3) >> 2`
|
||||
|
||||
error: operator precedence can trip the unwary
|
||||
--> $DIR/precedence.rs:20:5
|
||||
|
|
||||
20 | 1 ^ 1 - 1;
|
||||
| ^^^^^^^^^ help: consider parenthesizing your expression `1 ^ (1 - 1)`
|
||||
|
||||
error: operator precedence can trip the unwary
|
||||
--> $DIR/precedence.rs:23:5
|
||||
|
|
||||
23 | 3 | 2 - 1;
|
||||
| ^^^^^^^^^ help: consider parenthesizing your expression `3 | (2 - 1)`
|
||||
|
||||
error: operator precedence can trip the unwary
|
||||
--> $DIR/precedence.rs:26:5
|
||||
|
|
||||
26 | 3 & 5 - 2;
|
||||
14 | 3 & 5 - 2;
|
||||
| ^^^^^^^^^ help: consider parenthesizing your expression `3 & (5 - 2)`
|
||||
|
||||
error: unary minus has lower precedence than method call
|
||||
--> $DIR/precedence.rs:30:5
|
||||
--> $DIR/precedence.rs:15:5
|
||||
|
|
||||
30 | -1i32.abs();
|
||||
15 | -1i32.abs();
|
||||
| ^^^^^^^^^^^ help: consider adding parentheses to clarify your intent `-(1i32.abs())`
|
||||
|
||||
error: unary minus has lower precedence than method call
|
||||
--> $DIR/precedence.rs:33:5
|
||||
--> $DIR/precedence.rs:16:5
|
||||
|
|
||||
33 | -1f32.abs();
|
||||
16 | -1f32.abs();
|
||||
| ^^^^^^^^^^^ help: consider adding parentheses to clarify your intent `-(1f32.abs())`
|
||||
|
||||
error: aborting due to 9 previous errors
|
||||
|
|
|
@ -10,7 +10,6 @@ struct Foo;
|
|||
impl Display for Foo {
|
||||
fn fmt(&self, f: &mut Formatter) -> Result {
|
||||
write!(f, "{:?}", 43.1415)
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -29,12 +28,8 @@ fn main() {
|
|||
|
||||
print!("Hello {:?}", "World");
|
||||
|
||||
|
||||
|
||||
print!("Hello {:#?}", "#orld");
|
||||
|
||||
|
||||
|
||||
assert_eq!(42, 1337);
|
||||
|
||||
vec![1, 2];
|
||||
|
|
|
@ -11,9 +11,9 @@ note: lint level defined here
|
|||
| ^^^^^^^^^
|
||||
|
||||
error: use of `println!`
|
||||
--> $DIR/print.rs:25:5
|
||||
--> $DIR/print.rs:24:5
|
||||
|
|
||||
25 | println!("Hello");
|
||||
24 | println!("Hello");
|
||||
| ^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
note: lint level defined here
|
||||
|
@ -23,39 +23,39 @@ note: lint level defined here
|
|||
| ^^^^^^^^^^^^
|
||||
|
||||
error: use of `print!`
|
||||
--> $DIR/print.rs:26:5
|
||||
--> $DIR/print.rs:25:5
|
||||
|
|
||||
26 | print!("Hello");
|
||||
25 | print!("Hello");
|
||||
| ^^^^^^^^^^^^^^^^
|
||||
|
||||
error: use of `print!`
|
||||
--> $DIR/print.rs:28:5
|
||||
--> $DIR/print.rs:27:5
|
||||
|
|
||||
28 | print!("Hello {}", "World");
|
||||
27 | print!("Hello {}", "World");
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: use of `print!`
|
||||
--> $DIR/print.rs:30:5
|
||||
--> $DIR/print.rs:29:5
|
||||
|
|
||||
30 | print!("Hello {:?}", "World");
|
||||
29 | print!("Hello {:?}", "World");
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: use of `Debug`-based formatting
|
||||
--> $DIR/print.rs:30:26
|
||||
--> $DIR/print.rs:29:26
|
||||
|
|
||||
30 | print!("Hello {:?}", "World");
|
||||
29 | print!("Hello {:?}", "World");
|
||||
| ^^^^^^^
|
||||
|
||||
error: use of `print!`
|
||||
--> $DIR/print.rs:34:5
|
||||
--> $DIR/print.rs:31:5
|
||||
|
|
||||
34 | print!("Hello {:#?}", "#orld");
|
||||
31 | print!("Hello {:#?}", "#orld");
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: use of `Debug`-based formatting
|
||||
--> $DIR/print.rs:34:27
|
||||
--> $DIR/print.rs:31:27
|
||||
|
|
||||
34 | print!("Hello {:#?}", "#orld");
|
||||
31 | print!("Hello {:#?}", "#orld");
|
||||
| ^^^^^^^
|
||||
|
||||
error: aborting due to 8 previous errors
|
||||
|
|
|
@ -6,9 +6,6 @@
|
|||
fn main() {
|
||||
let a = (|| 42)();
|
||||
|
||||
|
||||
|
||||
|
||||
let mut i = 1;
|
||||
let k = (|m| m+1)(i);
|
||||
|
||||
|
@ -22,4 +19,3 @@ fn main() {
|
|||
|
||||
i = closure(4);
|
||||
}
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
error: Closure called just once immediately after it was declared
|
||||
--> $DIR/redundant_closure_call.rs:18:2
|
||||
--> $DIR/redundant_closure_call.rs:15:2
|
||||
|
|
||||
18 | \ti = closure();
|
||||
15 | \ti = closure();
|
||||
| \t^^^^^^^^^^^^^
|
||||
|
|
||||
note: lint level defined here
|
||||
|
@ -11,9 +11,9 @@ note: lint level defined here
|
|||
| ^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: Closure called just once immediately after it was declared
|
||||
--> $DIR/redundant_closure_call.rs:21:2
|
||||
--> $DIR/redundant_closure_call.rs:18:2
|
||||
|
|
||||
21 | \ti = closure(3);
|
||||
18 | \ti = closure(3);
|
||||
| \t^^^^^^^^^^^^^^
|
||||
|
||||
error: Try not to call a closure in the expression where it is declared.
|
||||
|
@ -23,15 +23,15 @@ error: Try not to call a closure in the expression where it is declared.
|
|||
| \t ^^^^^^^^^ help: Try doing something like: `42`
|
||||
|
||||
error: Try not to call a closure in the expression where it is declared.
|
||||
--> $DIR/redundant_closure_call.rs:13:10
|
||||
--> $DIR/redundant_closure_call.rs:10:10
|
||||
|
|
||||
13 | \tlet k = (|m| m+1)(i);
|
||||
10 | \tlet k = (|m| m+1)(i);
|
||||
| \t ^^^^^^^^^^^^
|
||||
|
||||
error: Try not to call a closure in the expression where it is declared.
|
||||
--> $DIR/redundant_closure_call.rs:15:6
|
||||
--> $DIR/redundant_closure_call.rs:12:6
|
||||
|
|
||||
15 | \tk = (|a,b| a*b)(1,5);
|
||||
12 | \tk = (|a,b| a*b)(1,5);
|
||||
| \t ^^^^^^^^^^^^^^^^
|
||||
|
||||
error: aborting due to 5 previous errors
|
||||
|
|
|
@ -18,62 +18,32 @@ fn main() {
|
|||
|
||||
let b = *&a;
|
||||
|
||||
|
||||
|
||||
|
||||
let b = *&get_number();
|
||||
|
||||
|
||||
|
||||
|
||||
let b = *get_reference(&a);
|
||||
|
||||
let bytes : Vec<usize> = vec![1, 2, 3, 4];
|
||||
let b = *&bytes[1..2][0];
|
||||
|
||||
|
||||
|
||||
|
||||
//This produces a suggestion of 'let b = (a);' which
|
||||
//will trigger the 'unused_parens' lint
|
||||
let b = *&(a);
|
||||
|
||||
|
||||
|
||||
|
||||
let b = *(&a);
|
||||
|
||||
|
||||
|
||||
|
||||
let b = *((&a));
|
||||
|
||||
|
||||
|
||||
|
||||
let b = *&&a;
|
||||
|
||||
|
||||
|
||||
|
||||
let b = **&aref;
|
||||
|
||||
|
||||
|
||||
|
||||
//This produces a suggestion of 'let b = *&a;' which
|
||||
//will trigger the 'deref_addrof' lint again
|
||||
let b = **&&a;
|
||||
|
||||
|
||||
|
||||
|
||||
{
|
||||
let mut x = 10;
|
||||
let y = *&mut x;
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
{
|
||||
|
@ -81,8 +51,5 @@ fn main() {
|
|||
//will trigger the 'deref_addrof' lint again
|
||||
let mut x = 10;
|
||||
let y = **&mut &mut x;
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -11,63 +11,63 @@ note: lint level defined here
|
|||
| ^^^^^^^^^^^^
|
||||
|
||||
error: immediately dereferencing a reference
|
||||
--> $DIR/reference.rs:24:13
|
||||
--> $DIR/reference.rs:21:13
|
||||
|
|
||||
24 | let b = *&get_number();
|
||||
21 | let b = *&get_number();
|
||||
| ^^^^^^^^^^^^^^ help: try this `get_number()`
|
||||
|
||||
error: immediately dereferencing a reference
|
||||
--> $DIR/reference.rs:26:13
|
||||
|
|
||||
26 | let b = *&bytes[1..2][0];
|
||||
| ^^^^^^^^^^^^^^^^ help: try this `bytes[1..2][0]`
|
||||
|
||||
error: immediately dereferencing a reference
|
||||
--> $DIR/reference.rs:30:13
|
||||
|
|
||||
30 | let b = *&(a);
|
||||
| ^^^^^ help: try this `(a)`
|
||||
|
||||
error: immediately dereferencing a reference
|
||||
--> $DIR/reference.rs:32:13
|
||||
|
|
||||
32 | let b = *&bytes[1..2][0];
|
||||
| ^^^^^^^^^^^^^^^^ help: try this `bytes[1..2][0]`
|
||||
|
||||
error: immediately dereferencing a reference
|
||||
--> $DIR/reference.rs:39:13
|
||||
|
|
||||
39 | let b = *&(a);
|
||||
| ^^^^^ help: try this `(a)`
|
||||
|
||||
error: immediately dereferencing a reference
|
||||
--> $DIR/reference.rs:44:13
|
||||
|
|
||||
44 | let b = *(&a);
|
||||
32 | let b = *(&a);
|
||||
| ^^^^^ help: try this `a`
|
||||
|
||||
error: immediately dereferencing a reference
|
||||
--> $DIR/reference.rs:49:13
|
||||
--> $DIR/reference.rs:34:13
|
||||
|
|
||||
49 | let b = *((&a));
|
||||
34 | let b = *((&a));
|
||||
| ^^^^^^^ help: try this `a`
|
||||
|
||||
error: immediately dereferencing a reference
|
||||
--> $DIR/reference.rs:54:13
|
||||
--> $DIR/reference.rs:36:13
|
||||
|
|
||||
54 | let b = *&&a;
|
||||
36 | let b = *&&a;
|
||||
| ^^^^ help: try this `&a`
|
||||
|
||||
error: immediately dereferencing a reference
|
||||
--> $DIR/reference.rs:59:14
|
||||
--> $DIR/reference.rs:38:14
|
||||
|
|
||||
59 | let b = **&aref;
|
||||
38 | let b = **&aref;
|
||||
| ^^^^^^ help: try this `aref`
|
||||
|
||||
error: immediately dereferencing a reference
|
||||
--> $DIR/reference.rs:66:14
|
||||
--> $DIR/reference.rs:42:14
|
||||
|
|
||||
66 | let b = **&&a;
|
||||
42 | let b = **&&a;
|
||||
| ^^^^ help: try this `&a`
|
||||
|
||||
error: immediately dereferencing a reference
|
||||
--> $DIR/reference.rs:73:17
|
||||
--> $DIR/reference.rs:46:17
|
||||
|
|
||||
73 | let y = *&mut x;
|
||||
46 | let y = *&mut x;
|
||||
| ^^^^^^^ help: try this `x`
|
||||
|
||||
error: immediately dereferencing a reference
|
||||
--> $DIR/reference.rs:83:18
|
||||
--> $DIR/reference.rs:53:18
|
||||
|
|
||||
83 | let y = **&mut &mut x;
|
||||
53 | let y = **&mut &mut x;
|
||||
| ^^^^^^^^^^^^ help: try this `&mut x`
|
||||
|
||||
error: aborting due to 11 previous errors
|
||||
|
|
|
@ -14,24 +14,16 @@ const NOT_A_REAL_REGEX : &'static str = "foobar";
|
|||
|
||||
fn syntax_error() {
|
||||
let pipe_in_wrong_position = Regex::new("|");
|
||||
|
||||
let pipe_in_wrong_position_builder = RegexBuilder::new("|");
|
||||
|
||||
let wrong_char_ranice = Regex::new("[z-a]");
|
||||
|
||||
let some_unicode = Regex::new("[é-è]");
|
||||
|
||||
|
||||
let some_regex = Regex::new(OPENING_PAREN);
|
||||
|
||||
|
||||
let binary_pipe_in_wrong_position = BRegex::new("|");
|
||||
|
||||
let some_binary_regex = BRegex::new(OPENING_PAREN);
|
||||
|
||||
let some_binary_regex_builder = BRegexBuilder::new(OPENING_PAREN);
|
||||
|
||||
|
||||
let closing_paren = ")";
|
||||
let not_linted = Regex::new(closing_paren);
|
||||
|
||||
|
@ -46,12 +38,10 @@ fn syntax_error() {
|
|||
|
||||
let set_error = RegexSet::new(&[
|
||||
OPENING_PAREN,
|
||||
|
||||
r"[a-z]+\.(com|org|net)",
|
||||
]);
|
||||
let bset_error = BRegexSet::new(&[
|
||||
OPENING_PAREN,
|
||||
|
||||
r"[a-z]+\.(com|org|net)",
|
||||
]);
|
||||
}
|
||||
|
@ -59,49 +49,27 @@ fn syntax_error() {
|
|||
fn trivial_regex() {
|
||||
let trivial_eq = Regex::new("^foobar$");
|
||||
|
||||
|
||||
|
||||
let trivial_eq_builder = RegexBuilder::new("^foobar$");
|
||||
|
||||
|
||||
|
||||
let trivial_starts_with = Regex::new("^foobar");
|
||||
|
||||
|
||||
|
||||
let trivial_ends_with = Regex::new("foobar$");
|
||||
|
||||
|
||||
|
||||
let trivial_contains = Regex::new("foobar");
|
||||
|
||||
|
||||
|
||||
let trivial_contains = Regex::new(NOT_A_REAL_REGEX);
|
||||
|
||||
|
||||
|
||||
let trivial_backslash = Regex::new("a\\.b");
|
||||
|
||||
|
||||
|
||||
// unlikely corner cases
|
||||
let trivial_empty = Regex::new("");
|
||||
|
||||
|
||||
|
||||
let trivial_empty = Regex::new("^");
|
||||
|
||||
|
||||
|
||||
let trivial_empty = Regex::new("^$");
|
||||
|
||||
|
||||
|
||||
let binary_trivial_empty = BRegex::new("^$");
|
||||
|
||||
|
||||
|
||||
// non-trivial regexes
|
||||
let non_trivial_dot = Regex::new("a.b");
|
||||
let non_trivial_dot_builder = RegexBuilder::new("a.b");
|
||||
|
|
|
@ -7,81 +7,81 @@ error: regex syntax error: empty alternate
|
|||
= note: #[deny(invalid_regex)] on by default
|
||||
|
||||
error: regex syntax error: empty alternate
|
||||
--> $DIR/regex.rs:18:60
|
||||
--> $DIR/regex.rs:17:60
|
||||
|
|
||||
18 | let pipe_in_wrong_position_builder = RegexBuilder::new("|");
|
||||
17 | let pipe_in_wrong_position_builder = RegexBuilder::new("|");
|
||||
| ^^^
|
||||
|
|
||||
= note: #[deny(invalid_regex)] on by default
|
||||
|
||||
error: regex syntax error: invalid character class range
|
||||
--> $DIR/regex.rs:20:40
|
||||
--> $DIR/regex.rs:18:40
|
||||
|
|
||||
20 | let wrong_char_ranice = Regex::new("[z-a]");
|
||||
18 | let wrong_char_ranice = Regex::new("[z-a]");
|
||||
| ^^^^^^^
|
||||
|
|
||||
= note: #[deny(invalid_regex)] on by default
|
||||
|
||||
error: regex syntax error: invalid character class range
|
||||
--> $DIR/regex.rs:22:35
|
||||
--> $DIR/regex.rs:19:35
|
||||
|
|
||||
22 | let some_unicode = Regex::new("[é-è]");
|
||||
19 | let some_unicode = Regex::new("[é-è]");
|
||||
| ^^^^^^^
|
||||
|
|
||||
= note: #[deny(invalid_regex)] on by default
|
||||
|
||||
error: regex syntax error on position 0: unclosed parenthesis
|
||||
--> $DIR/regex.rs:25:33
|
||||
--> $DIR/regex.rs:21:33
|
||||
|
|
||||
25 | let some_regex = Regex::new(OPENING_PAREN);
|
||||
21 | let some_regex = Regex::new(OPENING_PAREN);
|
||||
| ^^^^^^^^^^^^^
|
||||
|
|
||||
= note: #[deny(invalid_regex)] on by default
|
||||
|
||||
error: regex syntax error: empty alternate
|
||||
--> $DIR/regex.rs:28:53
|
||||
--> $DIR/regex.rs:23:53
|
||||
|
|
||||
28 | let binary_pipe_in_wrong_position = BRegex::new("|");
|
||||
23 | let binary_pipe_in_wrong_position = BRegex::new("|");
|
||||
| ^^^
|
||||
|
|
||||
= note: #[deny(invalid_regex)] on by default
|
||||
|
||||
error: regex syntax error on position 0: unclosed parenthesis
|
||||
--> $DIR/regex.rs:30:41
|
||||
--> $DIR/regex.rs:24:41
|
||||
|
|
||||
30 | let some_binary_regex = BRegex::new(OPENING_PAREN);
|
||||
24 | let some_binary_regex = BRegex::new(OPENING_PAREN);
|
||||
| ^^^^^^^^^^^^^
|
||||
|
|
||||
= note: #[deny(invalid_regex)] on by default
|
||||
|
||||
error: regex syntax error on position 0: unclosed parenthesis
|
||||
--> $DIR/regex.rs:32:56
|
||||
--> $DIR/regex.rs:25:56
|
||||
|
|
||||
32 | let some_binary_regex_builder = BRegexBuilder::new(OPENING_PAREN);
|
||||
25 | let some_binary_regex_builder = BRegexBuilder::new(OPENING_PAREN);
|
||||
| ^^^^^^^^^^^^^
|
||||
|
|
||||
= note: #[deny(invalid_regex)] on by default
|
||||
|
||||
error: regex syntax error on position 0: unclosed parenthesis
|
||||
--> $DIR/regex.rs:48:9
|
||||
--> $DIR/regex.rs:40:9
|
||||
|
|
||||
48 | OPENING_PAREN,
|
||||
40 | OPENING_PAREN,
|
||||
| ^^^^^^^^^^^^^
|
||||
|
|
||||
= note: #[deny(invalid_regex)] on by default
|
||||
|
||||
error: regex syntax error on position 0: unclosed parenthesis
|
||||
--> $DIR/regex.rs:53:9
|
||||
--> $DIR/regex.rs:44:9
|
||||
|
|
||||
53 | OPENING_PAREN,
|
||||
44 | OPENING_PAREN,
|
||||
| ^^^^^^^^^^^^^
|
||||
|
|
||||
= note: #[deny(invalid_regex)] on by default
|
||||
|
||||
error: trivial regex
|
||||
--> $DIR/regex.rs:60:33
|
||||
--> $DIR/regex.rs:50:33
|
||||
|
|
||||
60 | let trivial_eq = Regex::new("^foobar$");
|
||||
50 | let trivial_eq = Regex::new("^foobar$");
|
||||
| ^^^^^^^^^^
|
||||
|
|
||||
note: lint level defined here
|
||||
|
@ -92,84 +92,84 @@ note: lint level defined here
|
|||
= help: consider using consider using `==` on `str`s
|
||||
|
||||
error: trivial regex
|
||||
--> $DIR/regex.rs:64:48
|
||||
--> $DIR/regex.rs:52:48
|
||||
|
|
||||
64 | let trivial_eq_builder = RegexBuilder::new("^foobar$");
|
||||
52 | let trivial_eq_builder = RegexBuilder::new("^foobar$");
|
||||
| ^^^^^^^^^^
|
||||
|
|
||||
= help: consider using consider using `==` on `str`s
|
||||
|
||||
error: trivial regex
|
||||
--> $DIR/regex.rs:68:42
|
||||
--> $DIR/regex.rs:54:42
|
||||
|
|
||||
68 | let trivial_starts_with = Regex::new("^foobar");
|
||||
54 | let trivial_starts_with = Regex::new("^foobar");
|
||||
| ^^^^^^^^^
|
||||
|
|
||||
= help: consider using consider using `str::starts_with`
|
||||
|
||||
error: trivial regex
|
||||
--> $DIR/regex.rs:72:40
|
||||
--> $DIR/regex.rs:56:40
|
||||
|
|
||||
72 | let trivial_ends_with = Regex::new("foobar$");
|
||||
56 | let trivial_ends_with = Regex::new("foobar$");
|
||||
| ^^^^^^^^^
|
||||
|
|
||||
= help: consider using consider using `str::ends_with`
|
||||
|
||||
error: trivial regex
|
||||
--> $DIR/regex.rs:76:39
|
||||
--> $DIR/regex.rs:58:39
|
||||
|
|
||||
76 | let trivial_contains = Regex::new("foobar");
|
||||
58 | let trivial_contains = Regex::new("foobar");
|
||||
| ^^^^^^^^
|
||||
|
|
||||
= help: consider using consider using `str::contains`
|
||||
|
||||
error: trivial regex
|
||||
--> $DIR/regex.rs:80:39
|
||||
--> $DIR/regex.rs:60:39
|
||||
|
|
||||
80 | let trivial_contains = Regex::new(NOT_A_REAL_REGEX);
|
||||
60 | let trivial_contains = Regex::new(NOT_A_REAL_REGEX);
|
||||
| ^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= help: consider using consider using `str::contains`
|
||||
|
||||
error: trivial regex
|
||||
--> $DIR/regex.rs:84:40
|
||||
--> $DIR/regex.rs:62:40
|
||||
|
|
||||
84 | let trivial_backslash = Regex::new("a//.b");
|
||||
62 | let trivial_backslash = Regex::new("a//.b");
|
||||
| ^^^^^^^
|
||||
|
|
||||
= help: consider using consider using `str::contains`
|
||||
|
||||
error: trivial regex
|
||||
--> $DIR/regex.rs:89:36
|
||||
--> $DIR/regex.rs:65:36
|
||||
|
|
||||
89 | let trivial_empty = Regex::new("");
|
||||
65 | let trivial_empty = Regex::new("");
|
||||
| ^^
|
||||
|
|
||||
= help: consider using the regex is unlikely to be useful as it is
|
||||
|
||||
error: trivial regex
|
||||
--> $DIR/regex.rs:93:36
|
||||
--> $DIR/regex.rs:67:36
|
||||
|
|
||||
93 | let trivial_empty = Regex::new("^");
|
||||
67 | let trivial_empty = Regex::new("^");
|
||||
| ^^^
|
||||
|
|
||||
= help: consider using the regex is unlikely to be useful as it is
|
||||
|
||||
error: trivial regex
|
||||
--> $DIR/regex.rs:97:36
|
||||
--> $DIR/regex.rs:69:36
|
||||
|
|
||||
97 | let trivial_empty = Regex::new("^$");
|
||||
69 | let trivial_empty = Regex::new("^$");
|
||||
| ^^^^
|
||||
|
|
||||
= help: consider using consider using `str::is_empty`
|
||||
|
||||
error: trivial regex
|
||||
--> $DIR/regex.rs:101:44
|
||||
|
|
||||
101 | let binary_trivial_empty = BRegex::new("^$");
|
||||
| ^^^^
|
||||
|
|
||||
= help: consider using consider using `str::is_empty`
|
||||
--> $DIR/regex.rs:71:44
|
||||
|
|
||||
71 | let binary_trivial_empty = BRegex::new("^$");
|
||||
| ^^^^
|
||||
|
|
||||
= help: consider using consider using `str::is_empty`
|
||||
|
||||
error: aborting due to 21 previous errors
|
||||
|
||||
|
|
|
@ -37,7 +37,6 @@ impl<'de> serde::de::Visitor<'de> for B {
|
|||
}
|
||||
|
||||
fn visit_string<E>(self, _v: String) -> Result<Self::Value, E>
|
||||
|
||||
where E: serde::de::Error,
|
||||
{
|
||||
unimplemented!()
|
||||
|
|
|
@ -2,11 +2,10 @@ error: you should not implement `visit_string` without also implementing `visit_
|
|||
--> $DIR/serde.rs:39:5
|
||||
|
|
||||
39 | / fn visit_string<E>(self, _v: String) -> Result<Self::Value, E>
|
||||
40 | |
|
||||
41 | | where E: serde::de::Error,
|
||||
42 | | {
|
||||
43 | | unimplemented!()
|
||||
44 | | }
|
||||
40 | | where E: serde::de::Error,
|
||||
41 | | {
|
||||
42 | | unimplemented!()
|
||||
43 | | }
|
||||
| |_____^
|
||||
|
|
||||
note: lint level defined here
|
||||
|
|
|
@ -5,17 +5,8 @@
|
|||
|
||||
fn main() {
|
||||
f() && g();
|
||||
|
||||
|
||||
|
||||
f() || g();
|
||||
|
||||
|
||||
|
||||
1 == 2 || g();
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
fn f() -> bool {
|
||||
|
|
|
@ -11,16 +11,16 @@ note: lint level defined here
|
|||
| ^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: boolean short circuit operator in statement may be clearer using an explicit test
|
||||
--> $DIR/short_circuit_statement.rs:11:5
|
||||
|
|
||||
11 | f() || g();
|
||||
| ^^^^^^^^^^^ help: replace it with `if !f() { g(); }`
|
||||
--> $DIR/short_circuit_statement.rs:8:5
|
||||
|
|
||||
8 | f() || g();
|
||||
| ^^^^^^^^^^^ help: replace it with `if !f() { g(); }`
|
||||
|
||||
error: boolean short circuit operator in statement may be clearer using an explicit test
|
||||
--> $DIR/short_circuit_statement.rs:15:5
|
||||
|
|
||||
15 | 1 == 2 || g();
|
||||
| ^^^^^^^^^^^^^^ help: replace it with `if !(1 == 2) { g(); }`
|
||||
--> $DIR/short_circuit_statement.rs:9:5
|
||||
|
|
||||
9 | 1 == 2 || g();
|
||||
| ^^^^^^^^^^^^^^ help: replace it with `if !(1 == 2) { g(); }`
|
||||
|
||||
error: aborting due to 3 previous errors
|
||||
|
||||
|
|
|
@ -49,9 +49,6 @@ fn both() {
|
|||
fn str_lit_as_bytes() {
|
||||
let bs = "hello there".as_bytes();
|
||||
|
||||
|
||||
|
||||
|
||||
// no warning, because this cannot be written as a byte string literal:
|
||||
let ubs = "☃".as_bytes();
|
||||
|
||||
|
@ -66,8 +63,5 @@ fn main() {
|
|||
// the add is only caught for `String`
|
||||
let mut x = 1;
|
||||
; x = x + 1;
|
||||
|
||||
|
||||
|
||||
assert_eq!(2, x);
|
||||
}
|
||||
|
|
|
@ -65,9 +65,9 @@ note: lint level defined here
|
|||
| ^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
warning: manual implementation of an assign operation
|
||||
--> $DIR/strings.rs:68:7
|
||||
--> $DIR/strings.rs:65:7
|
||||
|
|
||||
68 | ; x = x + 1;
|
||||
65 | ; x = x + 1;
|
||||
| ^^^^^^^^^ help: replace it with `x += 1`
|
||||
|
|
||||
= note: #[warn(assign_op_pattern)] on by default
|
||||
|
|
|
@ -12,9 +12,6 @@ fn array() {
|
|||
foo[0] = foo[1];
|
||||
foo[1] = temp;
|
||||
|
||||
|
||||
|
||||
|
||||
foo.swap(0, 1);
|
||||
}
|
||||
|
||||
|
@ -24,9 +21,6 @@ fn slice() {
|
|||
foo[0] = foo[1];
|
||||
foo[1] = temp;
|
||||
|
||||
|
||||
|
||||
|
||||
foo.swap(0, 1);
|
||||
}
|
||||
|
||||
|
@ -36,9 +30,6 @@ fn vec() {
|
|||
foo[0] = foo[1];
|
||||
foo[1] = temp;
|
||||
|
||||
|
||||
|
||||
|
||||
foo.swap(0, 1);
|
||||
}
|
||||
|
||||
|
@ -53,32 +44,16 @@ fn main() {
|
|||
a = b;
|
||||
b = a;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
; let t = a;
|
||||
a = b;
|
||||
b = t;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
let mut c = Foo(42);
|
||||
|
||||
c.0 = a;
|
||||
a = c.0;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
; let t = c.0;
|
||||
c.0 = a;
|
||||
a = t;
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -14,54 +14,54 @@ note: lint level defined here
|
|||
| ^^^^^^
|
||||
|
||||
error: this looks like you are swapping elements of `foo` manually
|
||||
--> $DIR/swap.rs:23:5
|
||||
--> $DIR/swap.rs:20:5
|
||||
|
|
||||
23 | / let temp = foo[0];
|
||||
24 | | foo[0] = foo[1];
|
||||
25 | | foo[1] = temp;
|
||||
20 | / let temp = foo[0];
|
||||
21 | | foo[0] = foo[1];
|
||||
22 | | foo[1] = temp;
|
||||
| |_________________^ help: try `foo.swap(0, 1)`
|
||||
|
|
||||
= note: #[deny(manual_swap)] implied by #[deny(clippy)]
|
||||
|
||||
error: this looks like you are swapping elements of `foo` manually
|
||||
--> $DIR/swap.rs:35:5
|
||||
--> $DIR/swap.rs:29:5
|
||||
|
|
||||
35 | / let temp = foo[0];
|
||||
36 | | foo[0] = foo[1];
|
||||
37 | | foo[1] = temp;
|
||||
29 | / let temp = foo[0];
|
||||
30 | | foo[0] = foo[1];
|
||||
31 | | foo[1] = temp;
|
||||
| |_________________^ help: try `foo.swap(0, 1)`
|
||||
|
|
||||
= note: #[deny(manual_swap)] implied by #[deny(clippy)]
|
||||
|
||||
error: this looks like you are swapping `a` and `b` manually
|
||||
--> $DIR/swap.rs:60:7
|
||||
--> $DIR/swap.rs:47:7
|
||||
|
|
||||
60 | ; let t = a;
|
||||
47 | ; let t = a;
|
||||
| _______^
|
||||
61 | | a = b;
|
||||
62 | | b = t;
|
||||
48 | | a = b;
|
||||
49 | | b = t;
|
||||
| |_________^ help: try `std::mem::swap(&mut a, &mut b)`
|
||||
|
|
||||
= note: #[deny(manual_swap)] implied by #[deny(clippy)]
|
||||
= note: or maybe you should use `std::mem::replace`?
|
||||
|
||||
error: this looks like you are swapping `c.0` and `a` manually
|
||||
--> $DIR/swap.rs:77:7
|
||||
--> $DIR/swap.rs:56:7
|
||||
|
|
||||
77 | ; let t = c.0;
|
||||
56 | ; let t = c.0;
|
||||
| _______^
|
||||
78 | | c.0 = a;
|
||||
79 | | a = t;
|
||||
57 | | c.0 = a;
|
||||
58 | | a = t;
|
||||
| |_________^ help: try `std::mem::swap(&mut c.0, &mut a)`
|
||||
|
|
||||
= note: #[deny(manual_swap)] implied by #[deny(clippy)]
|
||||
= note: or maybe you should use `std::mem::replace`?
|
||||
|
||||
error: this looks like you are trying to swap `a` and `b`
|
||||
--> $DIR/swap.rs:53:5
|
||||
--> $DIR/swap.rs:44:5
|
||||
|
|
||||
53 | / a = b;
|
||||
54 | | b = a;
|
||||
44 | / a = b;
|
||||
45 | | b = a;
|
||||
| |_________^ help: try `std::mem::swap(&mut a, &mut b)`
|
||||
|
|
||||
= note: #[deny(almost_swapped)] implied by #[deny(clippy)]
|
||||
|
@ -73,10 +73,10 @@ note: lint level defined here
|
|||
= note: or maybe you should use `std::mem::replace`?
|
||||
|
||||
error: this looks like you are trying to swap `c.0` and `a`
|
||||
--> $DIR/swap.rs:70:5
|
||||
--> $DIR/swap.rs:53:5
|
||||
|
|
||||
70 | / c.0 = a;
|
||||
71 | | a = c.0;
|
||||
53 | / c.0 = a;
|
||||
54 | | a = c.0;
|
||||
| |___________^ help: try `std::mem::swap(&mut c.0, &mut a)`
|
||||
|
|
||||
= note: #[deny(almost_swapped)] implied by #[deny(clippy)]
|
||||
|
|
|
@ -17,24 +17,12 @@ fn main() {
|
|||
|
||||
let ref x = 1;
|
||||
|
||||
|
||||
|
||||
|
||||
let ref y: (&_, u8) = (&1, 2);
|
||||
|
||||
|
||||
|
||||
|
||||
let ref z = 1 + 2;
|
||||
|
||||
|
||||
|
||||
|
||||
let ref mut z = 1 + 2;
|
||||
|
||||
|
||||
|
||||
|
||||
let (ref x, _) = (1,2); // okay, not top level
|
||||
println!("The answer is {}.", x);
|
||||
}
|
||||
|
|
|
@ -20,25 +20,25 @@ error: `ref` on an entire `let` pattern is discouraged, take a reference with `&
|
|||
= note: #[deny(toplevel_ref_arg)] implied by #[deny(clippy)]
|
||||
|
||||
error: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead
|
||||
--> $DIR/toplevel_ref_arg.rs:23:7
|
||||
--> $DIR/toplevel_ref_arg.rs:20:7
|
||||
|
|
||||
23 | let ref y: (&_, u8) = (&1, 2);
|
||||
20 | let ref y: (&_, u8) = (&1, 2);
|
||||
| ----^^^^^--------------------- help: try `let y: &(&_, u8) = &(&1, 2);`
|
||||
|
|
||||
= note: #[deny(toplevel_ref_arg)] implied by #[deny(clippy)]
|
||||
|
||||
error: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead
|
||||
--> $DIR/toplevel_ref_arg.rs:28:7
|
||||
--> $DIR/toplevel_ref_arg.rs:22:7
|
||||
|
|
||||
28 | let ref z = 1 + 2;
|
||||
22 | let ref z = 1 + 2;
|
||||
| ----^^^^^--------- help: try `let z = &(1 + 2);`
|
||||
|
|
||||
= note: #[deny(toplevel_ref_arg)] implied by #[deny(clippy)]
|
||||
|
||||
error: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead
|
||||
--> $DIR/toplevel_ref_arg.rs:33:7
|
||||
--> $DIR/toplevel_ref_arg.rs:24:7
|
||||
|
|
||||
33 | let ref mut z = 1 + 2;
|
||||
24 | let ref mut z = 1 + 2;
|
||||
| ----^^^^^^^^^--------- help: try `let z = &mut (1 + 2);`
|
||||
|
|
||||
= note: #[deny(toplevel_ref_arg)] implied by #[deny(clippy)]
|
||||
|
|
|
@ -21,67 +21,36 @@ fn my_vec() -> MyVec<i32> {
|
|||
unsafe fn _generic<'a, T, U: 'a>(t: &'a T) {
|
||||
let _: &'a T = core::intrinsics::transmute(t);
|
||||
|
||||
|
||||
let _: &'a U = core::intrinsics::transmute(t);
|
||||
|
||||
let _: *const T = core::intrinsics::transmute(t);
|
||||
|
||||
|
||||
|
||||
|
||||
let _: *mut T = core::intrinsics::transmute(t);
|
||||
|
||||
|
||||
|
||||
|
||||
let _: *const U = core::intrinsics::transmute(t);
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
#[deny(transmute_ptr_to_ref)]
|
||||
unsafe fn _ptr_to_ref<T, U>(p: *const T, m: *mut T, o: *const U, om: *mut U) {
|
||||
let _: &T = std::mem::transmute(p);
|
||||
|
||||
|
||||
|
||||
let _: &T = &*p;
|
||||
|
||||
let _: &mut T = std::mem::transmute(m);
|
||||
|
||||
|
||||
|
||||
let _: &mut T = &mut *m;
|
||||
|
||||
let _: &T = std::mem::transmute(m);
|
||||
|
||||
|
||||
|
||||
let _: &T = &*m;
|
||||
|
||||
let _: &mut T = std::mem::transmute(p as *mut T);
|
||||
|
||||
|
||||
|
||||
let _ = &mut *(p as *mut T);
|
||||
|
||||
let _: &T = std::mem::transmute(o);
|
||||
|
||||
|
||||
|
||||
let _: &T = &*(o as *const T);
|
||||
|
||||
let _: &mut T = std::mem::transmute(om);
|
||||
|
||||
|
||||
|
||||
let _: &mut T = &mut *(om as *mut T);
|
||||
|
||||
let _: &T = std::mem::transmute(om);
|
||||
|
||||
|
||||
|
||||
let _: &T = &*(om as *const T);
|
||||
}
|
||||
|
||||
|
@ -94,20 +63,11 @@ fn issue1231() {
|
|||
let raw = 42 as *const i32;
|
||||
let _: &Foo<u8> = unsafe { std::mem::transmute::<_, &Foo<_>>(raw) };
|
||||
|
||||
|
||||
|
||||
|
||||
let _: &Foo<&u8> = unsafe { std::mem::transmute::<_, &Foo<&_>>(raw) };
|
||||
|
||||
|
||||
|
||||
|
||||
type Bar<'a> = &'a u8;
|
||||
let raw = 42 as *const i32;
|
||||
unsafe { std::mem::transmute::<_, Bar>(raw) };
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
#[deny(useless_transmute)]
|
||||
|
@ -115,19 +75,14 @@ fn useless() {
|
|||
unsafe {
|
||||
let _: Vec<i32> = core::intrinsics::transmute(my_vec());
|
||||
|
||||
|
||||
let _: Vec<i32> = core::mem::transmute(my_vec());
|
||||
|
||||
|
||||
let _: Vec<i32> = std::intrinsics::transmute(my_vec());
|
||||
|
||||
|
||||
let _: Vec<i32> = std::mem::transmute(my_vec());
|
||||
|
||||
|
||||
let _: Vec<i32> = my_transmute(my_vec());
|
||||
|
||||
|
||||
let _: Vec<u32> = core::intrinsics::transmute(my_vec());
|
||||
let _: Vec<u32> = core::mem::transmute(my_vec());
|
||||
let _: Vec<u32> = std::intrinsics::transmute(my_vec());
|
||||
|
@ -136,14 +91,10 @@ fn useless() {
|
|||
|
||||
let _: *const usize = std::mem::transmute(5_isize);
|
||||
|
||||
|
||||
|
||||
let _ = 5_isize as *const usize;
|
||||
|
||||
let _: *const usize = std::mem::transmute(1+1usize);
|
||||
|
||||
|
||||
|
||||
let _ = (1+1_usize) as *const usize;
|
||||
}
|
||||
}
|
||||
|
@ -159,15 +110,11 @@ fn crosspointer() {
|
|||
unsafe {
|
||||
let _: Usize = core::intrinsics::transmute(int_const_ptr);
|
||||
|
||||
|
||||
let _: Usize = core::intrinsics::transmute(int_mut_ptr);
|
||||
|
||||
|
||||
let _: *const Usize = core::intrinsics::transmute(my_int());
|
||||
|
||||
|
||||
let _: *mut Usize = core::intrinsics::transmute(my_int());
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -11,171 +11,171 @@ note: lint level defined here
|
|||
| ^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: transmute from a reference to a pointer
|
||||
--> $DIR/transmute.rs:27:23
|
||||
--> $DIR/transmute.rs:26:23
|
||||
|
|
||||
27 | let _: *const T = core::intrinsics::transmute(t);
|
||||
26 | let _: *const T = core::intrinsics::transmute(t);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try `t as *const T`
|
||||
|
||||
error: transmute from a reference to a pointer
|
||||
--> $DIR/transmute.rs:32:21
|
||||
--> $DIR/transmute.rs:28:21
|
||||
|
|
||||
32 | let _: *mut T = core::intrinsics::transmute(t);
|
||||
28 | let _: *mut T = core::intrinsics::transmute(t);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try `t as *const T as *mut T`
|
||||
|
||||
error: transmute from a reference to a pointer
|
||||
--> $DIR/transmute.rs:37:23
|
||||
--> $DIR/transmute.rs:30:23
|
||||
|
|
||||
37 | let _: *const U = core::intrinsics::transmute(t);
|
||||
30 | let _: *const U = core::intrinsics::transmute(t);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try `t as *const T as *const U`
|
||||
|
||||
error: transmute from a pointer type (`*const T`) to a reference type (`&T`)
|
||||
--> $DIR/transmute.rs:45:17
|
||||
--> $DIR/transmute.rs:35:17
|
||||
|
|
||||
45 | let _: &T = std::mem::transmute(p);
|
||||
35 | let _: &T = std::mem::transmute(p);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^ help: try `&*p`
|
||||
|
|
||||
note: lint level defined here
|
||||
--> $DIR/transmute.rs:43:8
|
||||
--> $DIR/transmute.rs:33:8
|
||||
|
|
||||
43 | #[deny(transmute_ptr_to_ref)]
|
||||
33 | #[deny(transmute_ptr_to_ref)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: transmute from a pointer type (`*mut T`) to a reference type (`&mut T`)
|
||||
--> $DIR/transmute.rs:51:21
|
||||
--> $DIR/transmute.rs:38:21
|
||||
|
|
||||
51 | let _: &mut T = std::mem::transmute(m);
|
||||
38 | let _: &mut T = std::mem::transmute(m);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^ help: try `&mut *m`
|
||||
|
||||
error: transmute from a pointer type (`*mut T`) to a reference type (`&T`)
|
||||
--> $DIR/transmute.rs:57:17
|
||||
--> $DIR/transmute.rs:41:17
|
||||
|
|
||||
57 | let _: &T = std::mem::transmute(m);
|
||||
41 | let _: &T = std::mem::transmute(m);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^ help: try `&*m`
|
||||
|
||||
error: transmute from a pointer type (`*mut T`) to a reference type (`&mut T`)
|
||||
--> $DIR/transmute.rs:63:21
|
||||
--> $DIR/transmute.rs:44:21
|
||||
|
|
||||
63 | let _: &mut T = std::mem::transmute(p as *mut T);
|
||||
44 | let _: &mut T = std::mem::transmute(p as *mut T);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try `&mut *(p as *mut T)`
|
||||
|
||||
error: transmute from a pointer type (`*const U`) to a reference type (`&T`)
|
||||
--> $DIR/transmute.rs:69:17
|
||||
--> $DIR/transmute.rs:47:17
|
||||
|
|
||||
69 | let _: &T = std::mem::transmute(o);
|
||||
47 | let _: &T = std::mem::transmute(o);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^ help: try `&*(o as *const T)`
|
||||
|
||||
error: transmute from a pointer type (`*mut U`) to a reference type (`&mut T`)
|
||||
--> $DIR/transmute.rs:75:21
|
||||
--> $DIR/transmute.rs:50:21
|
||||
|
|
||||
75 | let _: &mut T = std::mem::transmute(om);
|
||||
50 | let _: &mut T = std::mem::transmute(om);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^ help: try `&mut *(om as *mut T)`
|
||||
|
||||
error: transmute from a pointer type (`*mut U`) to a reference type (`&T`)
|
||||
--> $DIR/transmute.rs:81:17
|
||||
--> $DIR/transmute.rs:53:17
|
||||
|
|
||||
81 | let _: &T = std::mem::transmute(om);
|
||||
53 | let _: &T = std::mem::transmute(om);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^ help: try `&*(om as *const T)`
|
||||
|
||||
error: transmute from a pointer type (`*const i32`) to a reference type (`&issue1231::Foo<'_, u8>`)
|
||||
--> $DIR/transmute.rs:95:32
|
||||
--> $DIR/transmute.rs:64:32
|
||||
|
|
||||
95 | let _: &Foo<u8> = unsafe { std::mem::transmute::<_, &Foo<_>>(raw) };
|
||||
64 | let _: &Foo<u8> = unsafe { std::mem::transmute::<_, &Foo<_>>(raw) };
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try `&*(raw as *const Foo<_>)`
|
||||
|
|
||||
note: lint level defined here
|
||||
--> $DIR/transmute.rs:88:8
|
||||
--> $DIR/transmute.rs:57:8
|
||||
|
|
||||
88 | #[deny(transmute_ptr_to_ref)]
|
||||
57 | #[deny(transmute_ptr_to_ref)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: transmute from a pointer type (`*const i32`) to a reference type (`&issue1231::Foo<'_, &u8>`)
|
||||
--> $DIR/transmute.rs:100:33
|
||||
|
|
||||
100 | let _: &Foo<&u8> = unsafe { std::mem::transmute::<_, &Foo<&_>>(raw) };
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try `&*(raw as *const Foo<&_>)`
|
||||
--> $DIR/transmute.rs:66:33
|
||||
|
|
||||
66 | let _: &Foo<&u8> = unsafe { std::mem::transmute::<_, &Foo<&_>>(raw) };
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try `&*(raw as *const Foo<&_>)`
|
||||
|
||||
error: transmute from a pointer type (`*const i32`) to a reference type (`&u8`)
|
||||
--> $DIR/transmute.rs:107:14
|
||||
|
|
||||
107 | unsafe { std::mem::transmute::<_, Bar>(raw) };
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try `&*(raw as *const u8)`
|
||||
--> $DIR/transmute.rs:70:14
|
||||
|
|
||||
70 | unsafe { std::mem::transmute::<_, Bar>(raw) };
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try `&*(raw as *const u8)`
|
||||
|
||||
error: transmute from a type (`std::vec::Vec<i32>`) to itself
|
||||
--> $DIR/transmute.rs:116:27
|
||||
|
|
||||
116 | let _: Vec<i32> = core::intrinsics::transmute(my_vec());
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
--> $DIR/transmute.rs:76:27
|
||||
|
|
||||
76 | let _: Vec<i32> = core::intrinsics::transmute(my_vec());
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
note: lint level defined here
|
||||
--> $DIR/transmute.rs:113:8
|
||||
|
|
||||
113 | #[deny(useless_transmute)]
|
||||
| ^^^^^^^^^^^^^^^^^
|
||||
--> $DIR/transmute.rs:73:8
|
||||
|
|
||||
73 | #[deny(useless_transmute)]
|
||||
| ^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: transmute from a type (`std::vec::Vec<i32>`) to itself
|
||||
--> $DIR/transmute.rs:119:27
|
||||
|
|
||||
119 | let _: Vec<i32> = core::mem::transmute(my_vec());
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
--> $DIR/transmute.rs:78:27
|
||||
|
|
||||
78 | let _: Vec<i32> = core::mem::transmute(my_vec());
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: transmute from a type (`std::vec::Vec<i32>`) to itself
|
||||
--> $DIR/transmute.rs:122:27
|
||||
|
|
||||
122 | let _: Vec<i32> = std::intrinsics::transmute(my_vec());
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
--> $DIR/transmute.rs:80:27
|
||||
|
|
||||
80 | let _: Vec<i32> = std::intrinsics::transmute(my_vec());
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: transmute from a type (`std::vec::Vec<i32>`) to itself
|
||||
--> $DIR/transmute.rs:125:27
|
||||
|
|
||||
125 | let _: Vec<i32> = std::mem::transmute(my_vec());
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
--> $DIR/transmute.rs:82:27
|
||||
|
|
||||
82 | let _: Vec<i32> = std::mem::transmute(my_vec());
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: transmute from a type (`std::vec::Vec<i32>`) to itself
|
||||
--> $DIR/transmute.rs:128:27
|
||||
|
|
||||
128 | let _: Vec<i32> = my_transmute(my_vec());
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^
|
||||
--> $DIR/transmute.rs:84:27
|
||||
|
|
||||
84 | let _: Vec<i32> = my_transmute(my_vec());
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: transmute from an integer to a pointer
|
||||
--> $DIR/transmute.rs:137:31
|
||||
|
|
||||
137 | let _: *const usize = std::mem::transmute(5_isize);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try `5_isize as *const usize`
|
||||
--> $DIR/transmute.rs:92:31
|
||||
|
|
||||
92 | let _: *const usize = std::mem::transmute(5_isize);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try `5_isize as *const usize`
|
||||
|
||||
error: transmute from an integer to a pointer
|
||||
--> $DIR/transmute.rs:143:31
|
||||
|
|
||||
143 | let _: *const usize = std::mem::transmute(1+1usize);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try `(1+1usize) as *const usize`
|
||||
--> $DIR/transmute.rs:96:31
|
||||
|
|
||||
96 | let _: *const usize = std::mem::transmute(1+1usize);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try `(1+1usize) as *const usize`
|
||||
|
||||
error: transmute from a type (`*const Usize`) to the type that it points to (`Usize`)
|
||||
--> $DIR/transmute.rs:160:24
|
||||
--> $DIR/transmute.rs:111:24
|
||||
|
|
||||
160 | let _: Usize = core::intrinsics::transmute(int_const_ptr);
|
||||
111 | let _: Usize = core::intrinsics::transmute(int_const_ptr);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
note: lint level defined here
|
||||
--> $DIR/transmute.rs:153:8
|
||||
--> $DIR/transmute.rs:104:8
|
||||
|
|
||||
153 | #[deny(crosspointer_transmute)]
|
||||
104 | #[deny(crosspointer_transmute)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: transmute from a type (`*mut Usize`) to the type that it points to (`Usize`)
|
||||
--> $DIR/transmute.rs:163:24
|
||||
--> $DIR/transmute.rs:113:24
|
||||
|
|
||||
163 | let _: Usize = core::intrinsics::transmute(int_mut_ptr);
|
||||
113 | let _: Usize = core::intrinsics::transmute(int_mut_ptr);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: transmute from a type (`Usize`) to a pointer to that type (`*const Usize`)
|
||||
--> $DIR/transmute.rs:166:31
|
||||
--> $DIR/transmute.rs:115:31
|
||||
|
|
||||
166 | let _: *const Usize = core::intrinsics::transmute(my_int());
|
||||
115 | let _: *const Usize = core::intrinsics::transmute(my_int());
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: transmute from a type (`Usize`) to a pointer to that type (`*mut Usize`)
|
||||
--> $DIR/transmute.rs:169:29
|
||||
--> $DIR/transmute.rs:117:29
|
||||
|
|
||||
169 | let _: *mut Usize = core::intrinsics::transmute(my_int());
|
||||
117 | let _: *mut Usize = core::intrinsics::transmute(my_int());
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: aborting due to 25 previous errors
|
||||
|
|
|
@ -7,14 +7,10 @@ fn main() {
|
|||
unsafe {
|
||||
let _: *const usize = std::mem::transmute(6.0f32);
|
||||
|
||||
|
||||
let _: *mut usize = std::mem::transmute(6.0f32);
|
||||
|
||||
|
||||
let _: *const usize = std::mem::transmute('x');
|
||||
|
||||
|
||||
let _: *mut usize = std::mem::transmute('x');
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -8,8 +8,6 @@ fn main() {
|
|||
unsafe {
|
||||
let _: *const usize = std::mem::transmute(6.0f64);
|
||||
|
||||
|
||||
let _: *mut usize = std::mem::transmute(6.0f64);
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -11,9 +11,9 @@ note: lint level defined here
|
|||
| ^^^^^^^^^^^^^^^
|
||||
|
||||
error: transmute from a `f64` to a pointer
|
||||
--> $DIR/transmute_64bit.rs:12:29
|
||||
--> $DIR/transmute_64bit.rs:11:29
|
||||
|
|
||||
12 | let _: *mut usize = std::mem::transmute(6.0f64);
|
||||
11 | let _: *mut usize = std::mem::transmute(6.0f64);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue