@@ -4303,58 +4303,7 @@ fn sidebar_assoc_items(it: &clean::Item) -> String {
4303
4303
. filter ( |i| i. inner_impl ( ) . trait_ . is_some ( ) )
4304
4304
. find ( |i| i. inner_impl ( ) . trait_ . def_id ( ) == c. deref_trait_did )
4305
4305
{
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) ) ;
4358
4307
}
4359
4308
let format_impls = |impls : Vec < & Impl > | {
4360
4309
let mut links = FxHashSet :: default ( ) ;
@@ -4422,6 +4371,57 @@ fn sidebar_assoc_items(it: &clean::Item) -> String {
4422
4371
out
4423
4372
}
4424
4373
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
+
4425
4425
fn sidebar_struct ( buf : & mut Buffer , it : & clean:: Item , s : & clean:: Struct ) {
4426
4426
let mut sidebar = String :: new ( ) ;
4427
4427
let fields = get_struct_fields_name ( & s. fields ) ;
0 commit comments