Auto merge of #11580 - y21:issue11579, r=Jarcho
[`manual_let_else`]: only omit block if span is from same ctxt Fixes #11579. The lint already had logic for omitting a block in `else` if a block is already present, however this didn't handle the case where the block is from a different expansion/syntax context. E.g. ```rs macro_rules! panic_in_block { () => { { panic!() } } } let _ = match Some(1) { Some(v) => v, _ => panic_in_block!() }; ``` It would see this in its expanded form as `_ => { panic!() }` and think it doesn't have to include a block in its suggestion because it is already there, however that's not true if it's from a different expansion like in this case. changelog: [`manual_let_else`]: only omit block in suggestion if the block is from the same expansion
This commit is contained in:
commit
b00236d7f0
@ -136,9 +136,9 @@ fn emit_manual_let_else(
|
||||
// for this to be machine applicable.
|
||||
let mut app = Applicability::HasPlaceholders;
|
||||
let (sn_expr, _) = snippet_with_context(cx, expr.span, span.ctxt(), "", &mut app);
|
||||
let (sn_else, _) = snippet_with_context(cx, else_body.span, span.ctxt(), "", &mut app);
|
||||
let (sn_else, else_is_mac_call) = snippet_with_context(cx, else_body.span, span.ctxt(), "", &mut app);
|
||||
|
||||
let else_bl = if matches!(else_body.kind, ExprKind::Block(..)) {
|
||||
let else_bl = if matches!(else_body.kind, ExprKind::Block(..)) && !else_is_mac_call {
|
||||
sn_else.into_owned()
|
||||
} else {
|
||||
format!("{{ {sn_else} }}")
|
||||
|
@ -133,3 +133,7 @@ fn not_fire() {
|
||||
[data @ .., 0, 0, 0, 0] | [data @ .., 0, 0] | [data @ ..] => data,
|
||||
};
|
||||
}
|
||||
|
||||
fn issue11579() {
|
||||
let Some(msg) = Some("hi") else { unreachable!("can't happen") };
|
||||
}
|
||||
|
@ -170,3 +170,11 @@ fn not_fire() {
|
||||
[data @ .., 0, 0, 0, 0] | [data @ .., 0, 0] | [data @ ..] => data,
|
||||
};
|
||||
}
|
||||
|
||||
fn issue11579() {
|
||||
let msg = match Some("hi") {
|
||||
//~^ ERROR: this could be rewritten as `let...else`
|
||||
Some(m) => m,
|
||||
_ => unreachable!("can't happen"),
|
||||
};
|
||||
}
|
||||
|
@ -92,5 +92,15 @@ LL | | _ => return,
|
||||
LL | | };
|
||||
| |______^ help: consider writing: `let ([data @ .., 0, 0, 0, 0] | [data @ .., 0, 0] | [data @ .., 0]) = data.as_slice() else { return };`
|
||||
|
||||
error: aborting due to 9 previous errors
|
||||
error: this could be rewritten as `let...else`
|
||||
--> $DIR/manual_let_else_match.rs:175:5
|
||||
|
|
||||
LL | / let msg = match Some("hi") {
|
||||
LL | |
|
||||
LL | | Some(m) => m,
|
||||
LL | | _ => unreachable!("can't happen"),
|
||||
LL | | };
|
||||
| |______^ help: consider writing: `let Some(msg) = Some("hi") else { unreachable!("can't happen") };`
|
||||
|
||||
error: aborting due to 10 previous errors
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user