@@ -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
14701476fn 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