@@ -476,7 +476,8 @@ pub enum FullDefKind<Body> {
476
476
#[ derive_group( Serializers ) ]
477
477
#[ derive( Clone , Debug , JsonSchema ) ]
478
478
pub struct ImplAssocItem < Body > {
479
- pub name : Symbol ,
479
+ /// This is `None` for RPTITs.
480
+ pub name : Option < Symbol > ,
480
481
/// The definition of the item from the trait declaration. This is `AssocTy`, `AssocFn` or
481
482
/// `AssocConst`.
482
483
pub decl_def : Arc < FullDef < Body > > ,
@@ -571,11 +572,11 @@ impl<Body> FullDef<Body> {
571
572
. collect ( ) ,
572
573
FullDefKind :: InherentImpl { items, .. } | FullDefKind :: Trait { items, .. } => items
573
574
. iter ( )
574
- . map ( |( item, _) | ( item. name . clone ( ) , item. def_id . clone ( ) ) )
575
+ . filter_map ( |( item, _) | Some ( ( item. name . clone ( ) ? , item. def_id . clone ( ) ) ) )
575
576
. collect ( ) ,
576
577
FullDefKind :: TraitImpl { items, .. } => items
577
578
. iter ( )
578
- . map ( |item| ( item. name . clone ( ) , item. def ( ) . def_id . clone ( ) ) )
579
+ . filter_map ( |item| Some ( ( item. name . clone ( ) ? , item. def ( ) . def_id . clone ( ) ) ) )
579
580
. collect ( ) ,
580
581
_ => vec ! [ ] ,
581
582
} ;
@@ -586,7 +587,7 @@ impl<Body> FullDef<Body> {
586
587
children. extend (
587
588
tcx. associated_items ( impl_def_id)
588
589
. in_definition_order ( )
589
- . map ( |assoc| ( assoc. name , assoc. def_id ) . sinto ( s) ) ,
590
+ . filter_map ( |assoc| Some ( ( assoc. opt_name ( ) ? , assoc. def_id ) . sinto ( s) ) ) ,
590
591
) ;
591
592
}
592
593
}
@@ -605,11 +606,17 @@ impl<Body> ImplAssocItem<Body> {
605
606
}
606
607
607
608
/// The kind of item this is.
608
- pub fn assoc_kind ( & self ) -> AssocKind {
609
+ pub fn assoc_kind ( & self ) -> & AssocKind {
609
610
match self . def ( ) . kind ( ) {
610
- FullDefKind :: AssocTy { .. } => AssocKind :: Type ,
611
- FullDefKind :: AssocFn { .. } => AssocKind :: Fn ,
612
- FullDefKind :: AssocConst { .. } => AssocKind :: Const ,
611
+ FullDefKind :: AssocTy {
612
+ associated_item, ..
613
+ }
614
+ | FullDefKind :: AssocFn {
615
+ associated_item, ..
616
+ }
617
+ | FullDefKind :: AssocConst {
618
+ associated_item, ..
619
+ } => & associated_item. kind ,
613
620
_ => unreachable ! ( ) ,
614
621
}
615
622
}
@@ -804,21 +811,23 @@ where
804
811
vec ! [ ]
805
812
} ;
806
813
match decl_assoc. kind {
807
- ty:: AssocKind :: Type => {
814
+ ty:: AssocKind :: Type { .. } => {
808
815
let ty = tcx
809
816
. type_of ( decl_def_id)
810
817
. instantiate ( tcx, trait_ref. args )
811
818
. sinto ( s) ;
812
819
ImplAssocItemValue :: DefaultedTy { ty }
813
820
}
814
- ty:: AssocKind :: Fn => ImplAssocItemValue :: DefaultedFn { } ,
815
- ty:: AssocKind :: Const => ImplAssocItemValue :: DefaultedConst { } ,
821
+ ty:: AssocKind :: Fn { .. } => ImplAssocItemValue :: DefaultedFn { } ,
822
+ ty:: AssocKind :: Const { .. } => {
823
+ ImplAssocItemValue :: DefaultedConst { }
824
+ }
816
825
}
817
826
}
818
827
} ;
819
828
820
829
ImplAssocItem {
821
- name : decl_assoc. name . sinto ( s) ,
830
+ name : decl_assoc. opt_name ( ) . sinto ( s) ,
822
831
value,
823
832
required_impl_exprs,
824
833
decl_def,
0 commit comments