@@ -615,85 +615,65 @@ impl<'b, 'a: 'b> FmtVisitor<'a> {
615
615
self . push_rewrite ( span, rewrite) ;
616
616
}
617
617
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) ;
620
627
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 ) ;
623
630
return ;
624
631
}
625
632
626
633
// 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) , _) => {
630
642
let ast:: FnKind ( defaultness, ref sig, ref generics, ref block) = * * fn_kind;
631
643
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 ) ;
634
646
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) ) ,
636
648
generics,
637
649
& sig. decl ,
638
- ti . span ,
650
+ ai . span ,
639
651
defaultness,
640
652
Some ( & inner_attrs) ,
641
653
) ;
642
654
} else {
643
655
let indent = self . block_indent ;
644
656
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) ;
647
659
}
648
660
}
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 ) ;
652
663
}
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 ) ;
655
666
}
667
+ _ => unreachable ! ( ) ,
656
668
}
657
669
}
658
670
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
+ }
666
674
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) ) ;
697
677
}
698
678
699
679
fn visit_mac ( & mut self , mac : & ast:: MacCall , ident : Option < symbol:: Ident > , pos : MacroPosition ) {
0 commit comments