]> git.lizzy.rs Git - rust.git/commitdiff
rustdoc: Do not resolve associated item paths unnecessarily
authorVadim Petrochenkov <vadim.petrochenkov@gmail.com>
Sat, 23 Apr 2022 10:56:40 +0000 (13:56 +0300)
committerVadim Petrochenkov <vadim.petrochenkov@gmail.com>
Fri, 13 May 2022 17:42:53 +0000 (20:42 +0300)
src/librustdoc/passes/collect_intra_doc_links.rs

index 25702c8ed0ae6df2df81cad2388c77a919f48e42..14929a3772a17f5214f5a088be70c70ff6f2a003 100644 (file)
@@ -505,18 +505,16 @@ fn resolve<'path>(
         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,