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_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 cmp( } 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, - "{}{}", - myitem.visibility.print_with_space(myitem.def_id, cx), - import.print(cx), + "\ + {vis}{imp}\ + {stab_tags}\ + ", + 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 cmp( 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; +}