about summary refs log tree commit diff
diff options
context:
space:
mode:
authorNixon Enraght-Moony <nixon.emoony@gmail.com>2020-11-30 20:24:48 +0000
committerNixon Enraght-Moony <nixon.emoony@gmail.com>2020-12-01 18:34:39 +0000
commit40b5470b0db1997fe28bd774171b4f958fa7d240 (patch)
treec8d71df14507bc1df479f4a832859bd21a9fc662
parent1098cce27acb2d52cb3b5ddbcf28c3a06e38dc7c (diff)
downloadrust-40b5470b0db1997fe28bd774171b4f958fa7d240.tar.gz
rust-40b5470b0db1997fe28bd774171b4f958fa7d240.zip
Address review comments.
Go back to CRATE_DEF_INDEX

Minor niceness improvements

Don't output hidden items

Remove striped items from fields

Add $TEST_BASE_DIR

Small catch
-rw-r--r--src/librustdoc/clean/mod.rs2
-rw-r--r--src/librustdoc/json/conversions.rs76
-rw-r--r--src/librustdoc/json/mod.rs18
-rw-r--r--src/librustdoc/json/types.rs3
-rw-r--r--src/librustdoc/lib.rs1
-rw-r--r--src/test/rustdoc-json/Makefile6
-rw-r--r--src/test/rustdoc-json/compare.py21
-rw-r--r--src/test/rustdoc-json/structs.expected42
-rw-r--r--src/tools/compiletest/src/runtest.rs14
9 files changed, 80 insertions, 103 deletions
diff --git a/src/librustdoc/clean/mod.rs b/src/librustdoc/clean/mod.rs
index 9d42705da82..d294d8f02a8 100644
--- a/src/librustdoc/clean/mod.rs
+++ b/src/librustdoc/clean/mod.rs
@@ -2281,7 +2281,7 @@ impl Clean<Vec<Item>> for doctree::Import<'_> {
             name: None,
             attrs: self.attrs.clean(cx),
             source: self.span.clean(cx),
-            def_id: cx.tcx.hir().local_def_id(self.id).to_def_id(),
+            def_id: DefId::local(CRATE_DEF_INDEX),
             visibility: self.vis.clean(cx),
             stability: None,
             const_stability: None,
diff --git a/src/librustdoc/json/conversions.rs b/src/librustdoc/json/conversions.rs
index 80192623d54..4d57b337879 100644
--- a/src/librustdoc/json/conversions.rs
+++ b/src/librustdoc/json/conversions.rs
@@ -12,43 +12,44 @@ use crate::doctree;
 use crate::formats::item_type::ItemType;
 use crate::json::types::*;
 
