@@ -3060,7 +3060,7 @@ fn render_implementor(cx: &Context, implementor: &Impl, w: &mut fmt::Formatter<'
3060
3060
_ => false ,
3061
3061
} ;
3062
3062
render_impl ( w, cx, implementor, AssocItemLink :: Anchor ( None ) , RenderMode :: Normal ,
3063
- implementor. impl_item . stable_since ( ) , false , Some ( use_absolute) ) ?;
3063
+ implementor. impl_item . stable_since ( ) , false , Some ( use_absolute) , false ) ?;
3064
3064
Ok ( ( ) )
3065
3065
}
3066
3066
@@ -3071,7 +3071,7 @@ fn render_impls(cx: &Context, w: &mut fmt::Formatter<'_>,
3071
3071
let did = i. trait_did ( ) . unwrap ( ) ;
3072
3072
let assoc_link = AssocItemLink :: GotoSource ( did, & i. inner_impl ( ) . provided_trait_methods ) ;
3073
3073
render_impl ( w, cx, i, assoc_link,
3074
- RenderMode :: Normal , containing_item. stable_since ( ) , true , None ) ?;
3074
+ RenderMode :: Normal , containing_item. stable_since ( ) , true , None , false ) ?;
3075
3075
}
3076
3076
Ok ( ( ) )
3077
3077
}
@@ -3301,7 +3301,7 @@ fn item_trait(
3301
3301
) ;
3302
3302
render_impl ( w, cx, & implementor, assoc_link,
3303
3303
RenderMode :: Normal , implementor. impl_item . stable_since ( ) , false ,
3304
- None ) ?;
3304
+ None , true ) ?;
3305
3305
}
3306
3306
write_loading_content ( w, "" ) ?;
3307
3307
}
@@ -3958,7 +3958,7 @@ fn render_assoc_items(w: &mut fmt::Formatter<'_>,
3958
3958
} ;
3959
3959
for i in & non_trait {
3960
3960
render_impl ( w, cx, i, AssocItemLink :: Anchor ( None ) , render_mode,
3961
- containing_item. stable_since ( ) , true , None ) ?;
3961
+ containing_item. stable_since ( ) , true , None , false ) ?;
3962
3962
}
3963
3963
}
3964
3964
if let AssocItemRender :: DerefFor { .. } = what {
@@ -4138,11 +4138,15 @@ fn spotlight_decl(decl: &clean::FnDecl) -> Result<String, fmt::Error> {
4138
4138
}
4139
4139
4140
4140
fn render_impl ( w : & mut fmt:: Formatter < ' _ > , cx : & Context , i : & Impl , link : AssocItemLink < ' _ > ,
4141
- render_mode : RenderMode , outer_version : Option < & str > ,
4142
- show_def_docs : bool , use_absolute : Option < bool > ) -> fmt:: Result {
4141
+ render_mode : RenderMode , outer_version : Option < & str > , show_def_docs : bool ,
4142
+ use_absolute : Option < bool > , is_on_foreign_type : bool ) -> fmt:: Result {
4143
4143
if render_mode == RenderMode :: Normal {
4144
4144
let id = cx. derive_id ( match i. inner_impl ( ) . trait_ {
4145
- Some ( ref t) => format ! ( "impl-{}" , small_url_encode( & format!( "{:#}" , t) ) ) ,
4145
+ Some ( ref t) => if is_on_foreign_type {
4146
+ get_id_for_impl_on_foreign_type ( & i. inner_impl ( ) . for_ , t)
4147
+ } else {
4148
+ format ! ( "impl-{}" , small_url_encode( & format!( "{:#}" , t) ) )
4149
+ } ,
4146
4150
None => "impl" . to_string ( ) ,
4147
4151
} ) ;
4148
4152
if let Some ( use_absolute) = use_absolute {
@@ -4688,11 +4692,15 @@ fn sidebar_struct(fmt: &mut fmt::Formatter<'_>, it: &clean::Item,
4688
4692
Ok ( ( ) )
4689
4693
}
4690
4694
4695
+ fn get_id_for_impl_on_foreign_type ( for_ : & clean:: Type , trait_ : & clean:: Type ) -> String {
4696
+ small_url_encode ( & format ! ( "impl-{:#}-for-{:#}" , trait_, for_) )
4697
+ }
4698
+
4691
4699
fn extract_for_impl_name ( item : & clean:: Item ) -> Option < ( String , String ) > {
4692
4700
match item. inner {
4693
4701
clean:: ItemEnum :: ImplItem ( ref i) => {
4694
4702
if let Some ( ref trait_) = i. trait_ {
4695
- Some ( ( format ! ( "{:#}" , i. for_) , format ! ( "{:#}" , trait_) ) )
4703
+ Some ( ( format ! ( "{:#}" , i. for_) , get_id_for_impl_on_foreign_type ( & i . for_ , trait_) ) )
4696
4704
} else {
4697
4705
None
4698
4706
}
@@ -4788,9 +4796,9 @@ fn sidebar_trait(fmt: &mut fmt::Formatter<'_>, it: &clean::Item,
4788
4796
. map_or ( false , |d| !c. paths . contains_key ( & d) ) )
4789
4797
. filter_map ( |i| {
4790
4798
match extract_for_impl_name ( & i. impl_item ) {
4791
- Some ( ( ref name, ref url ) ) => {
4792
- Some ( format ! ( "<a href=\" #impl- {}\" >{}</a>" ,
4793
- small_url_encode ( url ) ,
4799
+ Some ( ( ref name, ref id ) ) => {
4800
+ Some ( format ! ( "<a href=\" #{}\" >{}</a>" ,
4801
+ id ,
4794
4802
Escape ( name) ) )
4795
4803
}
4796
4804
_ => None ,
0 commit comments