about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2021-04-20 06:03:15 +0000
committerbors <bors@rust-lang.org>2021-04-20 06:03:15 +0000
commita70fbf6620ddaacc2ef805fa8c4ac2dc9bf02f3c (patch)
tree60bb10feeedfd7c83f078324c7548d697a601219 /src
parentb2c20b51ed838368d3f2bdccb63f401bcddb7e1c (diff)
parent64a68ae69adf508c73e642ff8739d3e547878467 (diff)
downloadrust-a70fbf6620ddaacc2ef805fa8c4ac2dc9bf02f3c.tar.gz
rust-a70fbf6620ddaacc2ef805fa8c4ac2dc9bf02f3c.zip
Auto merge of #83900 - torhovland:issue-83832, r=jyn514
Add stability tags to ImportItem.

Fixes #83832.
Diffstat (limited to 'src')
-rw-r--r--src/librustdoc/html/render/print_item.rs38
-rw-r--r--src/librustdoc/html/static/rustdoc.css6
-rw-r--r--src/librustdoc/html/static/themes/ayu.css3
-rw-r--r--src/librustdoc/html/static/themes/dark.css3
-rw-r--r--src/librustdoc/html/static/themes/light.css3
-rw-r--r--src/test/rustdoc/reexport-stability-tags-deprecated-and-portability.rs48
-rw-r--r--src/test/rustdoc/reexport-stability-tags-unstable-and-portability.rs61
7 files changed, 153 insertions, 9 deletions
diff --git a/src/librustdoc/html/render/print_item.rs b/src/librustdoc/html/render/print_item.rs
index 42b79503017..a303ca956d8 100644
--- a/src/librustdoc/html/render/print_item.rs
+++ b/src/librustdoc/html/render/print_item.rs
@@ -4,6 +4,7 @@ use rustc_data_structures::fx::FxHashMap;
 use rustc_hir as hir;
 use rustc_hir::def::CtorKind;
 use rustc_hir::def_id::DefId;
+use rustc_middle::dep_graph::DepContext;
 use rustc_middle::middle::stability;
 use rustc_middle::ty::TyCtxt;
 use rustc_span::hygiene::MacroKind;
@@ -282,11 +283,40 @@ fn item_module(w: &mut Buffer, cx: &Context<'_>, item: &clean::Item, items: &[cl
             }
 
             clean::ImportItem(ref import) => {
+                let (stab, stab_tags) = if let Some(import_def_id) = import.source.did {
+                    let import_attrs = Box::new(clean::Attributes::from_ast(
+                        cx.tcx().sess().diagnostic(),
+                        cx.tcx().get_attrs(import_def_id),
+                        None,
+                    ));
+
+                    // Just need an item with the correct def_id and attrs
+                    let import_item = clean::Item {
+                        def_id: import_def_id,
+                        attrs: import_attrs,
+                        ..myitem.clone()
+                    };
+
+                    let stab = import_item.stability_class(cx.tcx());
+                    let stab_tags = Some(extra_info_tags(&import_item, item, cx.tcx()));
+                    (stab, stab_tags)
+                } else {
+                    (None, None)
+                };
+
+                let add = if stab.is_some() { " " } else { "" };
+
                 write!(
                     w,
-                    "<tr><td><code>{}{}</code></td></tr>",
-                    myitem.visibility.print_with_space(myitem.def_id, cx),
-                    import.print(cx),
+                    "<tr class=\"{stab}{add}import-item\">\
+                         <td><code>{vis}{imp}</code></td>\
+                         <td class=\"docblock-short\">{stab_tags}</td>\
+                     </tr>",
+                    stab = stab.unwrap_or_default(),
+                    add = add,
+                    vis = myitem.visibility.print_with_space(myitem.def_id, cx),
+                    imp = import.print(cx),
+                    stab_tags = stab_tags.unwrap_or_default(),
                 );
             }
 
