about summary refs log tree commit diff
diff options
context:
space:
mode:
authorVadim Petrochenkov <vadim.petrochenkov@gmail.com>2022-04-23 13:56:40 +0300
committerVadim Petrochenkov <vadim.petrochenkov@gmail.com>2022-05-13 20:42:53 +0300
commit7689857884c8d74f25517373f2d3d4c6fe055614 (patch)
tree511241e37c4d7ebca0d768bfe09b5a6d418754d0
parent7c2283d3ca0e8c8c6f872f4eb06b43e5527db8dc (diff)
downloadrust-7689857884c8d74f25517373f2d3d4c6fe055614.tar.gz
rust-7689857884c8d74f25517373f2d3d4c6fe055614.zip
rustdoc: Do not resolve associated item paths unnecessarily
-rw-r--r--src/librustdoc/passes/collect_intra_doc_links.rs20
1 files changed, 9 insertions, 11 deletions
diff --git a/src/librustdoc/passes/collect_intra_doc_links.rs b/src/librustdoc/passes/collect_intra_doc_links.rs
index 25702c8ed0a..14929a3772a 100644
--- a/src/librustdoc/passes/collect_intra_doc_links.rs
+++ b/src/librustdoc/passes/collect_intra_doc_links.rs
@@ -505,18 +505,16 @@ impl<'a, 'tcx> LinkCollector<'a, 'tcx> {
         module_id: DefId,
     ) -> Result<(Res, Option<DefId>), UnresolvedPath<'path>> {
         if let Some(res) = self.resolve_path(path_str, ns, item_id, module_id) {
-            match res {
-                // FIXME(#76467): make this fallthrough to lookup the associated
-                // item a separate function.
-                Res::Def(DefKind::AssocFn | DefKind::AssocConst, _) => assert_eq!(ns, ValueNS),
-                Res::Def(DefKind::AssocTy, _) => assert_eq!(ns, TypeNS),
-                Res::Def(DefKind::Variant, def_id) => {
-                    let enum_def_id = self.cx.tcx.parent(def_id).expect("variant has no parent");
-                    return Ok((Res::Def(DefKind::Enum, enum_def_id), Some(def_id)));
+            return Ok(match res {
+                Res::Def(
+                    DefKind::AssocFn | DefKind::AssocConst | DefKind::AssocTy | DefKind::Variant,
+                    def_id,
+                ) => {
+                    let parent_def_id = self.cx.tcx.parent(def_id).unwrap();
+                    (Res::from_def_id(self.cx.tcx, parent_def_id), Some(def_id))
                 }
-                // Not a trait item; just return what we found.
-                _ => return Ok((res, None)),
-            }
+                _ => ((res, None)),
+            });
         } else if ns == MacroNS {
             return Err(UnresolvedPath {
                 item_id,