From 5407a69aa4a816fdfd9cf6f659643f78659c1f88 Mon Sep 17 00:00:00 2001 From: Joshua Nelson Date: Thu, 22 Apr 2021 18:54:48 -0400 Subject: [PATCH] Remove src field from ExternCrate --- src/librustdoc/clean/mod.rs | 4 +--- src/librustdoc/clean/types.rs | 10 +++++++++- src/librustdoc/clean/utils.rs | 4 +++- src/librustdoc/formats/cache.rs | 2 +- 4 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/librustdoc/clean/mod.rs b/src/librustdoc/clean/mod.rs index 7d33cf210139..1b8c82b8323f 100644 --- a/src/librustdoc/clean/mod.rs +++ b/src/librustdoc/clean/mod.rs @@ -86,8 +86,6 @@ impl Clean for CrateNum { fn clean(&self, cx: &mut DocContext<'_>) -> ExternalCrate { let tcx = cx.tcx; let root = DefId { krate: *self, index: CRATE_DEF_INDEX }; - let krate_span = tcx.def_span(root); - let krate_src = cx.sess().source_map().span_to_filename(krate_span); // Collect all inner modules which are tagged as implementations of // primitives. @@ -195,8 +193,8 @@ impl Clean for CrateNum { }; ExternalCrate { + crate_num: *self, name: tcx.crate_name(*self), - src: krate_src, attrs: tcx.get_attrs(root).clean(cx), primitives, keywords, diff --git a/src/librustdoc/clean/types.rs b/src/librustdoc/clean/types.rs index 2b25c6a26bcc..b24d441f0f85 100644 --- a/src/librustdoc/clean/types.rs +++ b/src/librustdoc/clean/types.rs @@ -72,13 +72,21 @@ crate struct TraitWithExtraInfo { #[derive(Clone, Debug)] crate struct ExternalCrate { + crate crate_num: CrateNum, crate name: Symbol, - crate src: FileName, crate attrs: Attributes, crate primitives: ThinVec<(DefId, PrimitiveType)>, crate keywords: ThinVec<(DefId, Symbol)>, } +impl ExternalCrate { + crate fn src(&self, tcx: TyCtxt<'_>) -> FileName { + let root = DefId { krate: self.crate_num, index: rustc_hir::def_id::CRATE_DEF_INDEX }; + let krate_span = tcx.def_span(root); + tcx.sess.source_map().span_to_filename(krate_span) + } +} + /// Anything with a source location and set of attributes and, optionally, a /// name. That is, anything that can be documented. This doesn't correspond /// directly to the AST's concept of an item; it's a strict superset. diff --git a/src/librustdoc/clean/utils.rs b/src/librustdoc/clean/utils.rs index c2a971d63751..7d058f9e92c6 100644 --- a/src/librustdoc/clean/utils.rs +++ b/src/librustdoc/clean/utils.rs @@ -54,7 +54,9 @@ crate fn krate(cx: &mut DocContext<'_>) -> Crate { _ => unreachable!(), } - let ExternalCrate { name, src, primitives, keywords, .. } = LOCAL_CRATE.clean(cx); + let local_crate = LOCAL_CRATE.clean(cx); + let src = local_crate.src(cx.tcx); + let ExternalCrate { name, primitives, keywords, .. } = local_crate; { let m = match *module.kind { ItemKind::ModuleItem(ref mut m) => m, diff --git a/src/librustdoc/formats/cache.rs b/src/librustdoc/formats/cache.rs index b2b895cc6726..5766ed7497d7 100644 --- a/src/librustdoc/formats/cache.rs +++ b/src/librustdoc/formats/cache.rs @@ -155,7 +155,7 @@ impl Cache { // Cache where all our extern crates are located // FIXME: this part is specific to HTML so it'd be nice to remove it from the common code for &(n, ref e) in &krate.externs { - let src_root = match e.src { + let src_root = match e.src(tcx) { FileName::Real(ref p) => match p.local_path().parent() { Some(p) => p.to_path_buf(), None => PathBuf::new(),