about summary refs log tree commit diff
diff options
context:
space:
mode:
authorJoshua Nelson <jyn514@gmail.com>2020-06-07 17:08:26 -0400
committerJoshua Nelson <jyn514@gmail.com>2020-07-16 18:26:57 -0400
commit24c3d85e66b0fd719d9ffa70ae5e56593cb9b644 (patch)
tree5860911f8591ee909c4420b0a549783f5e19cad2
parent20106d5a2fda0f2fef97ce253e5d78d4cf030289 (diff)
downloadrust-24c3d85e66b0fd719d9ffa70ae5e56593cb9b644.tar.gz
rust-24c3d85e66b0fd719d9ffa70ae5e56593cb9b644.zip
Make sure that module_id is actually a module
-rw-r--r--src/librustdoc/passes/collect_intra_doc_links.rs14
1 files changed, 13 insertions, 1 deletions
diff --git a/src/librustdoc/passes/collect_intra_doc_links.rs b/src/librustdoc/passes/collect_intra_doc_links.rs
index 65b852f1d61..487a4a5b0a2 100644
--- a/src/librustdoc/passes/collect_intra_doc_links.rs
+++ b/src/librustdoc/passes/collect_intra_doc_links.rs
@@ -466,7 +466,19 @@ impl<'a, 'tcx> DocFolder for LinkCollector<'a, 'tcx> {
             // FIXME: is this correct?
             None
         } else {
-            self.cx.tcx.parent(item.def_id)
+            let mut current = item.def_id;
+            // The immediate parent might not always be a module.
+            // Find the first parent which is.
+            loop {
+                if let Some(parent) = self.cx.tcx.parent(current) {
+                    if self.cx.tcx.def_kind(parent) == DefKind::Mod {
+                        break Some(parent);
+                    }
+                    current = parent;
+                } else {
+                    break None;
+                }
+            }
         };
 
         if parent_node.is_some() {