-impl From<clean::Item> for Item {
+impl From<clean::Item> for Option<Item> {
     fn from(item: clean::Item) -> Self {
         let item_type = ItemType::from(&item);
         let clean::Item {
             source,
             name,
             attrs,
-            kind: inner,
+            kind,
             visibility,
             def_id,
             stability: _,
             deprecation,
         } = item;
-        Item {
-            id: def_id.into(),
-            crate_id: def_id.krate.as_u32(),
-            name,
-            stripped: match inner {
-                clean::StrippedItem(_) => true,
-                _ => false,
-            },
-            source: source.into(),
-            visibility: visibility.into(),
-            docs: attrs.collapsed_doc_value().unwrap_or_default(),
-            links: attrs
-                .links
-                .into_iter()
-                .filter_map(|clean::ItemLink { link, did, .. }| did.map(|did| (link, did.into())))
-                .collect(),
-            attrs: attrs
-                .other_attrs
-                .iter()
-                .map(rustc_ast_pretty::pprust::attribute_to_string)
-                .collect(),
-            deprecation: deprecation.map(Into::into),
-            kind: item_type.into(),
-            inner: inner.into(),
+        match kind {
+            clean::StrippedItem(_) => None,
+            _ => Some(Item {
+                id: def_id.into(),
+                crate_id: def_id.krate.as_u32(),
+                name,
+                source: source.into(),
+                visibility: visibility.into(),
+                docs: attrs.collapsed_doc_value().unwrap_or_default(),
+                links: attrs
+                    .links
+                    .into_iter()
+                    .filter_map(|clean::ItemLink { link, did, .. }| {
+                        did.map(|did| (link, did.into()))
+                    })
+                    .collect(),
+                attrs: attrs
+                    .other_attrs
+                    .iter()
+                    .map(rustc_ast_pretty::pprust::attribute_to_string)
+                    .collect(),
+                deprecation: deprecation.map(Into::into),
+                kind: item_type.into(),
+                inner: kind.into(),
+            }),
         }
     }
 }
@@ -194,10 +195,7 @@ impl From<clean::ItemKind> for ItemEnum {
 
 impl From<clean::Module> for Module {
     fn from(module: clean::Module) -> Self {
-        Module {
-            is_crate: module.is_crate,
-            items: module.items.into_iter().map(|i| i.def_id.into()).collect(),
-        }
+        Module { is_crate: module.is_crate, items: ids(module.items) }
     }
 }
 
@@ -208,7 +206,7 @@ impl From<clean::Struct> for Struct {
             struct_type: struct_type.into(),
             generics: generics.into(),
             fields_stripped,
-            fields: fields.into_iter().map(|i| i.def_id.into()).collect(),
+            fields: ids(fields),
             impls: Vec::new(), // Added in JsonRenderer::item
         }
     }
@@ -221,7 +219,7 @@ impl From<clean::Union> for Struct {
             struct_type: struct_type.into(),
             generics: generics.into(),
             fields_stripped,
-            fields: fields.into_iter().map(|i| i.def_id.into()).collect(),
+            fields: ids(fields),
             impls: Vec::new(), // Added in JsonRenderer::item
         }
     }
@@ -407,7 +405,7 @@ impl From<clean::Trait> for Trait {
         Trait {
             is_auto,
             is_unsafe: unsafety == rustc_hir::Unsafety::Unsafe,
-            items: items.into_iter().map(|i| i.def_id.into()).collect(),
+            items: ids(items),
             generics: generics.into(),
             bounds: bounds.into_iter().map(Into::into).collect(),
             implementors: Vec::new(), // Added in JsonRenderer::item
@@ -434,7 +432,7 @@ impl From<clean::Impl> for Impl {
             provided_trait_methods: provided_trait_methods.into_iter().collect(),
             trait_: trait_.map(Into::into),
             for_: for_.into(),
-            items: items.into_iter().map(|i| i.def_id.into()).collect(),
+            items: ids(items),
             negative: polarity == Some(clean::ImplPolarity::Negative),
             synthetic,
             blanket_impl: blanket_impl.map(Into::into),
@@ -460,7 +458,7 @@ impl From<clean::Enum> for Enum {
         Enum {
             generics: generics.into(),
             variants_stripped,
-            variants: variants.into_iter().map(|i| i.def_id.into()).collect(),
+            variants: ids(variants),
             impls: Vec::new(), // Added in JsonRenderer::item
         }
     }
@@ -473,7 +471,7 @@ impl From<clean::VariantStruct> for Struct {
             struct_type: struct_type.into(),
             generics: Default::default(),
             fields_stripped,
-            fields: fields.into_iter().map(|i| i.def_id.into()).collect(),
+            fields: ids(fields),
             impls: Vec::new(),
         }
     }
@@ -485,7 +483,7 @@ impl From<clean::Variant> for Variant {
         match variant.kind {
             CLike => Variant::Plain,
             Tuple(t) => Variant::Tuple(t.into_iter().map(Into::into).collect()),
-            Struct(s) => Variant::Struct(s.fields.into_iter().map(|i| i.def_id.into()).collect()),
+            Struct(s) => Variant::Struct(ids(s.fields)),
         }
     }
 }
@@ -594,3 +592,7 @@ impl From<ItemType> for ItemKind {
         }
     }
 }
