1
Fork 0

Remove unnecessary CrateNum from Cache.externs

It can be found from ExternalCrate.
This commit is contained in:
Joshua Nelson 2021-07-05 12:35:02 -04:00
parent 3e1c75c6e2
commit e32eceefe1
3 changed files with 12 additions and 13 deletions

View file

@ -118,7 +118,7 @@ crate struct Crate {
crate name: Symbol, crate name: Symbol,
crate src: FileName, crate src: FileName,
crate module: Item, crate module: Item,
crate externs: Vec<(CrateNum, ExternalCrate)>, crate externs: Vec<ExternalCrate>,
crate primitives: ThinVec<(DefId, PrimitiveType)>, crate primitives: ThinVec<(DefId, PrimitiveType)>,
// These are later on moved into `CACHEKEY`, leaving the map empty. // These are later on moved into `CACHEKEY`, leaving the map empty.
// Only here so that they can be filtered through the rustdoc passes. // Only here so that they can be filtered through the rustdoc passes.
@ -133,14 +133,14 @@ crate struct TraitWithExtraInfo {
crate is_notable: bool, crate is_notable: bool,
} }
#[derive(Clone, Debug)] #[derive(Copy, Clone, Debug, PartialEq, Eq, PartialOrd, Ord)]
crate struct ExternalCrate { crate struct ExternalCrate {
crate crate_num: CrateNum, crate crate_num: CrateNum,
} }
impl ExternalCrate { impl ExternalCrate {
#[inline] #[inline]
fn def_id(&self) -> DefId { crate fn def_id(&self) -> DefId {
DefId { krate: self.crate_num, index: CRATE_DEF_INDEX } DefId { krate: self.crate_num, index: CRATE_DEF_INDEX }
} }

View file

@ -1,9 +1,9 @@
use crate::clean::auto_trait::AutoTraitFinder; use crate::clean::auto_trait::AutoTraitFinder;
use crate::clean::blanket_impl::BlanketImplFinder; use crate::clean::blanket_impl::BlanketImplFinder;
use crate::clean::{ use crate::clean::{
inline, Clean, Crate, Generic, GenericArg, GenericArgs, ImportSource, Item, ItemKind, Lifetime, inline, Clean, Crate, ExternalCrate, Generic, GenericArg, GenericArgs, ImportSource, Item,
Path, PathSegment, PolyTrait, Primitive, PrimitiveType, ResolvedPath, Type, TypeBinding, ItemKind, Lifetime, Path, PathSegment, PolyTrait, Primitive, PrimitiveType, ResolvedPath, Type,
Visibility, TypeBinding, Visibility,
}; };
use crate::core::DocContext; use crate::core::DocContext;
use crate::formats::item_type::ItemType; use crate::formats::item_type::ItemType;
@ -35,11 +35,11 @@ crate fn krate(cx: &mut DocContext<'_>) -> Crate {
let mut externs = Vec::new(); let mut externs = Vec::new();
for &cnum in cx.tcx.crates(()).iter() { for &cnum in cx.tcx.crates(()).iter() {
externs.push((cnum, cnum.clean(cx))); externs.push(ExternalCrate { crate_num: cnum });
// Analyze doc-reachability for extern items // Analyze doc-reachability for extern items
LibEmbargoVisitor::new(cx).visit_lib(cnum); LibEmbargoVisitor::new(cx).visit_lib(cnum);
} }
externs.sort_by(|&(a, _), &(b, _)| a.cmp(&b)); externs.sort_unstable();
// Clean the crate, translating the entire librustc_ast AST to one that is // Clean the crate, translating the entire librustc_ast AST to one that is
// understood by rustdoc. // understood by rustdoc.

View file

@ -151,19 +151,18 @@ 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 &e in &krate.externs {
let name = e.name(tcx); let name = e.name(tcx);
let extern_url = extern_html_root_urls.get(&*name.as_str()).map(|u| &**u); let extern_url = extern_html_root_urls.get(&*name.as_str()).map(|u| &**u);
let did = DefId { krate: n, index: CRATE_DEF_INDEX }; self.extern_locations.insert(e.crate_num, e.location(extern_url, &dst, tcx));
self.extern_locations.insert(n, e.location(extern_url, &dst, tcx)); self.external_paths.insert(e.def_id(), (vec![name.to_string()], ItemType::Module));
self.external_paths.insert(did, (vec![name.to_string()], ItemType::Module));
} }
// Cache where all known primitives have their documentation located. // Cache where all known primitives have their documentation located.
// //
// Favor linking to as local extern as possible, so iterate all crates in // Favor linking to as local extern as possible, so iterate all crates in
// reverse topological order. // reverse topological order.
for &(_, ref e) in krate.externs.iter().rev() { for &e in krate.externs.iter().rev() {
for &(def_id, prim) in &e.primitives(tcx) { for &(def_id, prim) in &e.primitives(tcx) {
self.primitive_locations.insert(prim, def_id); self.primitive_locations.insert(prim, def_id);
} }