@@ -320,7 +350,7 @@ fn item_module(w: &mut Buffer, cx: &Context<'_>, item: &clean::Item, items: &[cl
                     docs = MarkdownSummaryLine(&doc_value, &myitem.links(cx)).into_string(),
                     class = myitem.type_(),
                     add = add,
-                    stab = stab.unwrap_or_else(String::new),
+                    stab = stab.unwrap_or_default(),
                     unsafety_flag = unsafety_flag,
                     href = item_path(myitem.type_(), &myitem.name.unwrap().as_str()),
                     title = [full_path(cx, myitem), myitem.type_().to_string()]
diff --git a/src/librustdoc/html/static/rustdoc.css b/src/librustdoc/html/static/rustdoc.css
index 570dabbd361..8f11dda2fb2 100644
--- a/src/librustdoc/html/static/rustdoc.css
+++ b/src/librustdoc/html/static/rustdoc.css
@@ -868,7 +868,8 @@ body.blur > :not(#help) {
 		0 -1px 0 black;
 }
 
-.module-item .stab {
+.module-item .stab,
+.import-item .stab {
 	border-radius: 3px;
 	display: inline-block;
 	font-size: 80%;
@@ -879,7 +880,8 @@ body.blur > :not(#help) {
 	vertical-align: text-bottom;
 }
 
-.module-item.unstable {
+.module-item.unstable,
+.import-item.unstable {
 	opacity: 0.65;
 }
 
diff --git a/src/librustdoc/html/static/themes/ayu.css b/src/librustdoc/html/static/themes/ayu.css
index b0a8c41fb08..72396ec6b76 100644
--- a/src/librustdoc/html/static/themes/ayu.css
+++ b/src/librustdoc/html/static/themes/ayu.css
@@ -252,7 +252,8 @@ details.rustdoc-toggle > summary::before {
 	color: #929292;
 }
 
-.module-item .stab {
+.module-item .stab,
+.import-item .stab {
 	color: #000;
 }
 
diff --git a/src/librustdoc/html/static/themes/dark.css b/src/librustdoc/html/static/themes/dark.css
index b702dc4a937..b2003b52741 100644
--- a/src/librustdoc/html/static/themes/dark.css
+++ b/src/librustdoc/html/static/themes/dark.css
@@ -217,7 +217,8 @@ details.rustdoc-toggle > summary::before {
 	box-shadow: 0 0 8px 4px #078dd8;
 }
 
-.module-item .stab {
+.module-item .stab,
+.import-item .stab {
 	color: #ddd;
 }
 
diff --git a/src/librustdoc/html/static/themes/light.css b/src/librustdoc/html/static/themes/light.css
index 566ed62a628..04187773b64 100644
--- a/src/librustdoc/html/static/themes/light.css
+++ b/src/librustdoc/html/static/themes/light.css
@@ -215,7 +215,8 @@ details.rustdoc-toggle > summary::before {
 	box-shadow: 0 0 8px #078dd8;
 }
 
-.module-item .stab {
+.module-item .stab,
+.import-item .stab {
 	color: #000;
 }
 
diff --git a/src/test/rustdoc/reexport-stability-tags-deprecated-and-portability.rs b/src/test/rustdoc/reexport-stability-tags-deprecated-and-portability.rs
new file mode 100644
index 00000000000..a79d05904e3
--- /dev/null
+++ b/src/test/rustdoc/reexport-stability-tags-deprecated-and-portability.rs
@@ -0,0 +1,48 @@
+#![crate_name = "foo"]
+#![feature(doc_cfg)]
+
+pub mod tag {
+    #[deprecated(since = "0.1.8", note = "Use bar() instead")]
+    pub trait Deprecated {}
+
+    #[doc(cfg(feature = "sync"))]
+    pub trait Portability {}
+
+    #[deprecated(since = "0.1.8", note = "Use bar() instead")]
+    #[doc(cfg(feature = "sync"))]
+    pub trait Both {}
+
+    pub trait None {}
+}
+
+// @has foo/mod1/index.html
+pub mod mod1 {
+    // @has - '//code' 'pub use tag::Deprecated;'
+    // @has - '//span' 'Deprecated'
+    // @!has - '//span' 'sync'
+    pub use tag::Deprecated;
+}
+
+// @has foo/mod2/index.html
+pub mod mod2 {
+    // @has - '//code' 'pub use tag::Portability;'
+    // @!has - '//span' 'Deprecated'
+    // @has - '//span' 'sync'
+    pub use tag::Portability;
+}
+
+// @has foo/mod3/index.html
+pub mod mod3 {
+    // @has - '//code' 'pub use tag::Both;'
+    // @has - '//span' 'Deprecated'
+    // @has - '//span' 'sync'
+    pub use tag::Both;
+}
+
+// @has foo/mod4/index.html
+pub mod mod4 {
+    // @has - '//code' 'pub use tag::None;'
+    // @!has - '//span' 'Deprecated'
+    // @!has - '//span' 'sync'
+    pub use tag::None;
+}
diff --git a/src/test/rustdoc/reexport-stability-tags-unstable-and-portability.rs b/src/test/rustdoc/reexport-stability-tags-unstable-and-portability.rs
new file mode 100644
index 00000000000..ff8a910f59f
--- /dev/null
+++ b/src/test/rustdoc/reexport-stability-tags-unstable-and-portability.rs
@@ -0,0 +1,61 @@
+#![crate_name = "foo"]
+#![feature(doc_cfg)]
+#![feature(staged_api)]
+#![stable(feature = "rust1", since = "1.0.0")]
+
+#[stable(feature = "rust1", since = "1.0.0")]
+pub mod tag {
+    #[unstable(feature = "humans", issue = "none")]
+    pub trait Unstable {}
+
+    #[stable(feature = "rust1", since = "1.0.0")]
+    #[doc(cfg(feature = "sync"))]
+    pub trait Portability {}
+
+    #[unstable(feature = "humans", issue = "none")]
+    #[doc(cfg(feature = "sync"))]
+    pub trait Both {}
+
+    #[stable(feature = "rust1", since = "1.0.0")]
+    pub trait None {}
+}
+
+// @has foo/mod1/index.html
+#[stable(feature = "rust1", since = "1.0.0")]
+pub mod mod1 {
+    // @has - '//code' 'pub use tag::Unstable;'
+    // @has - '//span' 'Experimental'
+    // @!has - '//span' 'sync'
+    #[stable(feature = "rust1", since = "1.0.0")]
+    pub use tag::Unstable;
+}
+
+// @has foo/mod2/index.html
+#[stable(feature = "rust1", since = "1.0.0")]
+pub mod mod2 {
+    // @has - '//code' 'pub use tag::Portability;'
+    // @!has - '//span' 'Experimental'
+    // @has - '//span' 'sync'
+    #[stable(feature = "rust1", since = "1.0.0")]
+    pub use tag::Portability;
+}
+
+// @has foo/mod3/index.html
+#[stable(feature = "rust1", since = "1.0.0")]
+pub mod mod3 {
+    // @has - '//code' 'pub use tag::Both;'
+    // @has - '//span' 'Experimental'
+    // @has - '//span' 'sync'
+    #[stable(feature = "rust1", since = "1.0.0")]
+    pub use tag::Both;
+}
+
+// @has foo/mod4/index.html
+#[stable(feature = "rust1", since = "1.0.0")]
+pub mod mod4 {
+    // @has - '//code' 'pub use tag::None;'
+    // @!has - '//span' 'Experimental'
+    // @!has - '//span' 'sync'
+    #[stable(feature = "rust1", since = "1.0.0")]
+    pub use tag::None;
+}