[single_match
, single_match_else
] fix suggestion when match
irrefutable
This commit is contained in:
parent
b86a202c92
commit
04d70d04fc
@ -91,6 +91,13 @@ fn report_single_pattern(cx: &LateContext<'_>, ex: &Expr<'_>, arm: &Arm<'_>, exp
|
|||||||
format!(" else {}", expr_block(cx, els, ctxt, "..", Some(expr.span), &mut app))
|
format!(" else {}", expr_block(cx, els, ctxt, "..", Some(expr.span), &mut app))
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if snippet(cx, ex.span, "..") == snippet(cx, arm.pat.span, "..") {
|
||||||
|
let msg = "this pattern is irrefutable, `match` is useless";
|
||||||
|
let sugg = expr_block(cx, arm.body, ctxt, "..", Some(expr.span), &mut app);
|
||||||
|
span_lint_and_sugg(cx, lint, expr.span, msg, "try", sugg, app);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
let (pat, pat_ref_count) = peel_hir_pat_refs(arm.pat);
|
let (pat, pat_ref_count) = peel_hir_pat_refs(arm.pat);
|
||||||
let (msg, sugg) = if let PatKind::Path(_) | PatKind::Lit(_) = pat.kind
|
let (msg, sugg) = if let PatKind::Path(_) | PatKind::Lit(_) = pat.kind
|
||||||
&& let (ty, ty_ref_count) = peel_middle_ty_refs(cx.typeck_results().expr_ty(ex))
|
&& let (ty, ty_ref_count) = peel_middle_ty_refs(cx.typeck_results().expr_ty(ex))
|
||||||
|
@ -296,3 +296,21 @@ fn issue11365() {
|
|||||||
|
|
||||||
if let Some(A | B) = &Some(A) { println!() }
|
if let Some(A | B) = &Some(A) { println!() }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Eq, PartialEq)]
|
||||||
|
pub struct Data([u8; 4]);
|
||||||
|
|
||||||
|
const DATA: Data = Data([1, 2, 3, 4]);
|
||||||
|
const CONST_I32: i32 = 1;
|
||||||
|
|
||||||
|
fn irrefutable_match() {
|
||||||
|
{ println!() }
|
||||||
|
|
||||||
|
{ println!() }
|
||||||
|
|
||||||
|
let i = 0;
|
||||||
|
{
|
||||||
|
let a = 1;
|
||||||
|
let b = 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -360,3 +360,30 @@ enum Foo {
|
|||||||
None | Some(_) => {},
|
None | Some(_) => {},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Eq, PartialEq)]
|
||||||
|
pub struct Data([u8; 4]);
|
||||||
|
|
||||||
|
const DATA: Data = Data([1, 2, 3, 4]);
|
||||||
|
const CONST_I32: i32 = 1;
|
||||||
|
|
||||||
|
fn irrefutable_match() {
|
||||||
|
match DATA {
|
||||||
|
DATA => println!(),
|
||||||
|
_ => {},
|
||||||
|
}
|
||||||
|
|
||||||
|
match CONST_I32 {
|
||||||
|
CONST_I32 => println!(),
|
||||||
|
_ => {},
|
||||||
|
}
|
||||||
|
|
||||||
|
let i = 0;
|
||||||
|
match i {
|
||||||
|
i => {
|
||||||
|
let a = 1;
|
||||||
|
let b = 2;
|
||||||
|
},
|
||||||
|
_ => {},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -216,5 +216,43 @@ LL | | None | Some(_) => {},
|
|||||||
LL | | }
|
LL | | }
|
||||||
| |_____^ help: try: `if let Some(A | B) = &Some(A) { println!() }`
|
| |_____^ help: try: `if let Some(A | B) = &Some(A) { println!() }`
|
||||||
|
|
||||||
error: aborting due to 20 previous errors
|
error: this pattern is irrefutable, `match` is useless
|
||||||
|
--> tests/ui/single_match.rs:371:5
|
||||||
|
|
|
||||||
|
LL | / match DATA {
|
||||||
|
LL | | DATA => println!(),
|
||||||
|
LL | | _ => {},
|
||||||
|
LL | | }
|
||||||
|
| |_____^ help: try: `{ println!() }`
|
||||||
|
|
||||||
|
error: this pattern is irrefutable, `match` is useless
|
||||||
|
--> tests/ui/single_match.rs:376:5
|
||||||
|
|
|
||||||
|
LL | / match CONST_I32 {
|
||||||
|
LL | | CONST_I32 => println!(),
|
||||||
|
LL | | _ => {},
|
||||||
|
LL | | }
|
||||||
|
| |_____^ help: try: `{ println!() }`
|
||||||
|
|
||||||
|
error: this pattern is irrefutable, `match` is useless
|
||||||
|
--> tests/ui/single_match.rs:382:5
|
||||||
|
|
|
||||||
|
LL | / match i {
|
||||||
|
LL | | i => {
|
||||||
|
LL | | let a = 1;
|
||||||
|
LL | | let b = 2;
|
||||||
|
LL | | },
|
||||||
|
LL | | _ => {},
|
||||||
|
LL | | }
|
||||||
|
| |_____^
|
||||||
|
|
|
||||||
|
help: try
|
||||||
|
|
|
||||||
|
LL ~ {
|
||||||
|
LL + let a = 1;
|
||||||
|
LL + let b = 2;
|
||||||
|
LL + }
|
||||||
|
|
|
||||||
|
|
||||||
|
error: aborting due to 23 previous errors
|
||||||
|
|
||||||
|
@ -171,3 +171,7 @@ fn issue_10808(bar: Option<i32>) {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn irrefutable_match() -> Option<&'static ExprNode> {
|
||||||
|
{ Some(&NODE) }
|
||||||
|
}
|
||||||
|
@ -199,3 +199,13 @@ fn issue_10808(bar: Option<i32>) {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn irrefutable_match() -> Option<&'static ExprNode> {
|
||||||
|
match ExprNode::Butterflies {
|
||||||
|
ExprNode::Butterflies => Some(&NODE),
|
||||||
|
_ => {
|
||||||
|
let x = 5;
|
||||||
|
None
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -197,5 +197,17 @@ LL + println!("None");
|
|||||||
LL + }
|
LL + }
|
||||||
|
|
|
|
||||||
|
|
||||||
error: aborting due to 9 previous errors
|
error: this pattern is irrefutable, `match` is useless
|
||||||
|
--> tests/ui/single_match_else.rs:204:5
|
||||||
|
|
|
||||||
|
LL | / match ExprNode::Butterflies {
|
||||||
|
LL | | ExprNode::Butterflies => Some(&NODE),
|
||||||
|
LL | | _ => {
|
||||||
|
LL | | let x = 5;
|
||||||
|
LL | | None
|
||||||
|
LL | | },
|
||||||
|
LL | | }
|
||||||
|
| |_____^ help: try: `{ Some(&NODE) }`
|
||||||
|
|
||||||
|
error: aborting due to 10 previous errors
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user