@@ -515,36 +515,29 @@ impl<'a, 'tcx> LinkCollector<'a, 'tcx> {
515
515
return None ;
516
516
}
517
517
518
- let self_id = match item_id. as_def_id ( ) {
519
- None => None ,
520
- Some ( did)
521
- if ( matches ! ( self . cx. tcx. def_kind( did) , DefKind :: Field )
522
- && matches ! (
523
- self . cx. tcx. def_kind( self . cx. tcx. parent( did) . unwrap( ) ) ,
524
- DefKind :: Variant
525
- ) ) =>
526
- {
527
- self . cx . tcx . parent ( did) . and_then ( |item_id| self . cx . tcx . parent ( item_id) )
528
- }
529
- Some ( did)
530
- if matches ! (
531
- self . cx. tcx. def_kind( did) ,
532
- DefKind :: AssocConst
533
- | DefKind :: AssocFn
534
- | DefKind :: AssocTy
535
- | DefKind :: Variant
536
- | DefKind :: Field
537
- ) =>
538
- {
539
- self . cx . tcx . parent ( did)
540
- }
541
- Some ( did) => Some ( did) ,
542
- } ;
543
-
544
- self_id. and_then ( |self_id| match self . cx . tcx . def_kind ( self_id) {
545
- DefKind :: Impl => self . def_id_to_res ( self_id) ,
546
- def_kind => Some ( Res :: Def ( def_kind, self_id) ) ,
547
- } )
518
+ let tcx = self . cx . tcx ;
519
+ item_id
520
+ . as_def_id ( )
521
+ . map ( |def_id| match tcx. def_kind ( def_id) {
522
+ def_kind @ ( DefKind :: AssocFn
523
+ | DefKind :: AssocConst
524
+ | DefKind :: AssocTy
525
+ | DefKind :: Variant
526
+ | DefKind :: Field ) => {
527
+ let parent_def_id = tcx. parent ( def_id) . expect ( "nested item has no parent" ) ;
528
+ if def_kind == DefKind :: Field && tcx. def_kind ( parent_def_id) == DefKind :: Variant
529
+ {
530
+ tcx. parent ( parent_def_id) . expect ( "variant has no parent" )
531
+ } else {
532
+ parent_def_id
533
+ }
534
+ }
535
+ _ => def_id,
536
+ } )
537
+ . and_then ( |self_id| match tcx. def_kind ( self_id) {
538
+ DefKind :: Impl => self . def_id_to_res ( self_id) ,
539
+ def_kind => Some ( Res :: Def ( def_kind, self_id) ) ,
540
+ } )
548
541
}
549
542
550
543
/// Convenience wrapper around `resolve_str_path_error`.
0 commit comments