@@ -68,31 +68,47 @@ impl<'tcx> LateLintPass<'tcx> for PatternEquality {
68
68
fn check_expr ( & mut self , cx : & LateContext < ' tcx > , expr : & ' tcx Expr < ' tcx > ) {
69
69
if !in_external_macro ( cx. sess ( ) , expr. span )
70
70
&& let ExprKind :: Let ( let_expr) = expr. kind
71
- && unary_pattern ( let_expr. pat )
72
- && let exp_ty = cx. typeck_results ( ) . expr_ty ( let_expr. init )
73
- && let pat_ty = cx. typeck_results ( ) . pat_ty ( let_expr. pat )
74
- && is_structural_partial_eq ( cx, exp_ty, pat_ty) {
71
+ && unary_pattern ( let_expr. pat ) {
72
+ let exp_ty = cx. typeck_results ( ) . expr_ty ( let_expr. init ) ;
73
+ let pat_ty = cx. typeck_results ( ) . pat_ty ( let_expr. pat ) ;
75
74
let mut applicability = Applicability :: MachineApplicable ;
76
- let pat_str = match let_expr. pat . kind {
77
- PatKind :: Struct ( ..) => format ! (
78
- "({})" ,
79
- snippet_with_context( cx, let_expr. pat. span, expr. span. ctxt( ) , ".." , & mut applicability) . 0 ,
80
- ) ,
81
- _ => snippet_with_context ( cx, let_expr. pat . span , expr. span . ctxt ( ) , ".." , & mut applicability) . 0 . to_string ( ) ,
82
- } ;
83
- span_lint_and_sugg (
84
- cx,
85
- EQUATABLE_IF_LET ,
86
- expr. span ,
87
- "this pattern matching can be expressed using equality" ,
88
- "try" ,
89
- format ! (
90
- "{} == {}" ,
91
- snippet_with_context( cx, let_expr. init. span, expr. span. ctxt( ) , ".." , & mut applicability) . 0 ,
92
- pat_str,
93
- ) ,
94
- applicability,
95
- ) ;
75
+
76
+ if is_structural_partial_eq ( cx, exp_ty, pat_ty) {
77
+ let pat_str = match let_expr. pat . kind {
78
+ PatKind :: Struct ( ..) => format ! (
79
+ "({})" ,
80
+ snippet_with_context( cx, let_expr. pat. span, expr. span. ctxt( ) , ".." , & mut applicability) . 0 ,
81
+ ) ,
82
+ _ => snippet_with_context ( cx, let_expr. pat . span , expr. span . ctxt ( ) , ".." , & mut applicability) . 0 . to_string ( ) ,
83
+ } ;
84
+ span_lint_and_sugg (
85
+ cx,
86
+ EQUATABLE_IF_LET ,
87
+ expr. span ,
88
+ "this pattern matching can be expressed using equality" ,
89
+ "try" ,
90
+ format ! (
91
+ "{} == {}" ,
92
+ snippet_with_context( cx, let_expr. init. span, expr. span. ctxt( ) , ".." , & mut applicability) . 0 ,
93
+ pat_str,
94
+ ) ,
95
+ applicability,
96
+ ) ;
97
+ } else {
98
+ span_lint_and_sugg (
99
+ cx,
100
+ EQUATABLE_IF_LET ,
101
+ expr. span ,
102
+ "this pattern matching can be expressed using `matches!`" ,
103
+ "try" ,
104
+ format ! (
105
+ "matches!({}, {})" ,
106
+ snippet_with_context( cx, let_expr. init. span, expr. span. ctxt( ) , ".." , & mut applicability) . 0 ,
107
+ snippet_with_context( cx, let_expr. pat. span, expr. span. ctxt( ) , ".." , & mut applicability) . 0 ,
108
+ ) ,
109
+ applicability,
110
+ )
111
+ }
96
112
}
97
113
}
98
114
}
0 commit comments