@@ -350,14 +350,22 @@ pub fn build_impl(
350
350
}
351
351
}
352
352
353
- let for_ = if let Some ( did) = did. as_local ( ) {
354
- let hir_id = tcx. hir ( ) . local_def_id_to_hir_id ( did) ;
355
- match tcx. hir ( ) . expect_item ( hir_id) . kind {
356
- hir:: ItemKind :: Impl { self_ty, .. } => self_ty. clean ( cx) ,
357
- _ => panic ! ( "did given to build_impl was not an impl" ) ,
353
+ let impl_item = match did. as_local ( ) {
354
+ Some ( did) => {
355
+ let hir_id = tcx. hir ( ) . local_def_id_to_hir_id ( did) ;
356
+ match tcx. hir ( ) . expect_item ( hir_id) . kind {
357
+ hir:: ItemKind :: Impl { self_ty, ref generics, ref items, .. } => {
358
+ Some ( ( self_ty, generics, items) )
359
+ }
360
+ _ => panic ! ( "`DefID` passed to `build_impl` is not an `impl" ) ,
361
+ }
358
362
}
359
- } else {
360
- tcx. type_of ( did) . clean ( cx)
363
+ None => None ,
364
+ } ;
365
+
366
+ let for_ = match impl_item {
367
+ Some ( ( self_ty, _, _) ) => self_ty. clean ( cx) ,
368
+ None => tcx. type_of ( did) . clean ( cx) ,
361
369
} ;
362
370
363
371
// Only inline impl if the implementing type is
@@ -377,17 +385,12 @@ pub fn build_impl(
377
385
}
378
386
379
387
let predicates = tcx. explicit_predicates_of ( did) ;
380
- let ( trait_items, generics) = if let Some ( did) = did. as_local ( ) {
381
- let hir_id = tcx. hir ( ) . local_def_id_to_hir_id ( did) ;
382
- match tcx. hir ( ) . expect_item ( hir_id) . kind {
383
- hir:: ItemKind :: Impl { ref generics, ref items, .. } => (
384
- items. iter ( ) . map ( |item| tcx. hir ( ) . impl_item ( item. id ) . clean ( cx) ) . collect :: < Vec < _ > > ( ) ,
385
- generics. clean ( cx) ,
386
- ) ,
387
- _ => panic ! ( "did given to build_impl was not an impl" ) ,
388
- }
389
- } else {
390
- (
388
+ let ( trait_items, generics) = match impl_item {
389
+ Some ( ( _, generics, items) ) => (
390
+ items. iter ( ) . map ( |item| tcx. hir ( ) . impl_item ( item. id ) . clean ( cx) ) . collect :: < Vec < _ > > ( ) ,
391
+ generics. clean ( cx) ,
392
+ ) ,
393
+ None => (
391
394
tcx. associated_items ( did)
392
395
. in_definition_order ( )
393
396
. filter_map ( |item| {
@@ -399,7 +402,7 @@ pub fn build_impl(
399
402
} )
400
403
. collect :: < Vec < _ > > ( ) ,
401
404
clean:: enter_impl_trait ( cx, || ( tcx. generics_of ( did) , predicates) . clean ( cx) ) ,
402
- )
405
+ ) ,
403
406
} ;
404
407
let polarity = tcx. impl_polarity ( did) ;
405
408
let trait_ = associated_trait. clean ( cx) . map ( |bound| match bound {
0 commit comments