diff options
| author | Vadim Petrochenkov <vadim.petrochenkov@gmail.com> | 2022-04-23 13:56:40 +0300 |
|---|---|---|
| committer | Vadim Petrochenkov <vadim.petrochenkov@gmail.com> | 2022-05-13 20:42:53 +0300 |
| commit | 7689857884c8d74f25517373f2d3d4c6fe055614 (patch) | |
| tree | 511241e37c4d7ebca0d768bfe09b5a6d418754d0 | |
| parent | 7c2283d3ca0e8c8c6f872f4eb06b43e5527db8dc (diff) | |
| download | rust-7689857884c8d74f25517373f2d3d4c6fe055614.tar.gz rust-7689857884c8d74f25517373f2d3d4c6fe055614.zip | |
rustdoc: Do not resolve associated item paths unnecessarily
| -rw-r--r-- | src/librustdoc/passes/collect_intra_doc_links.rs | 20 |
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, |
