mirror of
https://github.com/rust-lang/rust.git
synced 2025-05-14 02:49:40 +00:00
handle match auto-deref
This commit is contained in:
parent
5b4316377b
commit
5fe608fb31
@ -865,6 +865,41 @@ mod tests {
|
||||
check_no_diagnostic(content);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn enum_ref_missing_arms() {
|
||||
let content = r"
|
||||
enum Either {
|
||||
A,
|
||||
B,
|
||||
}
|
||||
fn test_fn() {
|
||||
match &Either::B {
|
||||
Either::A => {},
|
||||
}
|
||||
}
|
||||
";
|
||||
|
||||
check_diagnostic_with_no_fix(content);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn enum_ref_no_diagnostic() {
|
||||
let content = r"
|
||||
enum Either {
|
||||
A,
|
||||
B,
|
||||
}
|
||||
fn test_fn() {
|
||||
match &Either::B {
|
||||
Either::A => {},
|
||||
Either::B => {},
|
||||
}
|
||||
}
|
||||
";
|
||||
|
||||
check_no_diagnostic(content);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn enum_containing_bool_no_arms() {
|
||||
let content = r"
|
||||
|
@ -93,7 +93,16 @@ impl<'a, 'b> ExprValidator<'a, 'b> {
|
||||
// of the match expression. If we had a InvalidMatchArmPattern
|
||||
// diagnostic or similar we could raise that in an else
|
||||
// block here.
|
||||
if pat_ty == match_expr_ty {
|
||||
//
|
||||
// When comparing the types, we also have to consider that rustc
|
||||
// will automatically de-reference the match expression type if
|
||||
// necessary.
|
||||
if pat_ty == match_expr_ty
|
||||
|| match_expr_ty
|
||||
.as_reference()
|
||||
.map(|(match_expr_ty, _)| match_expr_ty == pat_ty)
|
||||
.unwrap_or(false)
|
||||
{
|
||||
// If we had a NotUsefulMatchArm diagnostic, we could
|
||||
// check the usefulness of each pattern as we added it
|
||||
// to the matrix here.
|
||||
|
Loading…
Reference in New Issue
Block a user