Skip to content

Commit

Permalink
Rollup merge of rust-lang#83900 - torhovland:issue-83832, r=jyn514,Gu…
Browse files Browse the repository at this point in the history
…illaumeGomez

Add stability tags to ImportItem.

Fixes rust-lang#83832.
  • Loading branch information
GuillaumeGomez authored Apr 18, 2021
2 parents 3541fd2 + e2a77b3 commit 40ccb63
Show file tree
Hide file tree
Showing 10 changed files with 152 additions and 13 deletions.
1 change: 1 addition & 0 deletions src/librustdoc/clean/inline.rs
Original file line number Diff line number Diff line change
Expand Up @@ -477,6 +477,7 @@ fn build_module(
}],
},
did: None,
attrs: None,
},
true,
)),
Expand Down
1 change: 1 addition & 0 deletions src/librustdoc/clean/types.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2081,6 +2081,7 @@ crate enum ImportKind {
crate struct ImportSource {
crate path: Path,
crate did: Option<DefId>,
crate attrs: Option<Attributes>,
}

#[derive(Clone, Debug)]
Expand Down
8 changes: 4 additions & 4 deletions src/librustdoc/clean/utils.rs
Original file line number Diff line number Diff line change
Expand Up @@ -468,10 +468,10 @@ crate fn register_res(cx: &mut DocContext<'_>, res: Res) -> DefId {
}

crate fn resolve_use_source(cx: &mut DocContext<'_>, path: Path) -> ImportSource {
ImportSource {
did: if path.res.opt_def_id().is_none() { None } else { Some(register_res(cx, path.res)) },
path,
}
let did = if path.res.opt_def_id().is_none() { None } else { Some(register_res(cx, path.res)) };
let attrs = did.map(|did| cx.tcx.get_attrs(did).clean(cx));

ImportSource { did, path, attrs }
}

crate fn enter_impl_trait<F, R>(cx: &mut DocContext<'_>, f: F) -> R
Expand Down
31 changes: 27 additions & 4 deletions src/librustdoc/html/render/print_item.rs
Original file line number Diff line number Diff line change
Expand Up @@ -282,11 +282,34 @@ fn item_module(w: &mut Buffer, cx: &Context<'_>, item: &clean::Item, items: &[cl
}

clean::ImportItem(ref import) => {
let (stab, stab_tags) = if let (Some(def_id), Some(attrs)) =
(import.source.did, import.source.attrs.clone())
{
let attrs = Box::new(attrs);

// Just need an item with the correct def_id and attrs
let import_item = clean::Item { def_id, 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(),
);
}

Expand Down Expand Up @@ -320,7 +343,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()]
Expand Down
6 changes: 4 additions & 2 deletions src/librustdoc/html/static/rustdoc.css
Original file line number Diff line number Diff line change
Expand Up @@ -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%;
Expand All @@ -879,7 +880,8 @@ body.blur > :not(#help) {
vertical-align: text-bottom;
}

.module-item.unstable {
.module-item.unstable,
.import-item.unstable {
opacity: 0.65;
}

Expand Down
3 changes: 2 additions & 1 deletion src/librustdoc/html/static/themes/ayu.css
Original file line number Diff line number Diff line change
Expand Up @@ -252,7 +252,8 @@ details.rustdoc-toggle > summary::before {
color: #929292;
}

.module-item .stab {
.module-item .stab,
.import-item .stab {
color: #000;
}

Expand Down
3 changes: 2 additions & 1 deletion src/librustdoc/html/static/themes/dark.css
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}

Expand Down
3 changes: 2 additions & 1 deletion src/librustdoc/html/static/themes/light.css
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}

Expand Down
Original file line number Diff line number Diff line change
@@ -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;
}
Original file line number Diff line number Diff line change
@@ -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;
}

0 comments on commit 40ccb63

Please sign in to comment.