11use clippy_utils:: diagnostics:: span_lint_and_sugg;
22use clippy_utils:: ty:: same_type_and_consts;
3- use clippy_utils:: { meets_msrv, msrvs} ;
3+ use clippy_utils:: { is_from_proc_macro , meets_msrv, msrvs} ;
44use if_chain:: if_chain;
55use rustc_data_structures:: fx:: FxHashSet ;
66use rustc_errors:: Applicability ;
@@ -87,7 +87,7 @@ impl_lint_pass!(UseSelf => [USE_SELF]);
8787const SEGMENTS_MSG : & str = "segments should be composed of at least 1 element" ;
8888
8989impl < ' tcx > LateLintPass < ' tcx > for UseSelf {
90- fn check_item ( & mut self , _cx : & LateContext < ' _ > , item : & Item < ' _ > ) {
90+ fn check_item ( & mut self , cx : & LateContext < ' tcx > , item : & Item < ' tcx > ) {
9191 if matches ! ( item. kind, ItemKind :: OpaqueTy ( _) ) {
9292 // skip over `ItemKind::OpaqueTy` in order to lint `foo() -> impl <..>`
9393 return ;
@@ -103,6 +103,7 @@ impl<'tcx> LateLintPass<'tcx> for UseSelf {
103103 if parameters. as_ref( ) . map_or( true , |params| {
104104 !params. parenthesized && !params. args. iter( ) . any( |arg| matches!( arg, GenericArg :: Lifetime ( _) ) )
105105 } ) ;
106+ if !is_from_proc_macro( cx, item) ; // expensive, should be last check
106107 then {
107108 StackItem :: Check {
108109 impl_id: item. def_id,
@@ -213,9 +214,6 @@ impl<'tcx> LateLintPass<'tcx> for UseSelf {
213214 hir_ty_to_ty( cx. tcx, hir_ty)
214215 } ;
215216 if same_type_and_consts( ty, cx. tcx. type_of( impl_id) ) ;
216- let hir = cx. tcx. hir( ) ;
217- // prevents false positive on `#[derive(serde::Deserialize)]`
218- if !hir. span( hir. get_parent_node( hir_ty. hir_id) ) . in_derive_expansion( ) ;
219217 then {
220218 span_lint( cx, hir_ty. span) ;
221219 }
0 commit comments