diff --git a/src/items.rs b/src/items.rs index 116905187e5..99efbf9e0ca 100644 --- a/src/items.rs +++ b/src/items.rs @@ -645,8 +645,14 @@ impl<'a> FmtVisitor<'a> { let mut items: Vec<_> = itemize_list_with(self.config.struct_variant_width()); // If one of the variants use multiple lines, use multi-lined formatting for all variants. - fn is_multi_line_variant(item: &ListItem) -> bool { + let is_multi_line_variant = |item: &ListItem| -> bool { let variant_str = item.inner_as_ref(); + if self.config.style_edition() < StyleEdition::Edition2024 { + // Fall back to previous naive implementation (#5662) because of + // rustfmt's stability guarantees + return variant_str.contains('\n'); + } + let mut first_line_is_read = false; for line in variant_str.split('\n') { if first_line_is_read { @@ -663,7 +669,7 @@ impl<'a> FmtVisitor<'a> { } true - } + }; let has_multiline_variant = items.iter().any(is_multi_line_variant); let has_single_line_variant = items.iter().any(|item| !is_multi_line_variant(item)); if has_multiline_variant && has_single_line_variant { diff --git a/tests/target/attribute-in-enum/horizontal-no-doc.rs b/tests/target/attribute-in-enum/horizontal-no-doc.rs index f869c902cc4..56c378cea97 100644 --- a/tests/target/attribute-in-enum/horizontal-no-doc.rs +++ b/tests/target/attribute-in-enum/horizontal-no-doc.rs @@ -1,3 +1,4 @@ +// rustfmt-style_edition: 2024 enum MyType { A { field1: bool, field2: bool }, B { field1: bool, field2: bool }, diff --git a/tests/target/attribute-in-enum/horizontal-with-doc.rs b/tests/target/attribute-in-enum/horizontal-with-doc.rs index cbf1dc78e65..0a0b374e76d 100644 --- a/tests/target/attribute-in-enum/horizontal-with-doc.rs +++ b/tests/target/attribute-in-enum/horizontal-with-doc.rs @@ -1,3 +1,4 @@ +// rustfmt-style_edition: 2024 enum MyType { A { field1: bool, field2: bool }, B { field1: bool, field2: bool }, diff --git a/tests/target/attribute-in-enum/vertical-macro-one-line.rs b/tests/target/attribute-in-enum/vertical-macro-one-line.rs index a6669b3003e..e7cfe64a1db 100644 --- a/tests/target/attribute-in-enum/vertical-macro-one-line.rs +++ b/tests/target/attribute-in-enum/vertical-macro-one-line.rs @@ -1,3 +1,4 @@ +// rustfmt-style_edition: 2024 enum A { B { a: usize, diff --git a/tests/target/attribute-in-enum/vertical-no-doc.rs b/tests/target/attribute-in-enum/vertical-no-doc.rs index 1148c03a008..2369bc368b7 100644 --- a/tests/target/attribute-in-enum/vertical-no-doc.rs +++ b/tests/target/attribute-in-enum/vertical-no-doc.rs @@ -1,3 +1,4 @@ +// rustfmt-style_edition: 2024 enum A { B { a: usize, diff --git a/tests/target/attribute-in-enum/vertical-with-doc.rs b/tests/target/attribute-in-enum/vertical-with-doc.rs index b61a018ac12..7b1d3315c2b 100644 --- a/tests/target/attribute-in-enum/vertical-with-doc.rs +++ b/tests/target/attribute-in-enum/vertical-with-doc.rs @@ -1,3 +1,4 @@ +// rustfmt-style_edition: 2024 enum A { B { a: usize,