manual_let_else: only add () around PatKind::Or at the top level
At the top level, () are required, but on the levels below they are not.
This commit is contained in:
parent
652b4c720d
commit
0a7366897d
@ -159,7 +159,7 @@ fn emit_manual_let_else(
|
||||
} else {
|
||||
format!("{{ {sn_else} }}")
|
||||
};
|
||||
let sn_bl = replace_in_pattern(cx, span, local, pat, &mut app);
|
||||
let sn_bl = replace_in_pattern(cx, span, local, pat, &mut app, true);
|
||||
let sugg = format!("let {sn_bl} = {sn_expr} else {else_bl};");
|
||||
diag.span_suggestion(span, "consider writing", sugg, app);
|
||||
},
|
||||
@ -173,6 +173,7 @@ fn replace_in_pattern(
|
||||
local: &Pat<'_>,
|
||||
pat: &Pat<'_>,
|
||||
app: &mut Applicability,
|
||||
top_level: bool,
|
||||
) -> String {
|
||||
let mut bindings_count = 0;
|
||||
pat.each_binding_or_first(&mut |_, _, _, _| bindings_count += 1);
|
||||
@ -191,16 +192,20 @@ fn replace_in_pattern(
|
||||
PatKind::Or(pats) => {
|
||||
let patterns = pats
|
||||
.iter()
|
||||
.map(|pat| replace_in_pattern(cx, span, local, pat, app))
|
||||
.map(|pat| replace_in_pattern(cx, span, local, pat, app, false))
|
||||
.collect::<Vec<_>>();
|
||||
let or_pat = patterns.join(" | ");
|
||||
return format!("({or_pat})");
|
||||
if top_level {
|
||||
return format!("({or_pat})");
|
||||
} else {
|
||||
return or_pat;
|
||||
}
|
||||
},
|
||||
// Replace the variable name iff `TupleStruct` has one argument like `Variant(v)`.
|
||||
PatKind::TupleStruct(ref w, args, dot_dot_pos) => {
|
||||
let mut args = args
|
||||
.iter()
|
||||
.map(|pat| replace_in_pattern(cx, span, local, pat, app))
|
||||
.map(|pat| replace_in_pattern(cx, span, local, pat, app, false))
|
||||
.collect::<Vec<_>>();
|
||||
if let Some(pos) = dot_dot_pos.as_opt_usize() {
|
||||
args.insert(pos, "..".to_owned());
|
||||
|
@ -72,6 +72,11 @@ fn fire() {
|
||||
_ => return,
|
||||
};
|
||||
|
||||
let _value = match Some(build_enum()) {
|
||||
Some(Variant::Bar(v) | Variant::Baz(v)) => v,
|
||||
_ => return,
|
||||
};
|
||||
|
||||
let data = [1_u8, 2, 3, 4, 0, 0, 0, 0];
|
||||
let data = match data.as_slice() {
|
||||
[data @ .., 0, 0, 0, 0] | [data @ .., 0, 0] | [data @ .., 0] => data,
|
||||
|
@ -64,7 +64,16 @@ LL | | };
|
||||
| |______^ help: consider writing: `let (Variant::Bar(_value) | Variant::Baz(_value)) = f else { return };`
|
||||
|
||||
error: this could be rewritten as `let...else`
|
||||
--> $DIR/manual_let_else_match.rs:76:5
|
||||
--> $DIR/manual_let_else_match.rs:75:5
|
||||
|
|
||||
LL | / let _value = match Some(build_enum()) {
|
||||
LL | | Some(Variant::Bar(v) | Variant::Baz(v)) => v,
|
||||
LL | | _ => return,
|
||||
LL | | };
|
||||
| |______^ help: consider writing: `let Some(Variant::Bar(_value) | Variant::Baz(_value)) = Some(build_enum()) else { return };`
|
||||
|
||||
error: this could be rewritten as `let...else`
|
||||
--> $DIR/manual_let_else_match.rs:81:5
|
||||
|
|
||||
LL | / let data = match data.as_slice() {
|
||||
LL | | [data @ .., 0, 0, 0, 0] | [data @ .., 0, 0] | [data @ .., 0] => data,
|
||||
@ -72,5 +81,5 @@ 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 8 previous errors
|
||||
error: aborting due to 9 previous errors
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user