@@ -50,7 +50,8 @@ enum ErrorKind {
5050
5151struct LinkCollector < ' a , ' tcx > {
5252 cx : & ' a DocContext < ' tcx > ,
53- mod_ids : Vec < hir:: HirId > ,
53+ // NOTE: this may not necessarily be a module in the current crate
54+ mod_ids : Vec < DefId > ,
5455}
5556
5657impl < ' a , ' tcx > LinkCollector < ' a , ' tcx > {
@@ -445,17 +446,6 @@ impl<'a, 'tcx> DocFolder for LinkCollector<'a, 'tcx> {
445446 fn fold_item ( & mut self , mut item : Item ) -> Option < Item > {
446447 use rustc_middle:: ty:: DefIdTree ;
447448
448- let item_hir_id = if item. is_mod ( ) {
449- if let Some ( def_id) = item. def_id . as_local ( ) {
450- Some ( self . cx . tcx . hir ( ) . as_local_hir_id ( def_id) )
451- } else {
452- debug ! ( "attempting to fold on a non-local item: {:?}" , item) ;
453- return self . fold_item_recur ( item) ;
454- }
455- } else {
456- None
457- } ;
458-
459449 let parent_node = if item. is_fake ( ) {
460450 // FIXME: is this correct?
461451 None
@@ -482,13 +472,9 @@ impl<'a, 'tcx> DocFolder for LinkCollector<'a, 'tcx> {
482472 let current_item = match item. inner {
483473 ModuleItem ( ..) => {
484474 if item. attrs . inner_docs {
485- if item_hir_id . unwrap ( ) != hir :: CRATE_HIR_ID { item. name . clone ( ) } else { None }
475+ if item . def_id . is_top_level_module ( ) { item. name . clone ( ) } else { None }
486476 } else {
487- match parent_node. or ( self
488- . mod_ids
489- . last ( )
490- . map ( |& local| self . cx . tcx . hir ( ) . local_def_id ( local) . to_def_id ( ) ) )
491- {
477+ match parent_node. or ( self . mod_ids . last ( ) . copied ( ) ) {
492478 Some ( parent) if !parent. is_top_level_module ( ) => {
493479 // FIXME: can we pull the parent module's name from elsewhere?
494480 Some ( self . cx . tcx . item_name ( parent) . to_string ( ) )
@@ -508,7 +494,7 @@ impl<'a, 'tcx> DocFolder for LinkCollector<'a, 'tcx> {
508494 } ;
509495
510496 if item. is_mod ( ) && item. attrs . inner_docs {
511- self . mod_ids . push ( item_hir_id . unwrap ( ) ) ;
497+ self . mod_ids . push ( item . def_id ) ;
512498 }
513499
514500 let cx = self . cx ;
@@ -655,7 +641,7 @@ impl<'a, 'tcx> DocFolder for LinkCollector<'a, 'tcx> {
655641 // for outer comments we explicitly try and resolve against the
656642 // parent_node first.
657643 let base_node = if item. is_mod ( ) && item. attrs . inner_docs {
658- self . mod_ids . last ( ) . map ( | & id| self . cx . tcx . hir ( ) . local_def_id ( id ) . to_def_id ( ) )
644+ self . mod_ids . last ( ) . copied ( )
659645 } else {
660646 parent_node
661647 } ;
@@ -842,7 +828,7 @@ impl<'a, 'tcx> DocFolder for LinkCollector<'a, 'tcx> {
842828 }
843829
844830 if item. is_mod ( ) && !item. attrs . inner_docs {
845- self . mod_ids . push ( item_hir_id . unwrap ( ) ) ;
831+ self . mod_ids . push ( item . def_id ) ;
846832 }
847833
848834 if item. is_mod ( ) {
0 commit comments