@@ -615,85 +615,65 @@ impl<'b, 'a: 'b> FmtVisitor<'a> {
615615 self . push_rewrite ( span, rewrite) ;
616616 }
617617
618- pub ( crate ) fn visit_trait_item ( & mut self , ti : & ast:: AssocItem ) {
619- skip_out_of_file_lines_range_visitor ! ( self , ti. span) ;
618+ fn visit_assoc_item ( & mut self , visitor_kind : & ItemVisitorKind < ' _ > ) {
619+ use ItemVisitorKind :: * ;
620+ // TODO(calebcartwright): Not sure the skip spans are correct
621+ let ( ai, skip_span, assoc_ctxt) = match visitor_kind {
622+ AssocTraitItem ( ai) => ( * ai, ai. span ( ) , visit:: AssocCtxt :: Trait ) ,
623+ AssocImplItem ( ai) => ( * ai, ai. span , visit:: AssocCtxt :: Impl ) ,
624+ _ => unreachable ! ( ) ,
625+ } ;
626+ skip_out_of_file_lines_range_visitor ! ( self , ai. span) ;
620627
621- if self . visit_attrs ( & ti . attrs , ast:: AttrStyle :: Outer ) {
622- self . push_skipped_with_span ( ti . attrs . as_slice ( ) , ti . span ( ) , ti . span ( ) ) ;
628+ if self . visit_attrs ( & ai . attrs , ast:: AttrStyle :: Outer ) {
629+ self . push_skipped_with_span ( & ai . attrs . as_slice ( ) , skip_span , skip_span ) ;
623630 return ;
624631 }
625632
626633 // TODO(calebcartwright): consider enabling box_patterns feature gate
627- match ti. kind {
628- ast:: AssocItemKind :: Const ( ..) => self . visit_static ( & StaticParts :: from_trait_item ( ti) ) ,
629- ast:: AssocItemKind :: Fn ( ref fn_kind) => {
634+ match ( & ai. kind , visitor_kind) {
635+ ( ast:: AssocItemKind :: Const ( ..) , AssocTraitItem ( _) ) => {
636+ self . visit_static ( & StaticParts :: from_trait_item ( & ai) )
637+ }
638+ ( ast:: AssocItemKind :: Const ( ..) , AssocImplItem ( _) ) => {
639+ self . visit_static ( & StaticParts :: from_impl_item ( & ai) )
640+ }
641+ ( ast:: AssocItemKind :: Fn ( ref fn_kind) , _) => {
630642 let ast:: FnKind ( defaultness, ref sig, ref generics, ref block) = * * fn_kind;
631643 if let Some ( ref body) = block {
632- let inner_attrs = inner_attributes ( & ti . attrs ) ;
633- let fn_ctxt = visit:: FnCtxt :: Assoc ( visit :: AssocCtxt :: Trait ) ;
644+ let inner_attrs = inner_attributes ( & ai . attrs ) ;
645+ let fn_ctxt = visit:: FnCtxt :: Assoc ( assoc_ctxt ) ;
634646 self . visit_fn (
635- visit:: FnKind :: Fn ( fn_ctxt, ti . ident , sig, & ti . vis , Some ( body) ) ,
647+ visit:: FnKind :: Fn ( fn_ctxt, ai . ident , sig, & ai . vis , Some ( body) ) ,
636648 generics,
637649 & sig. decl ,
638- ti . span ,
650+ ai . span ,
639651 defaultness,
640652 Some ( & inner_attrs) ,
641653 ) ;
642654 } else {
643655 let indent = self . block_indent ;
644656 let rewrite =
645- self . rewrite_required_fn ( indent, ti . ident , sig, & ti . vis , generics, ti . span ) ;
646- self . push_rewrite ( ti . span , rewrite) ;
657+ self . rewrite_required_fn ( indent, ai . ident , sig, & ai . vis , generics, ai . span ) ;
658+ self . push_rewrite ( ai . span , rewrite) ;
647659 }
648660 }
649- ast:: AssocItemKind :: TyAlias ( ref ty_alias_kind) => {
650- use ItemVisitorKind :: AssocTraitItem ;
651- self . visit_ty_alias_kind ( ty_alias_kind, & AssocTraitItem ( & ti) , ti. span ) ;
661+ ( ast:: AssocItemKind :: TyAlias ( ref ty_alias_kind) , _) => {
662+ self . visit_ty_alias_kind ( ty_alias_kind, visitor_kind, ai. span ) ;
652663 }
653- ast:: AssocItemKind :: MacCall ( ref mac) => {
654- self . visit_mac ( mac, Some ( ti . ident ) , MacroPosition :: Item ) ;
664+ ( ast:: AssocItemKind :: MacCall ( ref mac) , _ ) => {
665+ self . visit_mac ( mac, Some ( ai . ident ) , MacroPosition :: Item ) ;
655666 }
667+ _ => unreachable ! ( ) ,
656668 }
657669 }
658670
659- pub ( crate ) fn visit_impl_item ( & mut self , ii : & ast:: AssocItem ) {
660- skip_out_of_file_lines_range_visitor ! ( self , ii. span) ;
661-
662- if self . visit_attrs ( & ii. attrs , ast:: AttrStyle :: Outer ) {
663- self . push_skipped_with_span ( ii. attrs . as_slice ( ) , ii. span , ii. span ) ;
664- return ;
665- }
671+ pub ( crate ) fn visit_trait_item ( & mut self , ti : & ast:: AssocItem ) {
672+ self . visit_assoc_item ( & ItemVisitorKind :: AssocTraitItem ( ti) ) ;
673+ }
666674
667- match ii. kind {
668- ast:: AssocItemKind :: Fn ( ref fn_kind) => {
669- let ast:: FnKind ( defaultness, ref sig, ref generics, ref block) = * * fn_kind;
670- if let Some ( ref body) = block {
671- let inner_attrs = inner_attributes ( & ii. attrs ) ;
672- let fn_ctxt = visit:: FnCtxt :: Assoc ( visit:: AssocCtxt :: Impl ) ;
673- self . visit_fn (
674- visit:: FnKind :: Fn ( fn_ctxt, ii. ident , sig, & ii. vis , Some ( body) ) ,
675- generics,
676- & sig. decl ,
677- ii. span ,
678- defaultness,
679- Some ( & inner_attrs) ,
680- ) ;
681- } else {
682- let indent = self . block_indent ;
683- let rewrite =
684- self . rewrite_required_fn ( indent, ii. ident , sig, & ii. vis , generics, ii. span ) ;
685- self . push_rewrite ( ii. span , rewrite) ;
686- }
687- }
688- ast:: AssocItemKind :: Const ( ..) => self . visit_static ( & StaticParts :: from_impl_item ( ii) ) ,
689- ast:: AssocItemKind :: TyAlias ( ref ty_alias_kind) => {
690- use ItemVisitorKind :: AssocImplItem ;
691- self . visit_ty_alias_kind ( ty_alias_kind, & AssocImplItem ( & ii) , ii. span ) ;
692- }
693- ast:: AssocItemKind :: MacCall ( ref mac) => {
694- self . visit_mac ( mac, Some ( ii. ident ) , MacroPosition :: Item ) ;
695- }
696- }
675+ pub ( crate ) fn visit_impl_item ( & mut self , ii : & ast:: AssocItem ) {
676+ self . visit_assoc_item ( & ItemVisitorKind :: AssocImplItem ( ii) ) ;
697677 }
698678
699679 fn visit_mac ( & mut self , mac : & ast:: MacCall , ident : Option < symbol:: Ident > , pos : MacroPosition ) {
0 commit comments