Change:
See is unstable, however there is no unstable tag showing that, it would be nice if it would, just so it can be seen at a glance without going to their respective pages. cc <!-- TRIAGEBOTSTART --<!-- TRIAGEBOTASSIGNSTART --<!-- TRIAGEBOTASSIGNDATASTARTTRIAGEBOTASSIGNDATAEND --<!-- TRIAGEBOTASSIGNEND --<!-- TRIAGEBOTEND --
Note that rustdoc already does something similar for : ! It could use a similar format for re-exports.
Really could just copy the existing tags (see -asm) and put em after the path.
claim

Discussion:
use rustc_hir as hir; use rustc_hir::def::CtorKind; use rustc_hir::def_id::DefId; <ins> use rustc_middle::dep_graph::DepContext; </ins> use rustc_middle::middle::stability; use rustc_middle::ty::TyCtxt; use rustc_span::hygiene::MacroKind;

} clean::ImportItem(ref import) => { <ins> 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 { "" }; </ins> write!( w, <del> "<tr><td><code>{}{}</code></td></tr>", myitem.visibility.print_with_space(myitem.def_id, cx), import.print(cx), </del> <ins> "<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(), </ins> ); }

docs = MarkdownSummaryLine(&doc_value, &myitem.links(cx)).into_string(), class = myitem.type_(), add = add, <del> stab = stab.unwrap_or_else(String::new), </del> <ins> stab = stab.unwrap_or_default(), </ins> unsafety_flag = unsafety_flag, href = item_path(myitem.type_(), &myitem.name.unwrap().as_str()), title = [full_path(cx, myitem), myitem.type_().to_string()]

0 -1px 0 black; } <del> .module-item .stab { </del> <ins> .module-item .stab, .import-item .stab { </ins> border-radius: 3px; display: inline-block; font-size: 80%;

vertical-align: text-bottom; } <del> .module-item.unstable { </del> <ins> .module-item.unstable, .import-item.unstable { </ins> opacity: 0.65; }

color: #929292; } <del> .module-item .stab { </del> <ins> .module-item .stab, .import-item .stab { </ins> color: #000; }

box-shadow: 0 0 8px 4px #078dd8; } <del> .module-item .stab { </del> <ins> .module-item .stab, .import-item .stab { </ins> color: #ddd; }

box-shadow: 0 0 8px #078dd8; } <del> .module-item .stab { </del> <ins> .module-item .stab, .import-item .stab { </ins> color: #000; }

<ins> #![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; } </ins>

<ins> #![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; } </ins>