Skip to content

Commit aba776a

Browse files
Only display enum variants integer values if one of them has a value set
1 parent 91114d6 commit aba776a

File tree

1 file changed

+29
-18
lines changed

1 file changed

+29
-18
lines changed

src/librustdoc/html/render/print_item.rs

Lines changed: 29 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1453,18 +1453,24 @@ fn get_parent_enum_def_id(
14531453
panic!("No parent enum found for variant {variant_def_id:?}");
14541454
}
14551455

1456-
fn is_c_like_enum(
1456+
/// It'll return true if all variants are C-like variants and if at least one of them has a value
1457+
/// set.
1458+
fn should_show_c_like_variants_value(
14571459
variants: &rustc_index::IndexVec<rustc_target::abi::VariantIdx, clean::Item>,
14581460
) -> bool {
1459-
!variants.iter().any(|variant| {
1460-
matches!(
1461-
*variant.kind,
1462-
clean::VariantItem(clean::Variant {
1463-
kind: clean::VariantKind::Tuple(_) | clean::VariantKind::Struct(_),
1464-
..
1465-
})
1466-
)
1467-
})
1461+
let mut nb_c_like_variants_with_value = 0;
1462+
for variant in variants {
1463+
if let clean::VariantItem(ref var) = *variant.kind &&
1464+
matches!(var.kind, clean::VariantKind::CLike)
1465+
{
1466+
if var.discriminant.is_some() {
1467+
nb_c_like_variants_with_value += 1;
1468+
}
1469+
} else {
1470+
return false;
1471+
}
1472+
}
1473+
nb_c_like_variants_with_value > 0
14681474
}
14691475

14701476
fn display_c_like_variant(
@@ -1473,12 +1479,12 @@ fn display_c_like_variant(
14731479
item: &clean::Item,
14741480
variant: &clean::Variant,
14751481
index: rustc_target::abi::VariantIdx,
1476-
is_c_like_enum: bool,
1482+
should_show_c_like_variants_value: bool,
14771483
) {
14781484
let name = item.name.unwrap();
14791485
if let Some(ref value) = variant.discriminant {
14801486
write!(w, "{} = {}", name.as_str(), value.value(cx.tcx(), true));
1481-
} else if is_c_like_enum &&
1487+
} else if should_show_c_like_variants_value &&
14821488
let Some(variant_def_id) = item.item_id.as_def_id() &&
14831489
let Some(variant_def_id) = variant_def_id.as_local()
14841490
{
@@ -1504,7 +1510,7 @@ fn render_enum_fields(
15041510
has_stripped_entries: bool,
15051511
is_non_exhaustive: bool,
15061512
) {
1507-
let is_c_like_enum = is_c_like_enum(variants);
1513+
let should_show_c_like_variants_value = should_show_c_like_variants_value(variants);
15081514
if !g.is_some_and(|g| print_where_clause_and_check(w, g, cx)) {
15091515
// If there wasn't a `where` clause, we add a whitespace.
15101516
w.write_str(" ");
@@ -1527,9 +1533,14 @@ fn render_enum_fields(
15271533
w.write_str(TAB);
15281534
match *v.kind {
15291535
clean::VariantItem(ref var) => match var.kind {
1530-
clean::VariantKind::CLike => {
1531-
display_c_like_variant(w, cx, v, var, index, is_c_like_enum)
1532-
}
1536+
clean::VariantKind::CLike => display_c_like_variant(
1537+
w,
1538+
cx,
1539+
v,
1540+
var,
1541+
index,
1542+
should_show_c_like_variants_value,
1543+
),
15331544
clean::VariantKind::Tuple(ref s) => {
15341545
write!(w, "{}({})", v.name.unwrap(), print_tuple_struct_fields(cx, s));
15351546
}
@@ -1569,7 +1580,7 @@ fn item_variants(
15691580
document_non_exhaustive_header(it),
15701581
document_non_exhaustive(it)
15711582
);
1572-
let is_c_like_enum = is_c_like_enum(variants);
1583+
let should_show_c_like_variants_value = should_show_c_like_variants_value(variants);
15731584
for (index, variant) in variants.iter_enumerated() {
15741585
if variant.is_stripped() {
15751586
continue;
@@ -1598,7 +1609,7 @@ fn item_variants(
15981609
variant,
15991610
var,
16001611
index,
1601-
is_c_like_enum,
1612+
should_show_c_like_variants_value,
16021613
);
16031614
} else {
16041615
w.write_str(variant.name.unwrap().as_str());

0 commit comments

Comments
 (0)