Skip to content

Commit

Permalink
Unrolled build for rust-lang#121855
Browse files Browse the repository at this point in the history
Rollup merge of rust-lang#121855 - GuillaumeGomez:trait-item-info, r=notriddle

Correctly generate item info of trait items

Fixes rust-lang#121772.

The `document_info` function was wrongly used when documenting a trait item.

r? `@notriddle`
  • Loading branch information
rust-timer committed Mar 2, 2024
2 parents 5257aee + b119189 commit 9d1c776
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 13 deletions.
18 changes: 8 additions & 10 deletions src/librustdoc/html/render/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1680,7 +1680,7 @@ fn render_impl(
write!(
&mut doc_buffer,
"{}",
document_short(item, cx, link, parent, rendering_params.show_def_docs,)
document_short(item, cx, link, parent, rendering_params.show_def_docs)
);
}
}
Expand Down Expand Up @@ -2043,15 +2043,13 @@ pub(crate) fn render_impl_summary(
w.write_str("</h3>");

let is_trait = inner_impl.trait_.is_some();
if is_trait {
if let Some(portability) = portability(&i.impl_item, Some(parent)) {
write!(
w,
"<span class=\"item-info\">\
<div class=\"stab portability\">{portability}</div>\
</span>",
);
}
if is_trait && let Some(portability) = portability(&i.impl_item, Some(parent)) {
write!(
w,
"<span class=\"item-info\">\
<div class=\"stab portability\">{portability}</div>\
</span>",
);
}

w.write_str("</section>");
Expand Down
9 changes: 6 additions & 3 deletions src/librustdoc/html/render/print_item.rs
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ use crate::html::format::{
};
use crate::html::layout::Page;
use crate::html::markdown::{HeadingOffset, MarkdownSummaryLine};
use crate::html::render::{document_full, document_item_info};
use crate::html::url_parts_builder::UrlPartsBuilder;
use crate::html::{highlight, static_files};

Expand Down Expand Up @@ -818,8 +819,10 @@ fn item_trait(w: &mut Buffer, cx: &mut Context<'_>, it: &clean::Item, t: &clean:
info!("Documenting {name} on {ty_name:?}", ty_name = t.name);
let item_type = m.type_();
let id = cx.derive_id(format!("{item_type}.{name}"));

let mut content = Buffer::empty_from(w);
write!(&mut content, "{}", document(cx, m, Some(t), HeadingOffset::H5));
write!(content, "{}", document_full(m, cx, HeadingOffset::H5));

let toggled = !content.is_empty();
if toggled {
let method_toggle_class = if item_type.is_method() { " method-toggle" } else { "" };
Expand All @@ -836,8 +839,8 @@ fn item_trait(w: &mut Buffer, cx: &mut Context<'_>, it: &clean::Item, t: &clean:
cx,
RenderMode::Normal,
);
w.write_str("</h4>");
w.write_str("</section>");
w.write_str("</h4></section>");
document_item_info(cx, m, Some(t)).render_into(w).unwrap();
if toggled {
write!(w, "</summary>");
w.push_buffer(content);
Expand Down
24 changes: 24 additions & 0 deletions tests/rustdoc/trait-item-info.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
// This is a regression test for <https://github.com/rust-lang/rust/issues/121772>.
// The goal is to ensure that the item information is always part of the `<summary>`
// if there is one.

#![crate_name = "foo"]
#![feature(staged_api)]

#![unstable(feature = "test", issue = "none")]

// @has 'foo/trait.Foo.html'

#[stable(feature = "rust2", since = "2.2.2")]
pub trait Foo {
// @has - '//div[@class="methods"]/span[@class="item-info"]' 'bla'
// Should not be in a `<details>` because there is no doc.
#[unstable(feature = "bla", reason = "bla", issue = "111")]
fn bla() {}

// @has - '//details[@class="toggle method-toggle"]/summary/span[@class="item-info"]' 'bar'
// Should have a `<summary>` in the `<details>` containing the unstable info.
/// doc
#[unstable(feature = "bar", reason = "bla", issue = "222")]
fn bar() {}
}

0 comments on commit 9d1c776

Please sign in to comment.