mirror of
https://github.com/rust-lang/rust-clippy
synced 2024-11-14 17:07:17 +00:00
Auto merge of #9601 - evantypanski:et/issue9575, r=Manishearth
[`match_single_binding`] Add curlies for more cases to fix suggestion causes error Fixes #9575 changelog: [`match_single_binding`]: Add curlies for scrutinees with side effects for more cases
This commit is contained in:
commit
36901992b9
4 changed files with 57 additions and 10 deletions
|
@ -58,6 +58,7 @@ pub(crate) fn check<'a>(cx: &LateContext<'a>, ex: &Expr<'a>, arms: &[Arm<'_>], e
|
|||
&snippet_body,
|
||||
&mut applicability,
|
||||
Some(span),
|
||||
true,
|
||||
);
|
||||
|
||||
span_lint_and_sugg(
|
||||
|
@ -90,6 +91,7 @@ pub(crate) fn check<'a>(cx: &LateContext<'a>, ex: &Expr<'a>, arms: &[Arm<'_>], e
|
|||
&snippet_body,
|
||||
&mut applicability,
|
||||
None,
|
||||
true,
|
||||
);
|
||||
(expr.span, sugg)
|
||||
},
|
||||
|
@ -107,10 +109,14 @@ pub(crate) fn check<'a>(cx: &LateContext<'a>, ex: &Expr<'a>, arms: &[Arm<'_>], e
|
|||
},
|
||||
PatKind::Wild => {
|
||||
if ex.can_have_side_effects() {
|
||||
let indent = " ".repeat(indent_of(cx, expr.span).unwrap_or(0));
|
||||
let sugg = format!(
|
||||
"{};\n{indent}{snippet_body}",
|
||||
snippet_with_applicability(cx, ex.span, "..", &mut applicability)
|
||||
let sugg = sugg_with_curlies(
|
||||
cx,
|
||||
(ex, expr),
|
||||
(bind_names, matched_vars),
|
||||
&snippet_body,
|
||||
&mut applicability,
|
||||
None,
|
||||
false,
|
||||
);
|
||||
|
||||
span_lint_and_sugg(
|
||||
|
@ -169,6 +175,7 @@ fn sugg_with_curlies<'a>(
|
|||
snippet_body: &str,
|
||||
applicability: &mut Applicability,
|
||||
assignment: Option<Span>,
|
||||
needs_var_binding: bool,
|
||||
) -> String {
|
||||
let mut indent = " ".repeat(indent_of(cx, ex.span).unwrap_or(0));
|
||||
|
||||
|
@ -200,9 +207,15 @@ fn sugg_with_curlies<'a>(
|
|||
s
|
||||
});
|
||||
|
||||
format!(
|
||||
"{cbrace_start}let {} = {};\n{indent}{assignment_str}{snippet_body}{cbrace_end}",
|
||||
snippet_with_applicability(cx, bind_names, "..", applicability),
|
||||
snippet_with_applicability(cx, matched_vars, "..", applicability)
|
||||
)
|
||||
let scrutinee = if needs_var_binding {
|
||||
format!(
|
||||
"let {} = {}",
|
||||
snippet_with_applicability(cx, bind_names, "..", applicability),
|
||||
snippet_with_applicability(cx, matched_vars, "..", applicability)
|
||||
)
|
||||
} else {
|
||||
snippet_with_applicability(cx, matched_vars, "..", applicability).to_string()
|
||||
};
|
||||
|
||||
format!("{cbrace_start}{scrutinee};\n{indent}{assignment_str}{snippet_body}{cbrace_end}")
|
||||
}
|
||||
|
|
|
@ -124,3 +124,12 @@ fn issue_8723() {
|
|||
|
||||
let _ = val;
|
||||
}
|
||||
|
||||
#[allow(dead_code)]
|
||||
fn issue_9575() {
|
||||
fn side_effects() {}
|
||||
let _ = || {
|
||||
side_effects();
|
||||
println!("Needs curlies");
|
||||
};
|
||||
}
|
||||
|
|
|
@ -140,3 +140,11 @@ fn issue_8723() {
|
|||
|
||||
let _ = val;
|
||||
}
|
||||
|
||||
#[allow(dead_code)]
|
||||
fn issue_9575() {
|
||||
fn side_effects() {}
|
||||
let _ = || match side_effects() {
|
||||
_ => println!("Needs curlies"),
|
||||
};
|
||||
}
|
||||
|
|
|
@ -196,5 +196,22 @@ LL + suf
|
|||
LL ~ };
|
||||
|
|
||||
|
||||
error: aborting due to 13 previous errors
|
||||
error: this match could be replaced by its scrutinee and body
|
||||
--> $DIR/match_single_binding.rs:147:16
|
||||
|
|
||||
LL | let _ = || match side_effects() {
|
||||
| ________________^
|
||||
LL | | _ => println!("Needs curlies"),
|
||||
LL | | };
|
||||
| |_____^
|
||||
|
|
||||
help: consider using the scrutinee and body instead
|
||||
|
|
||||
LL ~ let _ = || {
|
||||
LL + side_effects();
|
||||
LL + println!("Needs curlies");
|
||||
LL ~ };
|
||||
|
|
||||
|
||||
error: aborting due to 14 previous errors
|
||||
|
||||
|
|
Loading…
Reference in a new issue