about summary refs log tree commit diff
diff options
context:
space:
mode:
authorJoshua Nelson <jyn514@gmail.com>2021-04-22 18:54:48 -0400
committerJoshua Nelson <jyn514@gmail.com>2021-04-22 18:54:59 -0400
commit5407a69aa4a816fdfd9cf6f659643f78659c1f88 (patch)
tree5c90cca0927ae80d70082e045ebdd9696920d5b0
parent25c15cdbe070f49d708f34750df2632e38bd4846 (diff)
downloadrust-5407a69aa4a816fdfd9cf6f659643f78659c1f88.tar.gz
rust-5407a69aa4a816fdfd9cf6f659643f78659c1f88.zip
Remove src field from ExternCrate
-rw-r--r--src/librustdoc/clean/mod.rs4
-rw-r--r--src/librustdoc/clean/types.rs10
-rw-r--r--src/librustdoc/clean/utils.rs4
-rw-r--r--src/librustdoc/formats/cache.rs2
4 files changed, 14 insertions, 6 deletions
diff --git a/src/librustdoc/clean/mod.rs b/src/librustdoc/clean/mod.rs
index 7d33cf21013..1b8c82b8323 100644
--- a/src/librustdoc/clean/mod.rs
+++ b/src/librustdoc/clean/mod.rs
@@ -86,8 +86,6 @@ impl Clean<ExternalCrate> 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<ExternalCrate> 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 2b25c6a26bc..b24d441f0f8 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 c2a971d6375..7d058f9e92c 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 b2b895cc672..5766ed7497d 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(),