@@ -2,7 +2,7 @@ use crate::clean::auto_trait::AutoTraitFinder;
2
2
use crate :: clean:: blanket_impl:: BlanketImplFinder ;
3
3
use crate :: clean:: {
4
4
inline, Clean , Crate , Generic , GenericArg , GenericArgs , ImportSource , Item , ItemKind , Lifetime ,
5
- MacroKind , Path , PathSegment , Primitive , PrimitiveType , ResolvedPath , Type , TypeBinding ,
5
+ Path , PathSegment , Primitive , PrimitiveType , ResolvedPath , Type , TypeBinding ,
6
6
} ;
7
7
use crate :: core:: DocContext ;
8
8
use crate :: formats:: item_type:: ItemType ;
@@ -431,35 +431,48 @@ crate fn get_auto_trait_and_blanket_impls(
431
431
auto_impls. into_iter ( ) . chain ( blanket_impls)
432
432
}
433
433
434
+ /// If `res` has a documentation page associated, store it in the cache.
435
+ ///
436
+ /// This is later used by [`href()`] to determine the HTML link for the item.
437
+ ///
438
+ /// [`href()`]: crate::html::format::href
434
439
crate fn register_res ( cx : & mut DocContext < ' _ > , res : Res ) -> DefId {
440
+ use DefKind :: * ;
435
441
debug ! ( "register_res({:?})" , res) ;
436
442
437
443
let ( did, kind) = match res {
438
- Res :: Def ( DefKind :: Fn , i) => ( i, ItemType :: Function ) ,
439
- Res :: Def ( DefKind :: TyAlias , i) => ( i, ItemType :: Typedef ) ,
440
- Res :: Def ( DefKind :: Enum , i) => ( i, ItemType :: Enum ) ,
441
- Res :: Def ( DefKind :: Trait , i) => ( i, ItemType :: Trait ) ,
442
444
Res :: Def ( DefKind :: AssocTy | DefKind :: AssocFn | DefKind :: AssocConst , i) => {
445
+ // associated items are documented, but on the page of their parent
443
446
( cx. tcx . parent ( i) . unwrap ( ) , ItemType :: Trait )
444
447
}
445
- Res :: Def ( DefKind :: Struct , i) => ( i, ItemType :: Struct ) ,
446
- Res :: Def ( DefKind :: Union , i) => ( i, ItemType :: Union ) ,
447
- Res :: Def ( DefKind :: Mod , i) => ( i, ItemType :: Module ) ,
448
- Res :: Def ( DefKind :: ForeignTy , i) => ( i, ItemType :: ForeignType ) ,
449
- Res :: Def ( DefKind :: Const , i) => ( i, ItemType :: Constant ) ,
450
- Res :: Def ( DefKind :: Static , i) => ( i, ItemType :: Static ) ,
451
448
Res :: Def ( DefKind :: Variant , i) => {
449
+ // variant items are documented, but on the page of their parent
452
450
( cx. tcx . parent ( i) . expect ( "cannot get parent def id" ) , ItemType :: Enum )
453
451
}
454
- Res :: Def ( DefKind :: Macro ( mac_kind) , i) => match mac_kind {
455
- MacroKind :: Bang => ( i, ItemType :: Macro ) ,
456
- MacroKind :: Attr => ( i, ItemType :: ProcAttribute ) ,
457
- MacroKind :: Derive => ( i, ItemType :: ProcDerive ) ,
458
- } ,
459
- Res :: Def ( DefKind :: TraitAlias , i) => ( i, ItemType :: TraitAlias ) ,
460
- Res :: SelfTy ( Some ( def_id) , _) => ( def_id, ItemType :: Trait ) ,
461
- Res :: SelfTy ( _, Some ( ( impl_def_id, _) ) ) => return impl_def_id,
462
- _ => return res. def_id ( ) ,
452
+ // Each of these have their own page.
453
+ Res :: Def (
454
+ kind
455
+ @
456
+ ( Fn | TyAlias | Enum | Trait | Struct | Union | Mod | ForeignTy | Const | Static
457
+ | Macro ( ..) | TraitAlias ) ,
458
+ i,
459
+ ) => ( i, kind. into ( ) ) ,
460
+ // This is part of a trait definition; document the trait.
461
+ Res :: SelfTy ( Some ( trait_def_id) , _) => ( trait_def_id, ItemType :: Trait ) ,
462
+ // This is an inherent impl; it doesn't have its own page.
463
+ Res :: SelfTy ( None , Some ( ( impl_def_id, _) ) ) => return impl_def_id,
464
+ Res :: SelfTy ( None , None )
465
+ | Res :: PrimTy ( _)
466
+ | Res :: ToolMod
467
+ | Res :: SelfCtor ( _)
468
+ | Res :: Local ( _)
469
+ | Res :: NonMacroAttr ( _)
470
+ | Res :: Err => return res. def_id ( ) ,
471
+ Res :: Def (
472
+ TyParam | ConstParam | Ctor ( ..) | ExternCrate | Use | ForeignMod | AnonConst | OpaqueTy
473
+ | Field | LifetimeParam | GlobalAsm | Impl | Closure | Generator ,
474
+ id,
475
+ ) => return id,
463
476
} ;
464
477
if did. is_local ( ) {
465
478
return did;
0 commit comments