]> git.lizzy.rs Git - rust.git/commitdiff
Remove unneeded ItemId::Primitive variant
authorGuillaume Gomez <guillaume.gomez@huawei.com>
Mon, 9 Jan 2023 11:09:32 +0000 (12:09 +0100)
committerGuillaume Gomez <guillaume.gomez@huawei.com>
Tue, 10 Jan 2023 17:30:37 +0000 (18:30 +0100)
src/librustdoc/clean/inline.rs
src/librustdoc/clean/types.rs
src/librustdoc/formats/mod.rs
src/librustdoc/html/render/search_index.rs
src/librustdoc/json/conversions.rs

index d1601272af7596e709ab607294aa430b953ca4c0..aad24b4a074927c7d081e9d8fc738bab667d9689 100644 (file)
@@ -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 {
index 827afafbba3b62ca6c2833b5b4b66119c3d9879d..5c63efef717d13d2082838a8106c0fc8c6f1d904 100644 (file)
@@ -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) => {
index b236bd7be4f0c0eb9db8ccde0bf628071d3ca83a..e607a16ad5457016d7f698c7e382932154c7f70d 100644 (file)
@@ -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
-                )
-            }
         }
     }
 
index 2d61519d6c9081bb7401cca103ab9a17fd7973aa..bc74d9cf969741eb56e3ba7cb91c007ab2900ea3 100644 (file)
@@ -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,16 +78,45 @@ 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 insert_into_map<F: std::hash::Hash + Eq>(
+            ty: &mut RenderType,
+            map: &mut FxHashMap<F, usize>,
+            itemid: F,
+            lastpathid: &mut usize,
+            crate_paths: &mut Vec<(ItemType, Symbol)>,
+            item_type: ItemType,
+            path: Symbol,
+        ) {
+            match map.entry(itemid) {
+                Entry::Occupied(entry) => ty.id = Some(RenderTypeId::Index(*entry.get())),
+                Entry::Vacant(entry) => {
+                    let pathid = *lastpathid;
+                    entry.insert(pathid);
+                    *lastpathid += 1;
+                    crate_paths.push((item_type, path));
+                    ty.id = Some(RenderTypeId::Index(pathid));
+                }
+            }
+        }
+
         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, lastpathid, crate_paths);
+                    convert_render_type(
+                        item,
+                        cache,
+                        itemid_to_pathid,
+                        primitives,
+                        lastpathid,
+                        crate_paths,
+                    );
                 }
             }
             let Cache { ref paths, ref external_paths, .. } = *cache;
@@ -95,33 +124,37 @@ fn convert_render_type(
                 assert!(ty.generics.is_some());
                 return;
             };
-            let (itemid, path, item_type) = match id {
+            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)
+                        insert_into_map(
+                            ty,
+                            itemid_to_pathid,
+                            ItemId::DefId(defid),
+                            lastpathid,
+                            crate_paths,
+                            item_type,
+                            *fqp.last().unwrap(),
+                        );
                     } 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) {
-                Entry::Occupied(entry) => ty.id = Some(RenderTypeId::Index(*entry.get())),
-                Entry::Vacant(entry) => {
-                    let pathid = *lastpathid;
-                    entry.insert(pathid);
-                    *lastpathid += 1;
-                    crate_paths.push((item_type, path));
-                    ty.id = Some(RenderTypeId::Index(pathid));
+                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 {
@@ -130,6 +163,7 @@ fn 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,
                 );
index 56283b2c0eff9eb622d385a9f881dae5a52caece..bd95ec18650b3c399c1884c8fd759dc7988cbb18 100644 (file)
@@ -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!(),
     }
 }