Skip to content

Commit fe93837

Browse files
committed
more test cases added + fix added for empty blocks violating max_width
1 parent af652e0 commit fe93837

5 files changed

Lines changed: 216 additions & 57 deletions

File tree

src/matches.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -535,9 +535,11 @@ pub(crate) fn rewrite_match_body(
535535
body_shape.width,
536536
);
537537

538+
let enforce_empty_block_width =
539+
is_empty_block && context.config.style_edition() >= StyleEdition::Edition2027;
538540
match rewrite {
539541
Ok(ref body_str)
540-
if is_block
542+
if (is_block && !enforce_empty_block_width)
541543
|| (!body_str.contains('\n')
542544
&& unicode_str_width(body_str) <= body_shape.width) =>
543545
{

tests/source/issue_6848_style_edition_2024.rs

Lines changed: 51 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,18 @@
77
enum ExampleTypeX {
88
VariantAlphaSampleXYZ,
99
VariantBetaXYZ,
10+
VariantABCD,
11+
VariantABCDE,
12+
VariantABCDEF,
13+
VariantABCDEFG,
14+
VariantABCDEFGH,
15+
VariantABCDEFGHI,
16+
VariantABCDEFGHIJ,
17+
VariantABCDEFGHIJK,
1018
}
1119

1220
fn demo(lhs: ExampleTypeX, rhs: ExampleTypeX) {
21+
//unsafe block
1322
match (lhs, rhs) {
1423
(
1524
ExampleTypeX::VariantAlphaSampleXYZ,
@@ -19,45 +28,63 @@ fn demo(lhs: ExampleTypeX, rhs: ExampleTypeX) {
1928
_ => {}
2029
}
2130

31+
match (lhs, rhs) {
32+
// 1 char below the max_width limit
33+
(ExampleTypeX::VariantABCD, ExampleTypeX::VariantBetaXYZ) => unsafe {},
34+
// everything properly fits on 1 line at exactly the max_width limit
35+
(ExampleTypeX::VariantABCDE, ExampleTypeX::VariantBetaXYZ) => unsafe {},
36+
// 1 char over the max_width limit
37+
(ExampleTypeX::VariantABCDEF, ExampleTypeX::VariantBetaXYZ) => unsafe {},
38+
(ExampleTypeX::VariantABCDEF, ExampleTypeX::VariantBetaXYZ) => unsafe { non_empty_block()},
39+
(ExampleTypeX::VariantABCDEFGHIJKL, ExampleTypeX::VariantBetaXYZ) => unsafe { non_empty_block()},
40+
(ExampleTypeX::VariantABCDEFGHIJKLMNO, ExampleTypeX::VariantBetaXYZ) => unsafe { non_empty_block()},
41+
(ExampleTypeX::VariantABCDEFHGHI, ExampleTypeX::VariantBetaXYZ) => 'a: {},
42+
_ => {}
43+
}
44+
2245
// const block
2346
match (lhs, rhs) {
24-
(
25-
ExampleTypeX::VariantAlphaSampleXYZ,
26-
ExampleTypeX::VariantBetaXYZ,
27-
) => const {
28-
}
47+
// 1 char below the max_width limit
48+
(ExampleTypeX::VariantABCDE, ExampleTypeX::VariantBetaXYZ) => const {},
49+
// everything properly fits on 1 line at exactly the max_width limit
50+
(ExampleTypeX::VariantABCDEF, ExampleTypeX::VariantBetaXYZ) => const {},
51+
// 1 char over the max_width limit
52+
(ExampleTypeX::VariantABCDEFG, ExampleTypeX::VariantBetaXYZ) => const {},
2953
_ => {}
30-
}
31-
54+
}
55+
3256
// async block
3357
match (lhs, rhs) {
34-
(
35-
ExampleTypeX::VariantAlphaSampleXYZ,
36-
ExampleTypeX::VariantBetaXYZ,
37-
) => async {
38-
},
58+
// 1 char below the max_width limit
59+
(ExampleTypeX::VariantABCDE, ExampleTypeX::VariantBetaXYZ) => async {},
60+
// everything properly fits on 1 line at exactly the max_width limit
61+
(ExampleTypeX::VariantABCDEF, ExampleTypeX::VariantBetaXYZ) => async {},
62+
// 1 char over the max_width limit
63+
(ExampleTypeX::VariantABCDEFG, ExampleTypeX::VariantBetaXYZ) => async {},
3964
_ => {}
4065
}
4166

42-
// gen block
67+
// gen block
4368
match (lhs, rhs) {
44-
(
45-
ExampleTypeX::VariantAlphaSampleXYZ,
46-
ExampleTypeX::VariantBetaXYZ,
47-
) => gen {
48-
},
69+
// 1 char below the max_width limit
70+
(ExampleTypeX::VariantABCDEFG, ExampleTypeX::VariantBetaXYZ) => gen {},
71+
// everything properly fits on 1 line at exactly the max_width limit
72+
(ExampleTypeX::VariantABCDEFGH, ExampleTypeX::VariantBetaXYZ) => gen {},
73+
// 1 char over the max_width limit
74+
(ExampleTypeX::VariantABCDEFGHI, ExampleTypeX::VariantBetaXYZ) => gen {},
4975
_ => {}
5076
}
5177

5278
// try block
5379
match (lhs, rhs) {
54-
(
55-
ExampleTypeX::VariantAlphaSampleXYZ,
56-
ExampleTypeX::VariantBetaXYZ,
57-
) => try {
58-
},
80+
//1 char below the max_width limit
81+
(ExampleTypeX::VariantABCDEFG, ExampleTypeX::VariantBetaXYZ) => try {},
82+
// everything properly fits on 1 line at exactly the max_width limit
83+
(ExampleTypeX::VariantABCDEFGH, ExampleTypeX::VariantBetaXYZ) => try {},
84+
// 1 char over the max_width limit
85+
(ExampleTypeX::VariantABCDEFGHI, ExampleTypeX::VariantBetaXYZ) => try {},
5986
_ => {}
6087
}
6188
}
6289

63-
fn main() {}
90+
fn main() {}

tests/source/issue_6848_style_edition_2027.rs

Lines changed: 51 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,18 @@
77
enum ExampleTypeX {
88
VariantAlphaSampleXYZ,
99
VariantBetaXYZ,
10+
VariantABCD,
11+
VariantABCDE,
12+
VariantABCDEF,
13+
VariantABCDEFG,
14+
VariantABCDEFGH,
15+
VariantABCDEFGHI,
16+
VariantABCDEFGHIJ,
17+
VariantABCDEFGHIJK,
1018
}
1119

1220
fn demo(lhs: ExampleTypeX, rhs: ExampleTypeX) {
21+
//unsafe block
1322
match (lhs, rhs) {
1423
(
1524
ExampleTypeX::VariantAlphaSampleXYZ,
@@ -19,45 +28,63 @@ fn demo(lhs: ExampleTypeX, rhs: ExampleTypeX) {
1928
_ => {}
2029
}
2130

31+
match (lhs, rhs) {
32+
// 1 char below the max_width limit
33+
(ExampleTypeX::VariantABCD, ExampleTypeX::VariantBetaXYZ) => unsafe {},
34+
// everything properly fits on 1 line at exactly the max_width limit
35+
(ExampleTypeX::VariantABCDE, ExampleTypeX::VariantBetaXYZ) => unsafe {},
36+
// 1 char over the max_width limit
37+
(ExampleTypeX::VariantABCDEF, ExampleTypeX::VariantBetaXYZ) => unsafe {},
38+
(ExampleTypeX::VariantABCDEF, ExampleTypeX::VariantBetaXYZ) => unsafe { non_empty_block()},
39+
(ExampleTypeX::VariantABCDEFGHIJKL, ExampleTypeX::VariantBetaXYZ) => unsafe { non_empty_block()},
40+
(ExampleTypeX::VariantABCDEFGHIJKLMNO, ExampleTypeX::VariantBetaXYZ) => unsafe { non_empty_block()},
41+
(ExampleTypeX::VariantABCDEFHGHI, ExampleTypeX::VariantBetaXYZ) => 'a: {},
42+
_ => {}
43+
}
44+
2245
// const block
2346
match (lhs, rhs) {
24-
(
25-
ExampleTypeX::VariantAlphaSampleXYZ,
26-
ExampleTypeX::VariantBetaXYZ,
27-
) => const {
28-
}
47+
// 1 char below the max_width limit
48+
(ExampleTypeX::VariantABCDE, ExampleTypeX::VariantBetaXYZ) => const {},
49+
// everything properly fits on 1 line at exactly the max_width limit
50+
(ExampleTypeX::VariantABCDEF, ExampleTypeX::VariantBetaXYZ) => const {},
51+
// 1 char over the max_width limit
52+
(ExampleTypeX::VariantABCDEFG, ExampleTypeX::VariantBetaXYZ) => const {},
2953
_ => {}
30-
}
31-
54+
}
55+
3256
// async block
3357
match (lhs, rhs) {
34-
(
35-
ExampleTypeX::VariantAlphaSampleXYZ,
36-
ExampleTypeX::VariantBetaXYZ,
37-
) => async {
38-
},
58+
// 1 char below the max_width limit
59+
(ExampleTypeX::VariantABCDE, ExampleTypeX::VariantBetaXYZ) => async {},
60+
// everything properly fits on 1 line at exactly the max_width limit
61+
(ExampleTypeX::VariantABCDEF, ExampleTypeX::VariantBetaXYZ) => async {},
62+
// 1 char over the max_width limit
63+
(ExampleTypeX::VariantABCDEFG, ExampleTypeX::VariantBetaXYZ) => async {},
3964
_ => {}
4065
}
4166

42-
// gen block
67+
// gen block
4368
match (lhs, rhs) {
44-
(
45-
ExampleTypeX::VariantAlphaSampleXYZ,
46-
ExampleTypeX::VariantBetaXYZ,
47-
) => gen {
48-
},
69+
// 1 char below the max_width limit
70+
(ExampleTypeX::VariantABCDEFG, ExampleTypeX::VariantBetaXYZ) => gen {},
71+
// everything properly fits on 1 line at exactly the max_width limit
72+
(ExampleTypeX::VariantABCDEFGH, ExampleTypeX::VariantBetaXYZ) => gen {},
73+
// 1 char over the max_width limit
74+
(ExampleTypeX::VariantABCDEFGHI, ExampleTypeX::VariantBetaXYZ) => gen {},
4975
_ => {}
5076
}
5177

5278
// try block
5379
match (lhs, rhs) {
54-
(
55-
ExampleTypeX::VariantAlphaSampleXYZ,
56-
ExampleTypeX::VariantBetaXYZ,
57-
) => try {
58-
},
80+
//1 char below the max_width limit
81+
(ExampleTypeX::VariantABCDEFG, ExampleTypeX::VariantBetaXYZ) => try {},
82+
// everything properly fits on 1 line at exactly the max_width limit
83+
(ExampleTypeX::VariantABCDEFGH, ExampleTypeX::VariantBetaXYZ) => try {},
84+
// 1 char over the max_width limit
85+
(ExampleTypeX::VariantABCDEFGHI, ExampleTypeX::VariantBetaXYZ) => try {},
5986
_ => {}
6087
}
6188
}
6289

63-
fn main() {}
90+
fn main() {}

tests/target/issue_6848_style_edition_2024.rs

Lines changed: 54 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,42 +7,92 @@
77
enum ExampleTypeX {
88
VariantAlphaSampleXYZ,
99
VariantBetaXYZ,
10+
VariantABCD,
11+
VariantABCDE,
12+
VariantABCDEF,
13+
VariantABCDEFG,
14+
VariantABCDEFGH,
15+
VariantABCDEFGHI,
16+
VariantABCDEFGHIJ,
17+
VariantABCDEFGHIJK,
1018
}
1119

1220
fn demo(lhs: ExampleTypeX, rhs: ExampleTypeX) {
21+
//unsafe block
1322
match (lhs, rhs) {
1423
(ExampleTypeX::VariantAlphaSampleXYZ, ExampleTypeX::VariantBetaXYZ) => unsafe {
1524
},
1625
_ => {}
1726
}
1827

28+
match (lhs, rhs) {
29+
// 1 char below the max_width limit
30+
(ExampleTypeX::VariantABCD, ExampleTypeX::VariantBetaXYZ) => unsafe {},
31+
// everything properly fits on 1 line at exactly the max_width limit
32+
(ExampleTypeX::VariantABCDE, ExampleTypeX::VariantBetaXYZ) => unsafe {},
33+
// 1 char over the max_width limit
34+
(ExampleTypeX::VariantABCDEF, ExampleTypeX::VariantBetaXYZ) => unsafe {},
35+
(ExampleTypeX::VariantABCDEF, ExampleTypeX::VariantBetaXYZ) => unsafe {
36+
non_empty_block()
37+
},
38+
(ExampleTypeX::VariantABCDEFGHIJKL, ExampleTypeX::VariantBetaXYZ) => unsafe {
39+
non_empty_block()
40+
},
41+
(
42+
ExampleTypeX::VariantABCDEFGHIJKLMNO,
43+
ExampleTypeX::VariantBetaXYZ,
44+
) => unsafe { non_empty_block() },
45+
(ExampleTypeX::VariantABCDEFHGHI, ExampleTypeX::VariantBetaXYZ) => 'a: {}
46+
_ => {}
47+
}
48+
1949
// const block
2050
match (lhs, rhs) {
21-
(ExampleTypeX::VariantAlphaSampleXYZ, ExampleTypeX::VariantBetaXYZ) => {
51+
// 1 char below the max_width limit
52+
(ExampleTypeX::VariantABCDE, ExampleTypeX::VariantBetaXYZ) => const {},
53+
// everything properly fits on 1 line at exactly the max_width limit
54+
(ExampleTypeX::VariantABCDEF, ExampleTypeX::VariantBetaXYZ) => const {},
55+
// 1 char over the max_width limit
56+
(ExampleTypeX::VariantABCDEFG, ExampleTypeX::VariantBetaXYZ) => {
2257
const {}
2358
}
2459
_ => {}
2560
}
2661

2762
// async block
2863
match (lhs, rhs) {
29-
(ExampleTypeX::VariantAlphaSampleXYZ, ExampleTypeX::VariantBetaXYZ) => {
64+
// 1 char below the max_width limit
65+
(ExampleTypeX::VariantABCDE, ExampleTypeX::VariantBetaXYZ) => async {},
66+
// everything properly fits on 1 line at exactly the max_width limit
67+
(ExampleTypeX::VariantABCDEF, ExampleTypeX::VariantBetaXYZ) => async {},
68+
// 1 char over the max_width limit
69+
(ExampleTypeX::VariantABCDEFG, ExampleTypeX::VariantBetaXYZ) => {
3070
async {}
3171
}
3272
_ => {}
3373
}
3474

3575
// gen block
3676
match (lhs, rhs) {
37-
(ExampleTypeX::VariantAlphaSampleXYZ, ExampleTypeX::VariantBetaXYZ) => {
77+
// 1 char below the max_width limit
78+
(ExampleTypeX::VariantABCDEFG, ExampleTypeX::VariantBetaXYZ) => gen {},
79+
// everything properly fits on 1 line at exactly the max_width limit
80+
(ExampleTypeX::VariantABCDEFGH, ExampleTypeX::VariantBetaXYZ) => gen {},
81+
// 1 char over the max_width limit
82+
(ExampleTypeX::VariantABCDEFGHI, ExampleTypeX::VariantBetaXYZ) => {
3883
gen {}
3984
}
4085
_ => {}
4186
}
4287

4388
// try block
4489
match (lhs, rhs) {
45-
(ExampleTypeX::VariantAlphaSampleXYZ, ExampleTypeX::VariantBetaXYZ) => {
90+
//1 char below the max_width limit
91+
(ExampleTypeX::VariantABCDEFG, ExampleTypeX::VariantBetaXYZ) => try {},
92+
// everything properly fits on 1 line at exactly the max_width limit
93+
(ExampleTypeX::VariantABCDEFGH, ExampleTypeX::VariantBetaXYZ) => try {},
94+
// 1 char over the max_width limit
95+
(ExampleTypeX::VariantABCDEFGHI, ExampleTypeX::VariantBetaXYZ) => {
4696
try {}
4797
}
4898
_ => {}

0 commit comments

Comments
 (0)