Rollup merge of #115604 - GuillaumeGomez:private-fields-tuple-struct, r=notriddle
rustdoc: Render private fields in tuple struct as `/* private fields */` Reopening of https://github.com/rust-lang/rust/pull/110552. All that was missing was a test for the different cases so I added it into the second commit. Description from the original PR: > I've gotten some feedback that the current rustdoc rendering of... > > ``` > struct HasPrivateFields(_); > ``` > > ...is confusing, and I agree with that feedback, especially compared to the field struct case: > > ``` > struct HasPrivateFields { /* private fields */ } > ``` > > So this PR makes it so that when all of the fields of a tuple variant are private, just render it with the `/* private fields */` comment. We can't *always* render it like that, for example when there's a mix of private and public fields. cc ````@jsha```` r? ````@notriddle````
This commit is contained in:
commit
403a18f13d
@ -1384,6 +1384,12 @@ fn print_tuple_struct_fields<'a, 'cx: 'a>(
|
|||||||
s: &'a [clean::Item],
|
s: &'a [clean::Item],
|
||||||
) -> impl fmt::Display + 'a + Captures<'cx> {
|
) -> impl fmt::Display + 'a + Captures<'cx> {
|
||||||
display_fn(|f| {
|
display_fn(|f| {
|
||||||
|
if s.iter()
|
||||||
|
.all(|field| matches!(*field.kind, clean::StrippedItem(box clean::StructFieldItem(..))))
|
||||||
|
{
|
||||||
|
return f.write_str("/* private fields */");
|
||||||
|
}
|
||||||
|
|
||||||
for (i, ty) in s.iter().enumerate() {
|
for (i, ty) in s.iter().enumerate() {
|
||||||
if i > 0 {
|
if i > 0 {
|
||||||
f.write_str(", ")?;
|
f.write_str(", ")?;
|
||||||
@ -2069,6 +2075,11 @@ fn render_struct_fields(
|
|||||||
}
|
}
|
||||||
Some(CtorKind::Fn) => {
|
Some(CtorKind::Fn) => {
|
||||||
w.write_str("(");
|
w.write_str("(");
|
||||||
|
if fields.iter().all(|field| {
|
||||||
|
matches!(*field.kind, clean::StrippedItem(box clean::StructFieldItem(..)))
|
||||||
|
}) {
|
||||||
|
write!(w, "/* private fields */");
|
||||||
|
} else {
|
||||||
for (i, field) in fields.iter().enumerate() {
|
for (i, field) in fields.iter().enumerate() {
|
||||||
if i > 0 {
|
if i > 0 {
|
||||||
w.write_str(", ");
|
w.write_str(", ");
|
||||||
@ -2079,13 +2090,18 @@ fn render_struct_fields(
|
|||||||
write!(
|
write!(
|
||||||
w,
|
w,
|
||||||
"{}{}",
|
"{}{}",
|
||||||
visibility_print_with_space(field.visibility(tcx), field.item_id, cx),
|
visibility_print_with_space(
|
||||||
|
field.visibility(tcx),
|
||||||
|
field.item_id,
|
||||||
|
cx
|
||||||
|
),
|
||||||
ty.print(cx),
|
ty.print(cx),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
_ => unreachable!(),
|
_ => unreachable!(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
w.write_str(")");
|
w.write_str(")");
|
||||||
if let Some(g) = g {
|
if let Some(g) = g {
|
||||||
write!(w, "{}", print_where_clause(g, cx, 0, Ending::NoNewline));
|
write!(w, "{}", print_where_clause(g, cx, 0, Ending::NoNewline));
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#![crate_name = "foo"]
|
#![crate_name = "foo"]
|
||||||
|
|
||||||
// @has foo/struct.Foo.html '//pre[@class="rust item-decl"]' \
|
// @has foo/struct.Foo.html '//pre[@class="rust item-decl"]' \
|
||||||
// 'pub struct Foo<const M: usize = 10, const N: usize = M, T = i32>(_);'
|
// 'pub struct Foo<const M: usize = 10, const N: usize = M, T = i32>('
|
||||||
pub struct Foo<const M: usize = 10, const N: usize = M, T = i32>(T);
|
pub struct Foo<const M: usize = 10, const N: usize = M, T = i32>(T);
|
||||||
|
@ -33,7 +33,7 @@ impl Trait<{1 + 2}> for u8 {}
|
|||||||
// @has foo/struct.Foo.html '//pre[@class="rust item-decl"]' \
|
// @has foo/struct.Foo.html '//pre[@class="rust item-decl"]' \
|
||||||
// 'pub struct Foo<const N: usize> where u8: Trait<N>'
|
// 'pub struct Foo<const N: usize> where u8: Trait<N>'
|
||||||
pub struct Foo<const N: usize> where u8: Trait<N>;
|
pub struct Foo<const N: usize> where u8: Trait<N>;
|
||||||
// @has foo/struct.Bar.html '//pre[@class="rust item-decl"]' 'pub struct Bar<T, const N: usize>(_)'
|
// @has foo/struct.Bar.html '//pre[@class="rust item-decl"]' 'pub struct Bar<T, const N: usize>('
|
||||||
pub struct Bar<T, const N: usize>([T; N]);
|
pub struct Bar<T, const N: usize>([T; N]);
|
||||||
|
|
||||||
// @has foo/struct.Foo.html '//*[@id="impl-Foo%3CM%3E"]/h3[@class="code-header"]' 'impl<const M: usize> Foo<M>where u8: Trait<M>'
|
// @has foo/struct.Foo.html '//*[@id="impl-Foo%3CM%3E"]/h3[@class="code-header"]' 'impl<const M: usize> Foo<M>where u8: Trait<M>'
|
||||||
@ -92,7 +92,7 @@ macro_rules! define_me {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// @has foo/struct.Foz.html '//pre[@class="rust item-decl"]' \
|
// @has foo/struct.Foz.html '//pre[@class="rust item-decl"]' \
|
||||||
// 'pub struct Foz<const N: usize>(_);'
|
// 'pub struct Foz<const N: usize>(/* private fields */);'
|
||||||
define_me!(Foz<N>);
|
define_me!(Foz<N>);
|
||||||
|
|
||||||
trait Q {
|
trait Q {
|
||||||
|
@ -8,10 +8,10 @@
|
|||||||
|
|
||||||
// @has issue_88600/enum.FooEnum.html
|
// @has issue_88600/enum.FooEnum.html
|
||||||
pub enum FooEnum {
|
pub enum FooEnum {
|
||||||
// @has - '//*[@id="variant.HiddenTupleItem"]//h3' 'HiddenTupleItem(_)'
|
// @has - '//*[@id="variant.HiddenTupleItem"]//h3' 'HiddenTupleItem(/* private fields */)'
|
||||||
// @count - '//*[@id="variant.HiddenTupleItem.field.0"]' 0
|
// @count - '//*[@id="variant.HiddenTupleItem.field.0"]' 0
|
||||||
HiddenTupleItem(#[doc(hidden)] H),
|
HiddenTupleItem(#[doc(hidden)] H),
|
||||||
// @has - '//*[@id="variant.MultipleHidden"]//h3' 'MultipleHidden(_, _)'
|
// @has - '//*[@id="variant.MultipleHidden"]//h3' 'MultipleHidden(/* private fields */)'
|
||||||
// @count - '//*[@id="variant.MultipleHidden.field.0"]' 0
|
// @count - '//*[@id="variant.MultipleHidden.field.0"]' 0
|
||||||
// @count - '//*[@id="variant.MultipleHidden.field.1"]' 0
|
// @count - '//*[@id="variant.MultipleHidden.field.1"]' 0
|
||||||
MultipleHidden(#[doc(hidden)] H, #[doc(hidden)] H),
|
MultipleHidden(#[doc(hidden)] H, #[doc(hidden)] H),
|
||||||
|
15
tests/rustdoc/private-fields-tuple-struct.rs
Normal file
15
tests/rustdoc/private-fields-tuple-struct.rs
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
// This test checks the diplay of "/* private fields */" sentence in tuple structs.
|
||||||
|
#![crate_name = "foo"]
|
||||||
|
|
||||||
|
// @has 'foo/struct.A.html' '//*[@class="rust item-decl"]/code' 'pub struct A(pub u8, _);'
|
||||||
|
pub struct A(pub u8, u8);
|
||||||
|
// @has 'foo/struct.B.html' '//*[@class="rust item-decl"]/code' 'pub struct B(_, pub u8);'
|
||||||
|
pub struct B(u8, pub u8);
|
||||||
|
// @has 'foo/struct.C.html' '//*[@class="rust item-decl"]/code' 'pub struct C(_, pub u8, _);'
|
||||||
|
pub struct C(u8, pub u8, u8);
|
||||||
|
// @has 'foo/struct.D.html' '//*[@class="rust item-decl"]/code' 'pub struct D(pub u8, _, pub u8);'
|
||||||
|
pub struct D(pub u8, u8, pub u8);
|
||||||
|
// @has 'foo/struct.E.html' '//*[@class="rust item-decl"]/code' 'pub struct E(/* private fields */);'
|
||||||
|
pub struct E(u8);
|
||||||
|
// @has 'foo/struct.F.html' '//*[@class="rust item-decl"]/code' 'pub struct F(/* private fields */);'
|
||||||
|
pub struct F(u8, u8);
|
@ -1,3 +1,3 @@
|
|||||||
<pre class="rust item-decl"><code>pub struct Simd<T>(_)
|
<pre class="rust item-decl"><code>pub struct Simd<T>(/* private fields */)
|
||||||
<span class="where">where
|
<span class="where">where
|
||||||
T: <a class="trait" href="trait.MyTrait.html" title="trait foo::MyTrait">MyTrait</a></span>;</code></pre>
|
T: <a class="trait" href="trait.MyTrait.html" title="trait foo::MyTrait">MyTrait</a></span>;</code></pre>
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
<code>pub struct Alpha<A>(_)
|
<code>pub struct Alpha<A>(/* private fields */)
|
||||||
<span class="where">where
|
<span class="where">where
|
||||||
A: <a class="trait" href="trait.MyTrait.html" title="trait foo::MyTrait">MyTrait</a></span>;</code>
|
A: <a class="trait" href="trait.MyTrait.html" title="trait foo::MyTrait">MyTrait</a></span>;</code>
|
@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
pub trait MyTrait { fn dummy(&self) { } }
|
pub trait MyTrait { fn dummy(&self) { } }
|
||||||
|
|
||||||
// @has foo/struct.Alpha.html '//pre' "pub struct Alpha<A>(_) where A: MyTrait"
|
// @has foo/struct.Alpha.html '//pre' "pub struct Alpha<A>(/* private fields */) where A: MyTrait"
|
||||||
// @snapshot alpha_trait_decl - '//*[@class="rust item-decl"]/code'
|
// @snapshot alpha_trait_decl - '//*[@class="rust item-decl"]/code'
|
||||||
pub struct Alpha<A>(A) where A: MyTrait;
|
pub struct Alpha<A>(A) where A: MyTrait;
|
||||||
// @has foo/trait.Bravo.html '//pre' "pub trait Bravo<B>where B: MyTrait"
|
// @has foo/trait.Bravo.html '//pre' "pub trait Bravo<B>where B: MyTrait"
|
||||||
|
Loading…
Reference in New Issue
Block a user