mirror of
https://github.com/rust-lang/rust.git
synced 2025-04-12 03:56:48 +00:00
Use span_suggestion
for WHILE_LET_ON_ITERATOR
This commit is contained in:
parent
3df32cc723
commit
dd3fd41a03
@ -290,11 +290,15 @@ impl LateLintPass for LoopsPass {
|
|||||||
!is_iterator_used_after_while_let(cx, iter_expr) {
|
!is_iterator_used_after_while_let(cx, iter_expr) {
|
||||||
let iterator = snippet(cx, method_args[0].span, "_");
|
let iterator = snippet(cx, method_args[0].span, "_");
|
||||||
let loop_var = snippet(cx, pat_args[0].span, "_");
|
let loop_var = snippet(cx, pat_args[0].span, "_");
|
||||||
span_help_and_lint(cx,
|
span_lint_and_then(cx,
|
||||||
WHILE_LET_ON_ITERATOR,
|
WHILE_LET_ON_ITERATOR,
|
||||||
expr.span,
|
expr.span,
|
||||||
"this loop could be written as a `for` loop",
|
"this loop could be written as a `for` loop",
|
||||||
&format!("try\nfor {} in {} {{...}}", loop_var, iterator));
|
|db| {
|
||||||
|
db.span_suggestion(expr.span,
|
||||||
|
"try",
|
||||||
|
format!("for {} in {} {{ .. }}", loop_var, iterator));
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -598,7 +602,7 @@ fn check_for_loop_over_map_kv(cx: &LateContext, pat: &Pat, arg: &Expr, body: &Ex
|
|||||||
|db| {
|
|db| {
|
||||||
db.span_suggestion(expr.span,
|
db.span_suggestion(expr.span,
|
||||||
"use the corresponding method",
|
"use the corresponding method",
|
||||||
format!("for {} in {}.{}() {{...}}",
|
format!("for {} in {}.{}() {{ .. }}",
|
||||||
snippet(cx, *pat_span, ".."),
|
snippet(cx, *pat_span, ".."),
|
||||||
snippet(cx, arg_span, ".."),
|
snippet(cx, arg_span, ".."),
|
||||||
kind));
|
kind));
|
||||||
|
@ -8,15 +8,33 @@ fn main() {
|
|||||||
|
|
||||||
let u: u32 = 42;
|
let u: u32 = 42;
|
||||||
|
|
||||||
u <= 0; //~ERROR this comparison involving the minimum or maximum element for this type contains a case that is always true or always false
|
u <= 0;
|
||||||
u <= Z; //~ERROR this comparison involving
|
//~^ ERROR this comparison involving the minimum or maximum element for this type contains a case that is always true or always false
|
||||||
u < Z; //~ERROR this comparison involving
|
//~| HELP using u == 0 instead
|
||||||
Z >= u; //~ERROR this comparison involving
|
u <= Z;
|
||||||
Z > u; //~ERROR this comparison involving
|
//~^ ERROR this comparison involving
|
||||||
u > std::u32::MAX; //~ERROR this comparison involving
|
//~| HELP using u == Z instead
|
||||||
u >= std::u32::MAX; //~ERROR this comparison involving
|
u < Z;
|
||||||
std::u32::MAX < u; //~ERROR this comparison involving
|
//~^ ERROR this comparison involving
|
||||||
std::u32::MAX <= u; //~ERROR this comparison involving
|
//~| HELP comparison is always false
|
||||||
|
Z >= u;
|
||||||
|
//~^ ERROR this comparison involving
|
||||||
|
//~| HELP using Z == u instead
|
||||||
|
Z > u;
|
||||||
|
//~^ ERROR this comparison involving
|
||||||
|
//~| HELP comparison is always false
|
||||||
|
u > std::u32::MAX;
|
||||||
|
//~^ ERROR this comparison involving
|
||||||
|
//~| HELP comparison is always false
|
||||||
|
u >= std::u32::MAX;
|
||||||
|
//~^ ERROR this comparison involving
|
||||||
|
//~| HELP using u == std::u32::MAX instead
|
||||||
|
std::u32::MAX < u;
|
||||||
|
//~^ ERROR this comparison involving
|
||||||
|
//~| HELP comparison is always false
|
||||||
|
std::u32::MAX <= u;
|
||||||
|
//~^ ERROR this comparison involving
|
||||||
|
//~| HELP using std::u32::MAX == u instead
|
||||||
|
|
||||||
1-1 > u;
|
1-1 > u;
|
||||||
//~^ ERROR this comparison involving
|
//~^ ERROR this comparison involving
|
||||||
@ -29,13 +47,23 @@ fn main() {
|
|||||||
//~| 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
|
//~| 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
|
||||||
|
|
||||||
let i: i8 = 0;
|
let i: i8 = 0;
|
||||||
i < -127 - 1; //~ERROR this comparison involving
|
i < -127 - 1;
|
||||||
std::i8::MAX >= i; //~ERROR this comparison involving
|
//~^ ERROR this comparison involving
|
||||||
3-7 < std::i32::MIN; //~ERROR this comparison involving
|
//~| HELP comparison is always false
|
||||||
|
std::i8::MAX >= i;
|
||||||
|
//~^ ERROR this comparison involving
|
||||||
|
//~| HELP comparison is always true
|
||||||
|
3-7 < std::i32::MIN;
|
||||||
|
//~^ ERROR this comparison involving
|
||||||
|
//~| HELP comparison is always false
|
||||||
|
|
||||||
let b = false;
|
let b = false;
|
||||||
b >= true; //~ERROR this comparison involving
|
b >= true;
|
||||||
false > b; //~ERROR this comparison involving
|
//~^ ERROR this comparison involving
|
||||||
|
//~| HELP using b == true instead
|
||||||
|
false > b;
|
||||||
|
//~^ ERROR this comparison involving
|
||||||
|
//~| HELP comparison is always false
|
||||||
|
|
||||||
u > 0; // ok
|
u > 0; // ok
|
||||||
|
|
||||||
|
@ -52,29 +52,37 @@ fn equality_stuff() {
|
|||||||
let c: i32 = unimplemented!();
|
let c: i32 = unimplemented!();
|
||||||
let d: i32 = unimplemented!();
|
let d: i32 = unimplemented!();
|
||||||
let e: i32 = unimplemented!();
|
let e: i32 = unimplemented!();
|
||||||
let _ = a == b && a != b; //~ ERROR this boolean expression contains a logic bug
|
let _ = a == b && a != b;
|
||||||
|
//~^ ERROR this boolean expression contains a logic bug
|
||||||
//~| HELP this expression can be optimized out
|
//~| HELP this expression can be optimized out
|
||||||
//~| HELP it would look like the following
|
//~| HELP it would look like the following
|
||||||
//~| SUGGESTION let _ = false;
|
//~| SUGGESTION let _ = false;
|
||||||
let _ = a == b && c == 5 && a == b; //~ ERROR this boolean expression can be simplified
|
let _ = a == b && c == 5 && a == b;
|
||||||
//~| HELP try
|
//~^ ERROR this boolean expression can be simplified
|
||||||
//~| SUGGESTION let _ = a == b && c == 5;
|
|
||||||
let _ = a == b && c == 5 && b == a; //~ ERROR this boolean expression can be simplified
|
|
||||||
//~| HELP try
|
//~| HELP try
|
||||||
//~| SUGGESTION let _ = a == b && c == 5;
|
//~| SUGGESTION let _ = a == b && c == 5;
|
||||||
//~| HELP try
|
//~| HELP try
|
||||||
//~| SUGGESTION let _ = !(c != 5 || a != b);
|
//~| SUGGESTION let _ = !(c != 5 || a != b);
|
||||||
let _ = a < b && a >= b; //~ ERROR this boolean expression contains a logic bug
|
let _ = a == b && c == 5 && b == a;
|
||||||
|
//~^ ERROR this boolean expression can be simplified
|
||||||
|
//~| HELP try
|
||||||
|
//~| SUGGESTION let _ = a == b && c == 5;
|
||||||
|
//~| HELP try
|
||||||
|
//~| SUGGESTION let _ = !(c != 5 || a != b);
|
||||||
|
let _ = a < b && a >= b;
|
||||||
|
//~^ ERROR this boolean expression contains a logic bug
|
||||||
//~| HELP this expression can be optimized out
|
//~| HELP this expression can be optimized out
|
||||||
//~| HELP it would look like the following
|
//~| HELP it would look like the following
|
||||||
//~| SUGGESTION let _ = false;
|
//~| SUGGESTION let _ = false;
|
||||||
let _ = a > b && a <= b; //~ ERROR this boolean expression contains a logic bug
|
let _ = a > b && a <= b;
|
||||||
|
//~^ ERROR this boolean expression contains a logic bug
|
||||||
//~| HELP this expression can be optimized out
|
//~| HELP this expression can be optimized out
|
||||||
//~| HELP it would look like the following
|
//~| HELP it would look like the following
|
||||||
//~| SUGGESTION let _ = false;
|
//~| SUGGESTION let _ = false;
|
||||||
let _ = a > b && a == b;
|
let _ = a > b && a == b;
|
||||||
|
|
||||||
let _ = a != b || !(a != b || c == d); //~ ERROR this boolean expression can be simplified
|
let _ = a != b || !(a != b || c == d);
|
||||||
|
//~^ ERROR this boolean expression can be simplified
|
||||||
//~| HELP try
|
//~| HELP try
|
||||||
//~| SUGGESTION let _ = c != d || a != b;
|
//~| SUGGESTION let _ = c != d || a != b;
|
||||||
//~| HELP try
|
//~| HELP try
|
||||||
|
@ -5,13 +5,19 @@
|
|||||||
fn main() {
|
fn main() {
|
||||||
let x = "hello";
|
let x = "hello";
|
||||||
let y = "world";
|
let y = "world";
|
||||||
if x == "hello" { //~ERROR this if statement can be collapsed
|
if x == "hello" {
|
||||||
|
//~^ ERROR this if statement can be collapsed
|
||||||
|
//~| HELP try
|
||||||
|
//~| SUGGESTION if x == "hello" && y == "world" {
|
||||||
if y == "world" {
|
if y == "world" {
|
||||||
println!("Hello world!");
|
println!("Hello world!");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if x == "hello" || x == "world" { //~ERROR this if statement can be collapsed
|
if x == "hello" || x == "world" {
|
||||||
|
//~^ ERROR this if statement can be collapsed
|
||||||
|
//~| HELP try
|
||||||
|
//~| SUGGESTION if (x == "hello" || x == "world") && (y == "world" || y == "hello") {
|
||||||
if y == "world" || y == "hello" {
|
if y == "world" || y == "hello" {
|
||||||
println!("Hello world!");
|
println!("Hello world!");
|
||||||
}
|
}
|
||||||
|
@ -200,11 +200,17 @@ fn main() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// testing that the empty range lint folds constants
|
// testing that the empty range lint folds constants
|
||||||
for i in 10..5+4 { //~ERROR this range is empty so this for loop will never run
|
for i in 10..5+4 {
|
||||||
|
//~^ ERROR this range is empty so this for loop will never run
|
||||||
|
//~| HELP if you are attempting to iterate over this range in reverse
|
||||||
|
//~| SUGGESTION for i in (5+4..10).rev() {
|
||||||
println!("{}", i);
|
println!("{}", i);
|
||||||
}
|
}
|
||||||
|
|
||||||
for i in (5+2)..(3-1) { //~ERROR this range is empty so this for loop will never run
|
for i in (5+2)..(3-1) {
|
||||||
|
//~^ ERROR this range is empty so this for loop will never run
|
||||||
|
//~| HELP if you are attempting to iterate over this range in reverse
|
||||||
|
//~| SUGGESTION for i in ((3-1)..(5+2)).rev() {
|
||||||
println!("{}", i);
|
println!("{}", i);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -100,28 +100,43 @@ fn single_match_know_enum() {
|
|||||||
fn match_bool() {
|
fn match_bool() {
|
||||||
let test: bool = true;
|
let test: bool = true;
|
||||||
|
|
||||||
match test { //~ ERROR you seem to be trying to match on a boolean expression
|
match test {
|
||||||
|
//~^ ERROR you seem to be trying to match on a boolean expression
|
||||||
|
//~| HELP try
|
||||||
|
//~| SUGGESTION if test { 0 } else { 42 };
|
||||||
true => 0,
|
true => 0,
|
||||||
false => 42,
|
false => 42,
|
||||||
};
|
};
|
||||||
|
|
||||||
let option = 1;
|
let option = 1;
|
||||||
match option == 1 { //~ ERROR you seem to be trying to match on a boolean expression
|
match option == 1 {
|
||||||
|
//~^ ERROR you seem to be trying to match on a boolean expression
|
||||||
|
//~| HELP try
|
||||||
|
//~| SUGGESTION if option == 1 { 1 } else { 0 };
|
||||||
true => 1,
|
true => 1,
|
||||||
false => 0,
|
false => 0,
|
||||||
};
|
};
|
||||||
|
|
||||||
match test { //~ ERROR you seem to be trying to match on a boolean expression
|
match test {
|
||||||
|
//~^ ERROR you seem to be trying to match on a boolean expression
|
||||||
|
//~| HELP try
|
||||||
|
//~^^ SUGGESTION if !test { println!("Noooo!"); };
|
||||||
true => (),
|
true => (),
|
||||||
false => { println!("Noooo!"); }
|
false => { println!("Noooo!"); }
|
||||||
};
|
};
|
||||||
|
|
||||||
match test { //~ ERROR you seem to be trying to match on a boolean expression
|
match test {
|
||||||
|
//~^ ERROR you seem to be trying to match on a boolean expression
|
||||||
|
//~| HELP try
|
||||||
|
//~^^ SUGGESTION if !test { println!("Noooo!"); };
|
||||||
false => { println!("Noooo!"); }
|
false => { println!("Noooo!"); }
|
||||||
_ => (),
|
_ => (),
|
||||||
};
|
};
|
||||||
|
|
||||||
match test { //~ ERROR you seem to be trying to match on a boolean expression
|
match test {
|
||||||
|
//~^ ERROR you seem to be trying to match on a boolean expression
|
||||||
|
//~| HELP try
|
||||||
|
//~| SUGGESTION if test { println!("Yes!"); } else { println!("Noooo!"); };
|
||||||
false => { println!("Noooo!"); }
|
false => { println!("Noooo!"); }
|
||||||
true => { println!("Yes!"); }
|
true => { println!("Yes!"); }
|
||||||
};
|
};
|
||||||
|
@ -40,5 +40,4 @@ fn main() {
|
|||||||
|
|
||||||
let mut z = mut_ptr!(&mut 3u32);
|
let mut z = mut_ptr!(&mut 3u32);
|
||||||
//~^ NOTE in this expansion of mut_ptr!
|
//~^ NOTE in this expansion of mut_ptr!
|
||||||
//~| NOTE in this expansion of mut_ptr!
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user