+
+fn ids(items: impl IntoIterator<Item = clean::Item>) -> Vec<Id> {
+    items.into_iter().filter(|x| !x.is_stripped()).map(|i| i.def_id.into()).collect()
+}
diff --git a/src/librustdoc/json/mod.rs b/src/librustdoc/json/mod.rs
index 20a8de144ad..c080ad21c0f 100644
--- a/src/librustdoc/json/mod.rs
+++ b/src/librustdoc/json/mod.rs
@@ -99,7 +99,6 @@ impl JsonRenderer {
                                 .0
                                 .last()
                                 .map(Clone::clone),
-                            stripped: false,
                             visibility: types::Visibility::Public,
                             kind: types::ItemKind::Trait,
                             inner: types::ItemEnum::TraitItem(trait_item.clone().into()),
@@ -144,16 +143,17 @@ impl FormatRenderer for JsonRenderer {
         item.kind.inner_items().for_each(|i| self.item(i.clone(), cache).unwrap());
 
         let id = item.def_id;
-        let mut new_item: types::Item = item.into();
-        if let types::ItemEnum::TraitItem(ref mut t) = new_item.inner {
-            t.implementors = self.get_trait_implementors(id, cache)
-        } else if let types::ItemEnum::StructItem(ref mut s) = new_item.inner {
-            s.impls = self.get_impls(id, cache)
-        } else if let types::ItemEnum::EnumItem(ref mut e) = new_item.inner {
-            e.impls = self.get_impls(id, cache)
+        if let Some(mut new_item) = item.into(): Option<types::Item> {
+            if let types::ItemEnum::TraitItem(ref mut t) = new_item.inner {
+                t.implementors = self.get_trait_implementors(id, cache)
+            } else if let types::ItemEnum::StructItem(ref mut s) = new_item.inner {
+                s.impls = self.get_impls(id, cache)
+            } else if let types::ItemEnum::EnumItem(ref mut e) = new_item.inner {
+                e.impls = self.get_impls(id, cache)
+            }
+            self.index.borrow_mut().insert(id.into(), new_item);
         }
 
-        self.index.borrow_mut().insert(id.into(), new_item);
         Ok(())
     }
 
diff --git a/src/librustdoc/json/types.rs b/src/librustdoc/json/types.rs
index 62705affafc..10bf2a2acc5 100644
--- a/src/librustdoc/json/types.rs
+++ b/src/librustdoc/json/types.rs
@@ -62,9 +62,6 @@ pub struct Item {
     pub crate_id: u32,
     /// Some items such as impls don't have names.
     pub name: Option<String>,
-    /// Whether this item is meant to be omitted from the generated documentation due to `#doc(hidden)`,
-    /// because it is private, or because it was inlined.
-    pub stripped: bool,
     /// The source location of this item (absent if it came from a macro expansion or inline
     /// assembly).
     pub source: Option<Span>,
diff --git a/src/librustdoc/lib.rs b/src/librustdoc/lib.rs
index 751f2301053..80a9c3811cf 100644
--- a/src/librustdoc/lib.rs
+++ b/src/librustdoc/lib.rs
@@ -14,6 +14,7 @@
 #![feature(crate_visibility_modifier)]
 #![feature(never_type)]
 #![feature(once_cell)]
+#![feature(type_ascription)]
 #![recursion_limit = "256"]
 
 #[macro_use]
diff --git a/src/test/rustdoc-json/Makefile b/src/test/rustdoc-json/Makefile
deleted file mode 100644
index ad517ae95eb..00000000000
--- a/src/test/rustdoc-json/Makefile
+++ /dev/null
@@ -1,6 +0,0 @@
--include ../tools.mk
-
-tests: *.rs
-	$(RUSTDOC) $< -o $(TMPDIR) --output-format json
-	$(PYTHON) check_missing_items.py $(TMPDIR)/$(basename $<).json
-	$(PYTHON) compare.py $(basename $<).expected $(TMPDIR)/$(basename $<).json
diff --git a/src/test/rustdoc-json/compare.py b/src/test/rustdoc-json/compare.py
index afc8066685c..422e48ea39a 100644
--- a/src/test/rustdoc-json/compare.py
+++ b/src/test/rustdoc-json/compare.py
@@ -34,23 +34,18 @@ def check_subset(expected_main, actual_main, base_dir):
     def _check_subset(expected, actual, trace):
         expected_type = type(expected)
         actual_type = type(actual)
+
+        if actual_type is str:
+            actual = actual.replace(base_dir, "$TEST_BASE_DIR")
+
         if expected_type is not actual_type:
             raise SubsetException(
                 "expected type `{}`, got `{}`".format(expected_type, actual_type), trace
             )
-        if expected_type in (str, int, bool) and expected != actual:
-            if expected_type == str and actual.startswith(base_dir):
-                if actual.replace(base_dir + "/", "") != expected:
-                    raise SubsetException(
-                        "expected `{}`, got: `{}`".format(
-                            expected, actual.replace(base_dir + "/", "")
-                        ),
-                        trace,
-                    )
-            else:
-                raise SubsetException(
-                    "expected `{}`, got: `{}`".format(expected, actual), trace
-                )
+
+
+        if expected_type in (int, bool, str) and expected != actual:
+            raise SubsetException("expected `{}`, got: `{}`".format(expected, actual), trace)
         if expected_type is dict:
             for key in expected:
                 if key not in actual:
diff --git a/src/test/rustdoc-json/structs.expected b/src/test/rustdoc-json/structs.expected
index 45b23534bc7..799829de3fd 100644
--- a/src/test/rustdoc-json/structs.expected
+++ b/src/test/rustdoc-json/structs.expected
@@ -7,7 +7,7 @@
       "crate_id": 0,
       "name": "Unit",
       "source": {
-        "filename": "structs.rs",
+        "filename": "$TEST_BASE_DIR/structs.rs",
         "begin": [
           7,
           0
@@ -37,7 +37,7 @@
       "crate_id": 0,
       "name": "1",
       "source": {
-        "filename": "structs.rs",
+        "filename": "$TEST_BASE_DIR/structs.rs",
         "begin": [
           5,
           22
@@ -72,7 +72,7 @@
       "crate_id": 0,
       "name": "stuff",
       "source": {
-        "filename": "structs.rs",
+        "filename": "$TEST_BASE_DIR/structs.rs",
         "begin": [
           15,
           4
@@ -114,7 +114,7 @@
       "crate_id": 0,
       "name": "WithPrimitives",
       "source": {
-        "filename": "structs.rs",
+        "filename": "$TEST_BASE_DIR/structs.rs",
         "begin": [
           9,
           0
@@ -141,18 +141,14 @@
           ],
           "where_predicates": []
         },
-        "fields_stripped": true,
-        "fields": [
-          "0:13",
-          "0:14"
-        ]
+        "fields_stripped": true
       }
     },
     "0:14": {
       "crate_id": 0,
       "name": "s",
       "source": {
-        "filename": "structs.rs",
+        "filename": "$TEST_BASE_DIR/structs.rs",
         "begin": [
           11,
           4
@@ -184,7 +180,7 @@
       "crate_id": 0,
       "name": "things",
       "source": {
-        "filename": "structs.rs",
+        "filename": "$TEST_BASE_DIR/structs.rs",
         "begin": [
           16,
           4
@@ -232,7 +228,7 @@
       "crate_id": 0,
       "name": "WithGenerics",
       "source": {
-        "filename": "structs.rs",
+        "filename": "$TEST_BASE_DIR/structs.rs",
         "begin": [
           14,
           0
@@ -273,18 +269,14 @@
           ],
           "where_predicates": []
         },
-        "fields_stripped": true,
-        "fields": [
-          "0:18",
-          "0:19"
-        ]
+        "fields_stripped": true
       }
     },
     "0:0": {
       "crate_id": 0,
       "name": "structs",
       "source": {
-        "filename": "structs.rs",
+        "filename": "$TEST_BASE_DIR/structs.rs",
         "begin": [
           1,
           0
@@ -315,7 +307,7 @@
       "crate_id": 0,
       "name": "num",
       "source": {
-        "filename": "structs.rs",
+        "filename": "$TEST_BASE_DIR/structs.rs",
         "begin": [
           10,
           4
@@ -340,7 +332,7 @@
       "crate_id": 0,
       "name": "Tuple",
       "source": {
-        "filename": "structs.rs",
+        "filename": "$TEST_BASE_DIR/structs.rs",
         "begin": [
           5,
           0
@@ -362,18 +354,14 @@
           "params": [],
           "where_predicates": []
         },
-        "fields_stripped": true,
-        "fields": [
-          "0:7",
-          "0:8"
-        ]
+        "fields_stripped": true
       }
     },
     "0:4": {
       "crate_id": 0,
       "name": "PlainEmpty",
       "source": {
-        "filename": "structs.rs",
+        "filename": "$TEST_BASE_DIR/structs.rs",
         "begin": [
           3,
           0
@@ -403,7 +391,7 @@
       "crate_id": 0,
       "name": "0",
       "source": {
-        "filename": "structs.rs",
+        "filename": "$TEST_BASE_DIR/structs.rs",
         "begin": [
           5,
           17
diff --git a/src/tools/compiletest/src/runtest.rs b/src/tools/compiletest/src/runtest.rs
index 88cb8544e47..e9089b4b15b 100644
--- a/src/tools/compiletest/src/runtest.rs
+++ b/src/tools/compiletest/src/runtest.rs
@@ -1565,7 +1565,7 @@ impl<'test> TestCx<'test> {
         self.compose_and_run_compiler(rustc, None)
     }
 
-    fn document(&self, out_dir: &Path, json: bool) -> ProcRes {
+    fn document(&self, out_dir: &Path) -> ProcRes {
         if self.props.build_aux_docs {
             for rel_ab in &self.props.aux_builds {
                 let aux_testpaths = self.compute_aux_test_paths(rel_ab);
@@ -1579,7 +1579,7 @@ impl<'test> TestCx<'test> {
                 };
                 // Create the directory for the stdout/stderr files.
                 create_dir_all(aux_cx.output_base_dir()).unwrap();
-                let auxres = aux_cx.document(out_dir, json);
+                let auxres = aux_cx.document(out_dir);
                 if !auxres.status.success() {
                     return auxres;
                 }
@@ -1601,7 +1601,7 @@ impl<'test> TestCx<'test> {
             .arg(&self.testpaths.file)
             .args(&self.props.compile_flags);
 
-        if json {
+        if self.config.mode == RustdocJson {
             rustdoc.arg("--output-format").arg("json");
         }
 
@@ -2336,7 +2336,7 @@ impl<'test> TestCx<'test> {
         let _ = fs::remove_dir_all(&out_dir);
         create_dir_all(&out_dir).unwrap();
 
-        let proc_res = self.document(&out_dir, false);
+        let proc_res = self.document(&out_dir);
         if !proc_res.status.success() {
             self.fatal_proc_rec("rustdoc failed!", &proc_res);
         }
@@ -2392,7 +2392,7 @@ impl<'test> TestCx<'test> {
         rustc.arg("-L").arg(&new_rustdoc.aux_output_dir_name());
         new_rustdoc.build_all_auxiliary(&mut rustc);
 
-        let proc_res = new_rustdoc.document(&compare_dir, false);
+        let proc_res = new_rustdoc.document(&compare_dir);
         if !proc_res.status.success() {
             proc_res.fatal(Some("failed to run nightly rustdoc"), || ());
         }
@@ -2482,7 +2482,7 @@ impl<'test> TestCx<'test> {
         let _ = fs::remove_dir_all(&out_dir);
         create_dir_all(&out_dir).unwrap();
 
-        let proc_res = self.document(&out_dir, true);
+        let proc_res = self.document(&out_dir);
         if !proc_res.status.success() {
             self.fatal_proc_rec("rustdoc failed!", &proc_res);
         }
@@ -3052,7 +3052,7 @@ impl<'test> TestCx<'test> {
         if let Some(nodejs) = &self.config.nodejs {
             let out_dir = self.output_base_dir();
 
-            self.document(&out_dir, false);
+            self.document(&out_dir);
 
             let root = self.config.find_rust_src_root().unwrap();
             let file_stem =