@@ -130,7 +130,7 @@ impl<'tcx> Clean<'tcx, Attributes> for [ast::Attribute] {
130130impl < ' tcx > Clean < ' tcx , Option < GenericBound > > for hir:: GenericBound < ' tcx > {
131131 fn clean ( & self , cx : & mut DocContext < ' tcx > ) -> Option < GenericBound > {
132132 Some ( match * self {
133- hir:: GenericBound :: Outlives ( lt) => GenericBound :: Outlives ( lt . clean ( cx) ) ,
133+ hir:: GenericBound :: Outlives ( lt) => GenericBound :: Outlives ( clean_lifetime ( lt , cx) ) ,
134134 hir:: GenericBound :: LangItemTrait ( lang_item, span, _, generic_args) => {
135135 let def_id = cx. tcx . require_lang_item ( lang_item, Some ( span) ) ;
136136
@@ -163,7 +163,7 @@ impl<'tcx> Clean<'tcx, Option<GenericBound>> for hir::GenericBound<'tcx> {
163163 }
164164}
165165
166- fn clean_trait_ref_with_bindings < ' tcx > (
166+ pub ( crate ) fn clean_trait_ref_with_bindings < ' tcx > (
167167 cx : & mut DocContext < ' tcx > ,
168168 trait_ref : ty:: TraitRef < ' tcx > ,
169169 bindings : & [ TypeBinding ] ,
@@ -180,12 +180,6 @@ fn clean_trait_ref_with_bindings<'tcx>(
180180 path
181181}
182182
183- impl < ' tcx > Clean < ' tcx , Path > for ty:: TraitRef < ' tcx > {
184- fn clean ( & self , cx : & mut DocContext < ' tcx > ) -> Path {
185- clean_trait_ref_with_bindings ( cx, * self , & [ ] )
186- }
187- }
188-
189183fn clean_poly_trait_ref_with_bindings < ' tcx > (
190184 cx : & mut DocContext < ' tcx > ,
191185 poly_trait_ref : ty:: PolyTraitRef < ' tcx > ,
@@ -220,21 +214,19 @@ impl<'tcx> Clean<'tcx, GenericBound> for ty::PolyTraitRef<'tcx> {
220214 }
221215}
222216
223- impl < ' tcx > Clean < ' tcx , Lifetime > for hir:: Lifetime {
224- fn clean ( & self , cx : & mut DocContext < ' tcx > ) -> Lifetime {
225- let def = cx. tcx . named_region ( self . hir_id ) ;
226- if let Some (
227- rl:: Region :: EarlyBound ( _, node_id)
228- | rl:: Region :: LateBound ( _, _, node_id)
229- | rl:: Region :: Free ( _, node_id) ,
230- ) = def
231- {
232- if let Some ( lt) = cx. substs . get ( & node_id) . and_then ( |p| p. as_lt ( ) ) . cloned ( ) {
233- return lt;
234- }
217+ fn clean_lifetime < ' tcx > ( lifetime : hir:: Lifetime , cx : & mut DocContext < ' tcx > ) -> Lifetime {
218+ let def = cx. tcx . named_region ( lifetime. hir_id ) ;
219+ if let Some (
220+ rl:: Region :: EarlyBound ( _, node_id)
221+ | rl:: Region :: LateBound ( _, _, node_id)
222+ | rl:: Region :: Free ( _, node_id) ,
223+ ) = def
224+ {
225+ if let Some ( lt) = cx. substs . get ( & node_id) . and_then ( |p| p. as_lt ( ) ) . cloned ( ) {
226+ return lt;
235227 }
236- Lifetime ( self . name . ident ( ) . name )
237228 }
229+ Lifetime ( lifetime. name . ident ( ) . name )
238230}
239231
240232pub ( crate ) fn clean_const < ' tcx > ( constant : & hir:: ConstArg , cx : & mut DocContext < ' tcx > ) -> Constant {
@@ -311,7 +303,7 @@ impl<'tcx> Clean<'tcx, Option<WherePredicate>> for hir::WherePredicate<'tcx> {
311303 }
312304
313305 hir:: WherePredicate :: RegionPredicate ( ref wrp) => WherePredicate :: RegionPredicate {
314- lifetime : wrp. lifetime . clean ( cx) ,
306+ lifetime : clean_lifetime ( wrp. lifetime , cx) ,
315307 bounds : wrp. bounds . iter ( ) . filter_map ( |x| x. clean ( cx) ) . collect ( ) ,
316308 } ,
317309
@@ -432,7 +424,7 @@ fn clean_projection<'tcx>(
432424 def_id : Option < DefId > ,
433425) -> Type {
434426 let lifted = ty. lift_to_tcx ( cx. tcx ) . unwrap ( ) ;
435- let trait_ = lifted. trait_ref ( cx. tcx ) . clean ( cx ) ;
427+ let trait_ = clean_trait_ref_with_bindings ( cx , lifted. trait_ref ( cx. tcx ) , & [ ] ) ;
436428 let self_type = clean_middle_ty ( ty. self_ty ( ) , cx, None ) ;
437429 let self_def_id = if let Some ( def_id) = def_id {
438430 cx. tcx . opt_parent ( def_id) . or ( Some ( def_id) )
@@ -524,7 +516,7 @@ fn clean_generic_param<'tcx>(
524516 . filter ( |bp| !bp. in_where_clause )
525517 . flat_map ( |bp| bp. bounds )
526518 . map ( |bound| match bound {
527- hir:: GenericBound :: Outlives ( lt) => lt . clean ( cx) ,
519+ hir:: GenericBound :: Outlives ( lt) => clean_lifetime ( * lt , cx) ,
528520 _ => panic ! ( ) ,
529521 } )
530522 . collect ( )
@@ -1431,7 +1423,8 @@ fn maybe_expand_private_type_alias<'tcx>(
14311423 } ) ;
14321424 if let Some ( lt) = lifetime. cloned ( ) {
14331425 let lt_def_id = cx. tcx . hir ( ) . local_def_id ( param. hir_id ) ;
1434- let cleaned = if !lt. is_elided ( ) { lt. clean ( cx) } else { Lifetime :: elided ( ) } ;
1426+ let cleaned =
1427+ if !lt. is_elided ( ) { clean_lifetime ( lt, cx) } else { Lifetime :: elided ( ) } ;
14351428 substs. insert ( lt_def_id. to_def_id ( ) , SubstParam :: Lifetime ( cleaned) ) ;
14361429 }
14371430 indices. lifetimes += 1 ;
@@ -1503,7 +1496,7 @@ pub(crate) fn clean_ty<'tcx>(ty: &hir::Ty<'tcx>, cx: &mut DocContext<'tcx>) -> T
15031496 // there's no case where it could cause the function to fail to compile.
15041497 let elided =
15051498 l. is_elided ( ) || matches ! ( l. name, LifetimeName :: Param ( _, ParamName :: Fresh ) ) ;
1506- let lifetime = if elided { None } else { Some ( l . clean ( cx) ) } ;
1499+ let lifetime = if elided { None } else { Some ( clean_lifetime ( * l , cx) ) } ;
15071500 BorrowedRef { lifetime, mutability : m. mutbl , type_ : Box :: new ( clean_ty ( m. ty , cx) ) }
15081501 }
15091502 TyKind :: Slice ( ty) => Slice ( Box :: new ( clean_ty ( ty, cx) ) ) ,
@@ -1539,7 +1532,8 @@ pub(crate) fn clean_ty<'tcx>(ty: &hir::Ty<'tcx>, cx: &mut DocContext<'tcx>) -> T
15391532 TyKind :: Path ( _) => clean_qpath ( ty, cx) ,
15401533 TyKind :: TraitObject ( bounds, ref lifetime, _) => {
15411534 let bounds = bounds. iter ( ) . map ( |bound| bound. clean ( cx) ) . collect ( ) ;
1542- let lifetime = if !lifetime. is_elided ( ) { Some ( lifetime. clean ( cx) ) } else { None } ;
1535+ let lifetime =
1536+ if !lifetime. is_elided ( ) { Some ( clean_lifetime ( * lifetime, cx) ) } else { None } ;
15431537 DynTrait ( bounds, lifetime)
15441538 }
15451539 TyKind :: BareFn ( barefn) => BareFunction ( Box :: new ( barefn. clean ( cx) ) ) ,
@@ -1875,7 +1869,7 @@ impl<'tcx> Clean<'tcx, GenericArgs> for hir::GenericArgs<'tcx> {
18751869 . iter ( )
18761870 . map ( |arg| match arg {
18771871 hir:: GenericArg :: Lifetime ( lt) if !lt. is_elided ( ) => {
1878- GenericArg :: Lifetime ( lt . clean ( cx) )
1872+ GenericArg :: Lifetime ( clean_lifetime ( * lt , cx) )
18791873 }
18801874 hir:: GenericArg :: Lifetime ( _) => GenericArg :: Lifetime ( Lifetime :: elided ( ) ) ,
18811875 hir:: GenericArg :: Type ( ty) => GenericArg :: Type ( clean_ty ( ty, cx) ) ,
0 commit comments