mirror of
https://github.com/rust-lang/rust
synced 2024-10-01 22:34:35 +00:00
Remove unneeded ItemId::Primitive variant
This commit is contained in:
parent
c54c8cbac8
commit
36c9b49c14
|
@ -600,7 +600,9 @@ fn build_module_items(
|
|||
items.push(clean::Item {
|
||||
name: None,
|
||||
attrs: Box::new(clean::Attributes::default()),
|
||||
item_id: ItemId::Primitive(prim_ty, did.krate),
|
||||
// We can use the item's `DefId` directly since the only information ever used
|
||||
// from it is `DefId.krate`.
|
||||
item_id: ItemId::DefId(did),
|
||||
kind: Box::new(clean::ImportItem(clean::Import::new_simple(
|
||||
item.ident.name,
|
||||
clean::ImportSource {
|
||||
|
|
|
@ -62,8 +62,6 @@ pub(crate) enum ItemId {
|
|||
Auto { trait_: DefId, for_: DefId },
|
||||
/// Identifier that is used for blanket implementations.
|
||||
Blanket { impl_id: DefId, for_: DefId },
|
||||
/// Identifier for primitive types.
|
||||
Primitive(PrimitiveType, CrateNum),
|
||||
}
|
||||
|
||||
impl ItemId {
|
||||
|
@ -73,7 +71,6 @@ pub(crate) fn is_local(self) -> bool {
|
|||
ItemId::Auto { for_: id, .. }
|
||||
| ItemId::Blanket { for_: id, .. }
|
||||
| ItemId::DefId(id) => id.is_local(),
|
||||
ItemId::Primitive(_, krate) => krate == LOCAL_CRATE,
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -98,7 +95,6 @@ pub(crate) fn krate(self) -> CrateNum {
|
|||
ItemId::Auto { for_: id, .. }
|
||||
| ItemId::Blanket { for_: id, .. }
|
||||
| ItemId::DefId(id) => id.krate,
|
||||
ItemId::Primitive(_, krate) => krate,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -707,15 +703,13 @@ pub(crate) fn visibility(&self, tcx: TyCtxt<'_>) -> Option<Visibility<DefId>> {
|
|||
let def_id = match self.item_id {
|
||||
// Anything but DefId *shouldn't* matter, but return a reasonable value anyway.
|
||||
ItemId::Auto { .. } | ItemId::Blanket { .. } => return None,
|
||||
// Primitives and Keywords are written in the source code as private modules.
|
||||
// The modules need to be private so that nobody actually uses them, but the
|
||||
// keywords and primitives that they are documenting are public.
|
||||
ItemId::Primitive(..) => return Some(Visibility::Public),
|
||||
ItemId::DefId(def_id) => def_id,
|
||||
};
|
||||
|
||||
match *self.kind {
|
||||
// Explication on `ItemId::Primitive` just above.
|
||||
// Primitives and Keywords are written in the source code as private modules.
|
||||
// The modules need to be private so that nobody actually uses them, but the
|
||||
// keywords and primitives that they are documenting are public.
|
||||
ItemKind::KeywordItem | ItemKind::PrimitiveItem(_) => return Some(Visibility::Public),
|
||||
// Variant fields inherit their enum's visibility.
|
||||
StructFieldItem(..) if is_field_vis_inherited(tcx, def_id) => {
|
||||
|
|
|
@ -53,12 +53,6 @@ pub(crate) fn def_id(&self) -> DefId {
|
|||
ItemId::Blanket { impl_id, .. } => impl_id,
|
||||
ItemId::Auto { trait_, .. } => trait_,
|
||||
ItemId::DefId(def_id) => def_id,
|
||||
ItemId::Primitive(_, _) => {
|
||||
panic!(
|
||||
"Unexpected ItemId::Primitive in expect_def_id: {:?}",
|
||||
self.impl_item.item_id
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -3,7 +3,6 @@
|
|||
|
||||
use rustc_data_structures::fx::FxHashMap;
|
||||
use rustc_middle::ty::TyCtxt;
|
||||
use rustc_span::def_id::LOCAL_CRATE;
|
||||
use rustc_span::symbol::Symbol;
|
||||
use serde::ser::{Serialize, SerializeStruct, Serializer};
|
||||
|
||||
|
@ -24,6 +23,7 @@ pub(crate) fn build_index<'tcx>(
|
|||
tcx: TyCtxt<'tcx>,
|
||||
) -> String {
|
||||
let mut itemid_to_pathid = FxHashMap::default();
|
||||
let mut primitives = FxHashMap::default();
|
||||
let mut crate_paths = vec![];
|
||||
|
||||
// Attach all orphan items to the type's definition if the type
|
||||
|
@ -78,42 +78,16 @@ pub(crate) fn build_index<'tcx>(
|
|||
// First, on function signatures
|
||||
let mut search_index = std::mem::replace(&mut cache.search_index, Vec::new());
|
||||
for item in search_index.iter_mut() {
|
||||
fn convert_render_type(
|
||||
fn insert_into_map<F: std::hash::Hash + Eq>(
|
||||
ty: &mut RenderType,
|
||||
cache: &mut Cache,
|
||||
itemid_to_pathid: &mut FxHashMap<ItemId, usize>,
|
||||
map: &mut FxHashMap<F, usize>,
|
||||
itemid: F,
|
||||
lastpathid: &mut usize,
|
||||
crate_paths: &mut Vec<(ItemType, Symbol)>,
|
||||
item_type: ItemType,
|
||||
path: Symbol,
|
||||
) {
|
||||
if let Some(generics) = &mut ty.generics {
|
||||
for item in generics {
|
||||
convert_render_type(item, cache, itemid_to_pathid, lastpathid, crate_paths);
|
||||
}
|
||||
}
|
||||
let Cache { ref paths, ref external_paths, .. } = *cache;
|
||||
let Some(id) = ty.id.clone() else {
|
||||
assert!(ty.generics.is_some());
|
||||
return;
|
||||
};
|
||||
let (itemid, path, item_type) = match id {
|
||||
RenderTypeId::DefId(defid) => {
|
||||
if let Some(&(ref fqp, item_type)) =
|
||||
paths.get(&defid).or_else(|| external_paths.get(&defid))
|
||||
{
|
||||
(ItemId::DefId(defid), *fqp.last().unwrap(), item_type)
|
||||
} else {
|
||||
ty.id = None;
|
||||
return;
|
||||
}
|
||||
}
|
||||
RenderTypeId::Primitive(primitive) => (
|
||||
ItemId::Primitive(primitive, LOCAL_CRATE),
|
||||
primitive.as_sym(),
|
||||
ItemType::Primitive,
|
||||
),
|
||||
RenderTypeId::Index(_) => return,
|
||||
};
|
||||
match itemid_to_pathid.entry(itemid) {
|
||||
match map.entry(itemid) {
|
||||
Entry::Occupied(entry) => ty.id = Some(RenderTypeId::Index(*entry.get())),
|
||||
Entry::Vacant(entry) => {
|
||||
let pathid = *lastpathid;
|
||||
|
@ -124,12 +98,72 @@ fn convert_render_type(
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn convert_render_type(
|
||||
ty: &mut RenderType,
|
||||
cache: &mut Cache,
|
||||
itemid_to_pathid: &mut FxHashMap<ItemId, usize>,
|
||||
primitives: &mut FxHashMap<Symbol, usize>,
|
||||
lastpathid: &mut usize,
|
||||
crate_paths: &mut Vec<(ItemType, Symbol)>,
|
||||
) {
|
||||
if let Some(generics) = &mut ty.generics {
|
||||
for item in generics {
|
||||
convert_render_type(
|
||||
item,
|
||||
cache,
|
||||
itemid_to_pathid,
|
||||
primitives,
|
||||
lastpathid,
|
||||
crate_paths,
|
||||
);
|
||||
}
|
||||
}
|
||||
let Cache { ref paths, ref external_paths, .. } = *cache;
|
||||
let Some(id) = ty.id.clone() else {
|
||||
assert!(ty.generics.is_some());
|
||||
return;
|
||||
};
|
||||
match id {
|
||||
RenderTypeId::DefId(defid) => {
|
||||
if let Some(&(ref fqp, item_type)) =
|
||||
paths.get(&defid).or_else(|| external_paths.get(&defid))
|
||||
{
|
||||
insert_into_map(
|
||||
ty,
|
||||
itemid_to_pathid,
|
||||
ItemId::DefId(defid),
|
||||
lastpathid,
|
||||
crate_paths,
|
||||
item_type,
|
||||
*fqp.last().unwrap(),
|
||||
);
|
||||
} else {
|
||||
ty.id = None;
|
||||
}
|
||||
}
|
||||
RenderTypeId::Primitive(primitive) => {
|
||||
let sym = primitive.as_sym();
|
||||
insert_into_map(
|
||||
ty,
|
||||
primitives,
|
||||
sym,
|
||||
lastpathid,
|
||||
crate_paths,
|
||||
ItemType::Primitive,
|
||||
sym,
|
||||
);
|
||||
}
|
||||
RenderTypeId::Index(_) => {}
|
||||
}
|
||||
}
|
||||
if let Some(search_type) = &mut item.search_type {
|
||||
for item in &mut search_type.inputs {
|
||||
convert_render_type(
|
||||
item,
|
||||
cache,
|
||||
&mut itemid_to_pathid,
|
||||
&mut primitives,
|
||||
&mut lastpathid,
|
||||
&mut crate_paths,
|
||||
);
|
||||
|
@ -139,6 +173,7 @@ fn convert_render_type(
|
|||
item,
|
||||
cache,
|
||||
&mut itemid_to_pathid,
|
||||
&mut primitives,
|
||||
&mut lastpathid,
|
||||
&mut crate_paths,
|
||||
);
|
||||
|
|
|
@ -252,7 +252,6 @@ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
|||
ItemId::Auto { for_, trait_ } => {
|
||||
Id(format!("a:{}-{}", DisplayDefId(trait_, tcx, None), DisplayDefId(for_, tcx, name)))
|
||||
}
|
||||
ItemId::Primitive(_, _) => unreachable!(),
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue