]> git.lizzy.rs Git - rust.git/commitdiff
Rustdoc-Json: Don't loose subitems of foreign traits.
authorNixon Enraght-Moony <nixon.emoony@gmail.com>
Tue, 13 Sep 2022 17:34:15 +0000 (18:34 +0100)
committerNixon Enraght-Moony <nixon.emoony@gmail.com>
Tue, 13 Sep 2022 17:34:15 +0000 (18:34 +0100)
src/etc/check_missing_items.py
src/librustdoc/json/mod.rs
src/test/rustdoc-json/traits/uses_extern_trait.rs [new file with mode: 0644]

index 991c881bae10d8b707b2e1c3cd43ba4725fb7076..0026c4cbdca2ce609a64d5df04f02c3680bb1d33 100644 (file)
@@ -49,6 +49,8 @@ def check_generic_param(param):
         ty = param["kind"]["type"]
         if ty["default"]:
             check_type(ty["default"])
+        for bound in ty["bounds"]:
+            check_generic_bound(bound)
     elif "const" in param["kind"]:
         check_type(param["kind"]["const"])
 
@@ -88,8 +90,11 @@ def check_path(path):
                 check_type(input_ty)
             if args["parenthesized"]["output"]:
                 check_type(args["parenthesized"]["output"])
-    if not valid_id(path["id"]):
-        print("Type contained an invalid ID:", path["id"])
+
+    if path["id"] in crate["index"]:
+        work_list.add(path["id"])
+    elif path["id"] not in crate["paths"]:
+        print("Id not in index or paths:", path["id"])
         sys.exit(1)
 
 def check_type(ty):
index 6a1409c739424cf3c8533bb4fc925f2134c8b739..5e8f5f6fe3eb9309820afbf700f1c617928aeb8d 100644 (file)
@@ -101,6 +101,7 @@ fn get_impls(&mut self, id: DefId) -> Vec<types::Id> {
     }
 
     fn get_trait_items(&mut self) -> Vec<(types::Id, types::Item)> {
+        debug!("Adding foreign trait items");
         Rc::clone(&self.cache)
             .traits
             .iter()
@@ -109,6 +110,7 @@ fn get_trait_items(&mut self) -> Vec<(types::Id, types::Item)> {
                 if !id.is_local() {
                     let trait_item = &trait_item.trait_;
                     for item in &trait_item.items {
+                        trace!("Adding subitem to {id:?}: {:?}", item.item_id);
                         self.item(item.clone()).unwrap();
                     }
                     let item_id = from_item_id(id.into(), self.tcx);
@@ -184,7 +186,9 @@ fn make_child_renderer(&self) -> Self {
     /// the hashmap because certain items (traits and types) need to have their mappings for trait
     /// implementations filled out before they're inserted.
     fn item(&mut self, item: clean::Item) -> Result<(), Error> {
-        trace!("rendering {} {:?}", item.type_(), item.name);
+        let item_type = item.type_();
+        let item_name = item.name;
+        trace!("rendering {} {:?}", item_type, item_name);
 
         // Flatten items that recursively store other items. We include orphaned items from
         // stripped modules and etc that are otherwise reachable.
@@ -253,6 +257,7 @@ fn item(&mut self, item: clean::Item) -> Result<(), Error> {
             }
         }
 
+        trace!("done rendering {} {:?}", item_type, item_name);
         Ok(())
     }
 
@@ -263,14 +268,20 @@ fn mod_item_in(&mut self, _item: &clean::Item) -> Result<(), Error> {
     fn after_krate(&mut self) -> Result<(), Error> {
         debug!("Done with crate");
 
+        debug!("Adding Primitve impls");
         for primitive in Rc::clone(&self.cache).primitive_locations.values() {
             self.get_impls(*primitive);
         }
 
         let e = ExternalCrate { crate_num: LOCAL_CRATE };
 
+        // FIXME(adotinthevoid): Remove this, as it's not consistant with not
+        // inlining foreign items.
+        let foreign_trait_items = self.get_trait_items();
         let mut index = (*self.index).clone().into_inner();
-        index.extend(self.get_trait_items());
+        index.extend(foreign_trait_items);
+
+        debug!("Constructing Output");
         // This needs to be the default HashMap for compatibility with the public interface for
         // rustdoc-json-types
         #[allow(rustc::default_hash_types)]
diff --git a/src/test/rustdoc-json/traits/uses_extern_trait.rs b/src/test/rustdoc-json/traits/uses_extern_trait.rs
new file mode 100644 (file)
index 0000000..430dd15
--- /dev/null
@@ -0,0 +1,7 @@
+#![no_std]
+pub fn drop_default<T: core::default::Default>(_x: T) {}
+
+// FIXME(adotinthevoid): Theses shouldn't be here
+// @has "$.index[*][?(@.name=='Debug')]"
+// @set Debug_fmt = "$.index[*][?(@.name=='Debug')].inner.items[*]"
+// @has "$.index[*][?(@.name=='fmt')].id" $Debug_fmt