1
Fork 0

Remove src field from ExternCrate

This commit is contained in:
Joshua Nelson 2021-04-22 18:54:48 -04:00
parent 25c15cdbe0
commit 5407a69aa4
4 changed files with 14 additions and 6 deletions

View file

@ -86,8 +86,6 @@ impl Clean<ExternalCrate> for CrateNum {
fn clean(&self, cx: &mut DocContext<'_>) -> ExternalCrate { fn clean(&self, cx: &mut DocContext<'_>) -> ExternalCrate {
let tcx = cx.tcx; let tcx = cx.tcx;
let root = DefId { krate: *self, index: CRATE_DEF_INDEX }; 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 // Collect all inner modules which are tagged as implementations of
// primitives. // primitives.
@ -195,8 +193,8 @@ impl Clean<ExternalCrate> for CrateNum {
}; };
ExternalCrate { ExternalCrate {
crate_num: *self,
name: tcx.crate_name(*self), name: tcx.crate_name(*self),
src: krate_src,
attrs: tcx.get_attrs(root).clean(cx), attrs: tcx.get_attrs(root).clean(cx),
primitives, primitives,
keywords, keywords,

View file

@ -72,13 +72,21 @@ crate struct TraitWithExtraInfo {
#[derive(Clone, Debug)] #[derive(Clone, Debug)]
crate struct ExternalCrate { crate struct ExternalCrate {
crate crate_num: CrateNum,
crate name: Symbol, crate name: Symbol,
crate src: FileName,
crate attrs: Attributes, crate attrs: Attributes,
crate primitives: ThinVec<(DefId, PrimitiveType)>, crate primitives: ThinVec<(DefId, PrimitiveType)>,
crate keywords: ThinVec<(DefId, Symbol)>, 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 /// Anything with a source location and set of attributes and, optionally, a
/// name. That is, anything that can be documented. This doesn't correspond /// 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. /// directly to the AST's concept of an item; it's a strict superset.

View file

@ -54,7 +54,9 @@ crate fn krate(cx: &mut DocContext<'_>) -> Crate {
_ => unreachable!(), _ => 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 { let m = match *module.kind {
ItemKind::ModuleItem(ref mut m) => m, ItemKind::ModuleItem(ref mut m) => m,

View file

@ -155,7 +155,7 @@ impl Cache {
// Cache where all our extern crates are located // 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 // 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 { 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() { FileName::Real(ref p) => match p.local_path().parent() {
Some(p) => p.to_path_buf(), Some(p) => p.to_path_buf(),
None => PathBuf::new(), None => PathBuf::new(),