From 4b1b277cf90886466e2e0dc5017ea535ef5e00ce Mon Sep 17 00:00:00 2001 From: Camelid Date: Fri, 25 Dec 2020 16:33:15 -0800 Subject: [PATCH] Add missing code to `find_closest_parent_module` --- src/librustdoc/clean/utils.rs | 40 +++++++++++-------- .../passes/collect_intra_doc_links.rs | 10 +---- 2 files changed, 25 insertions(+), 25 deletions(-) diff --git a/src/librustdoc/clean/utils.rs b/src/librustdoc/clean/utils.rs index fe1b58164474..4b9541b7e142 100644 --- a/src/librustdoc/clean/utils.rs +++ b/src/librustdoc/clean/utils.rs @@ -626,23 +626,31 @@ where } crate fn find_closest_parent_module(tcx: TyCtxt<'_>, def_id: DefId) -> Option { - let mut current = def_id; - // The immediate parent might not always be a module. - // Find the first parent which is. - loop { - if let Some(parent) = tcx.parent(current) { - if tcx.def_kind(parent) == DefKind::Mod { - break Some(parent); + if item.is_fake() { + // FIXME: is this correct? + None + // If we're documenting the crate root itself, it has no parent. Use the root instead. + } else if item.def_id.is_top_level_module() { + Some(item.def_id) + } else { + let mut current = def_id; + // The immediate parent might not always be a module. + // Find the first parent which is. + loop { + if let Some(parent) = tcx.parent(current) { + if tcx.def_kind(parent) == DefKind::Mod { + break Some(parent); + } + current = parent; + } else { + debug!( + "{:?} has no parent (kind={:?}, original was {:?})", + current, + tcx.def_kind(current), + def_id + ); + break None; } - current = parent; - } else { - debug!( - "{:?} has no parent (kind={:?}, original was {:?})", - current, - tcx.def_kind(current), - def_id - ); - break None; } } } diff --git a/src/librustdoc/passes/collect_intra_doc_links.rs b/src/librustdoc/passes/collect_intra_doc_links.rs index f392f321fbfc..4e261c3fd193 100644 --- a/src/librustdoc/passes/collect_intra_doc_links.rs +++ b/src/librustdoc/passes/collect_intra_doc_links.rs @@ -767,15 +767,7 @@ impl<'a, 'tcx> DocFolder for LinkCollector<'a, 'tcx> { fn fold_item(&mut self, mut item: Item) -> Option { use rustc_middle::ty::DefIdTree; - let parent_node = if item.is_fake() { - // FIXME: is this correct? - None - // If we're documenting the crate root itself, it has no parent. Use the root instead. - } else if item.def_id.is_top_level_module() { - Some(item.def_id) - } else { - find_closest_parent_module(self.cx.tcx, item.def_id) - }; + let parent_node = find_closest_parent_module(self.cx.tcx, item.def_id); if parent_node.is_some() { trace!("got parent node for {:?} {:?}, id {:?}", item.type_(), item.name, item.def_id);