diff --git a/src/librustdoc/html/render/mod.rs b/src/librustdoc/html/render/mod.rs
index ac7ae291d29..fe83095f944 100644
--- a/src/librustdoc/html/render/mod.rs
+++ b/src/librustdoc/html/render/mod.rs
@@ -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)
);
}
}
@@ -2043,15 +2043,13 @@ pub(crate) fn render_impl_summary(
w.write_str("");
let is_trait = inner_impl.trait_.is_some();
- if is_trait {
- if let Some(portability) = portability(&i.impl_item, Some(parent)) {
- write!(
- w,
- "\
- {portability}
\
- ",
- );
- }
+ if is_trait && let Some(portability) = portability(&i.impl_item, Some(parent)) {
+ write!(
+ w,
+ "\
+ {portability}
\
+ ",
+ );
}
w.write_str("");
diff --git a/src/librustdoc/html/render/print_item.rs b/src/librustdoc/html/render/print_item.rs
index 71186319e07..d588f219739 100644
--- a/src/librustdoc/html/render/print_item.rs
+++ b/src/librustdoc/html/render/print_item.rs
@@ -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};
@@ -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 { "" };
@@ -836,8 +839,8 @@ fn item_trait(w: &mut Buffer, cx: &mut Context<'_>, it: &clean::Item, t: &clean:
cx,
RenderMode::Normal,
);
- w.write_str("");
- w.write_str("");
+ w.write_str("");
+ document_item_info(cx, m, Some(t)).render_into(w).unwrap();
if toggled {
write!(w, "");
w.push_buffer(content);
diff --git a/tests/rustdoc/trait-item-info.rs b/tests/rustdoc/trait-item-info.rs
new file mode 100644
index 00000000000..53a4c6917b9
--- /dev/null
+++ b/tests/rustdoc/trait-item-info.rs
@@ -0,0 +1,24 @@
+// This is a regression test for .
+// The goal is to ensure that the item information is always part of the ``
+// 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 `` 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 `` in the `` containing the unstable info.
+ /// doc
+ #[unstable(feature = "bar", reason = "bla", issue = "222")]
+ fn bar() {}
+}