@@ -75,38 +75,36 @@ impl<'tcx> LateLintPass<'tcx> for NoopMethodCall {
7575            _ => return , 
7676        } ; 
7777        // (Re)check that it implements the noop diagnostic. 
78-         for  s in  [ sym:: noop_method_clone,  sym:: noop_method_deref,  sym:: noop_method_borrow] . iter ( )  { 
79-             if  cx. tcx . is_diagnostic_item ( * s,  i. def_id ( ) )  { 
80-                 let  method = & call. ident . name ; 
81-                 let  receiver = & elements[ 0 ] ; 
82-                 let  receiver_ty = cx. typeck_results ( ) . expr_ty ( receiver) ; 
83-                 let  expr_ty = cx. typeck_results ( ) . expr_ty_adjusted ( expr) ; 
84-                 if  receiver_ty != expr_ty { 
85-                     // This lint will only trigger if the receiver type and resulting expression \ 
86-                     // type are the same, implying that the method call is unnecessary. 
87-                     return ; 
88-                 } 
89-                 let  expr_span = expr. span ; 
90-                 let  note = format ! ( 
91-                     "the type `{:?}` which `{}` is being called on is the same as \  
92-                       the type returned from `{}`, so the method call does not do \ 
93-                       anything and can be removed", 
94-                     receiver_ty,  method,  method, 
95-                 ) ; 
96- 
97-                 let  span = expr_span. with_lo ( receiver. span . hi ( ) ) ; 
98-                 cx. struct_span_lint ( NOOP_METHOD_CALL ,  span,  |lint| { 
99-                     let  method = & call. ident . name ; 
100-                     let  message = format ! ( 
101-                         "call to `.{}()` on a reference in this situation does nothing" , 
102-                         & method, 
103-                     ) ; 
104-                     lint. build ( & message) 
105-                         . span_label ( span,  "unnecessary method call" ) 
106-                         . note ( & note) 
107-                         . emit ( ) 
108-                 } ) ; 
109-             } 
78+         let  Some ( name)  = cx. tcx . get_diagnostic_name ( i. def_id ( ) )  else  {  return  } ; 
79+         if  !matches ! ( 
80+             name, 
81+             sym:: noop_method_borrow | sym:: noop_method_clone | sym:: noop_method_deref
82+         )  { 
83+             return ; 
11084        } 
85+         let  method = & call. ident . name ; 
86+         let  receiver = & elements[ 0 ] ; 
87+         let  receiver_ty = cx. typeck_results ( ) . expr_ty ( receiver) ; 
88+         let  expr_ty = cx. typeck_results ( ) . expr_ty_adjusted ( expr) ; 
89+         if  receiver_ty != expr_ty { 
90+             // This lint will only trigger if the receiver type and resulting expression \ 
91+             // type are the same, implying that the method call is unnecessary. 
92+             return ; 
93+         } 
94+         let  expr_span = expr. span ; 
95+         let  note = format ! ( 
96+             "the type `{:?}` which `{}` is being called on is the same as \  
97+               the type returned from `{}`, so the method call does not do \ 
98+               anything and can be removed", 
99+             receiver_ty,  method,  method, 
100+         ) ; 
101+ 
102+         let  span = expr_span. with_lo ( receiver. span . hi ( ) ) ; 
103+         cx. struct_span_lint ( NOOP_METHOD_CALL ,  span,  |lint| { 
104+             let  method = & call. ident . name ; 
105+             let  message =
106+                 format ! ( "call to `.{}()` on a reference in this situation does nothing" ,  & method, ) ; 
107+             lint. build ( & message) . span_label ( span,  "unnecessary method call" ) . note ( & note) . emit ( ) 
108+         } ) ; 
111109    } 
112110} 
0 commit comments