@@ -4303,58 +4303,7 @@ fn sidebar_assoc_items(it: &clean::Item) -> String {
43034303 . filter ( |i| i. inner_impl ( ) . trait_ . is_some ( ) )
43044304 . find ( |i| i. inner_impl ( ) . trait_ . def_id ( ) == c. deref_trait_did )
43054305 {
4306- debug ! ( "found Deref: {:?}" , impl_) ;
4307- if let Some ( ( target, real_target) ) =
4308- impl_. inner_impl ( ) . items . iter ( ) . find_map ( |item| match * item. kind {
4309- clean:: TypedefItem ( ref t, true ) => Some ( match * t {
4310- clean:: Typedef { item_type : Some ( ref type_) , .. } => ( type_, & t. type_ ) ,
4311- _ => ( & t. type_ , & t. type_ ) ,
4312- } ) ,
4313- _ => None ,
4314- } )
4315- {
4316- debug ! ( "found target, real_target: {:?} {:?}" , target, real_target) ;
4317- let deref_mut = v
4318- . iter ( )
4319- . filter ( |i| i. inner_impl ( ) . trait_ . is_some ( ) )
4320- . any ( |i| i. inner_impl ( ) . trait_ . def_id ( ) == c. deref_mut_trait_did ) ;
4321- let inner_impl = target
4322- . def_id ( )
4323- . or_else ( || {
4324- target
4325- . primitive_type ( )
4326- . and_then ( |prim| c. primitive_locations . get ( & prim) . cloned ( ) )
4327- } )
4328- . and_then ( |did| c. impls . get ( & did) ) ;
4329- if let Some ( impls) = inner_impl {
4330- debug ! ( "found inner_impl: {:?}" , impls) ;
4331- out. push_str ( "<a class=\" sidebar-title\" href=\" #deref-methods\" >" ) ;
4332- out. push_str ( & format ! (
4333- "Methods from {}<Target={}>" ,
4334- Escape ( & format!(
4335- "{:#}" ,
4336- impl_. inner_impl( ) . trait_. as_ref( ) . unwrap( ) . print( )
4337- ) ) ,
4338- Escape ( & format!( "{:#}" , real_target. print( ) ) )
4339- ) ) ;
4340- out. push_str ( "</a>" ) ;
4341- let mut ret = impls
4342- . iter ( )
4343- . filter ( |i| i. inner_impl ( ) . trait_ . is_none ( ) )
4344- . flat_map ( |i| {
4345- get_methods ( i. inner_impl ( ) , true , & mut used_links, deref_mut)
4346- } )
4347- . collect :: < Vec < _ > > ( ) ;
4348- // We want links' order to be reproducible so we don't use unstable sort.
4349- ret. sort ( ) ;
4350- if !ret. is_empty ( ) {
4351- out. push_str ( & format ! (
4352- "<div class=\" sidebar-links\" >{}</div>" ,
4353- ret. join( "" )
4354- ) ) ;
4355- }
4356- }
4357- }
4306+ out. push_str ( & sidebar_deref_methods ( impl_, v) ) ;
43584307 }
43594308 let format_impls = |impls : Vec < & Impl > | {
43604309 let mut links = FxHashSet :: default ( ) ;
@@ -4422,6 +4371,57 @@ fn sidebar_assoc_items(it: &clean::Item) -> String {
44224371 out
44234372}
44244373
4374+ fn sidebar_deref_methods ( impl_ : & Impl , v : & Vec < Impl > ) -> String {
4375+ let mut out = String :: new ( ) ;
4376+ let c = cache ( ) ;
4377+
4378+ debug ! ( "found Deref: {:?}" , impl_) ;
4379+ if let Some ( ( target, real_target) ) =
4380+ impl_. inner_impl ( ) . items . iter ( ) . find_map ( |item| match * item. kind {
4381+ clean:: TypedefItem ( ref t, true ) => Some ( match * t {
4382+ clean:: Typedef { item_type : Some ( ref type_) , .. } => ( type_, & t. type_ ) ,
4383+ _ => ( & t. type_ , & t. type_ ) ,
4384+ } ) ,
4385+ _ => None ,
4386+ } )
4387+ {
4388+ debug ! ( "found target, real_target: {:?} {:?}" , target, real_target) ;
4389+ let deref_mut = v
4390+ . iter ( )
4391+ . filter ( |i| i. inner_impl ( ) . trait_ . is_some ( ) )
4392+ . any ( |i| i. inner_impl ( ) . trait_ . def_id ( ) == c. deref_mut_trait_did ) ;
4393+ let inner_impl = target
4394+ . def_id ( )
4395+ . or_else ( || {
4396+ target. primitive_type ( ) . and_then ( |prim| c. primitive_locations . get ( & prim) . cloned ( ) )
4397+ } )
4398+ . and_then ( |did| c. impls . get ( & did) ) ;
4399+ if let Some ( impls) = inner_impl {
4400+ debug ! ( "found inner_impl: {:?}" , impls) ;
4401+ out. push_str ( "<a class=\" sidebar-title\" href=\" #deref-methods\" >" ) ;
4402+ out. push_str ( & format ! (
4403+ "Methods from {}<Target={}>" ,
4404+ Escape ( & format!( "{:#}" , impl_. inner_impl( ) . trait_. as_ref( ) . unwrap( ) . print( ) ) ) ,
4405+ Escape ( & format!( "{:#}" , real_target. print( ) ) )
4406+ ) ) ;
4407+ out. push_str ( "</a>" ) ;
4408+ let mut used_links = FxHashSet :: default ( ) ;
4409+ let mut ret = impls
4410+ . iter ( )
4411+ . filter ( |i| i. inner_impl ( ) . trait_ . is_none ( ) )
4412+ . flat_map ( |i| get_methods ( i. inner_impl ( ) , true , & mut used_links, deref_mut) )
4413+ . collect :: < Vec < _ > > ( ) ;
4414+ // We want links' order to be reproducible so we don't use unstable sort.
4415+ ret. sort ( ) ;
4416+ if !ret. is_empty ( ) {
4417+ out. push_str ( & format ! ( "<div class=\" sidebar-links\" >{}</div>" , ret. join( "" ) ) ) ;
4418+ }
4419+ }
4420+ }
4421+
4422+ out
4423+ }
4424+
44254425fn sidebar_struct ( buf : & mut Buffer , it : & clean:: Item , s : & clean:: Struct ) {
44264426 let mut sidebar = String :: new ( ) ;
44274427 let fields = get_struct_fields_name ( & s. fields ) ;
0 commit comments