Skip to content

Commit d93aa82

Browse files
committed
feat(zero_repeat_side_effects): don't suggest unnecessary braces around stmts
1 parent 19343bf commit d93aa82

File tree

4 files changed

+19
-15
lines changed

4 files changed

+19
-15
lines changed

clippy_lints/src/zero_repeat_side_effects.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,8 @@ fn inner_check(cx: &LateContext<'_>, expr: &'_ rustc_hir::Expr<'_>, inner_expr:
9292
var_name = snippet(cx, l.span.source_callsite(), "..")
9393
),
9494
),
95+
// NOTE: don't use the stmt span to avoid touching the trailing semicolon
96+
Node::Stmt(_) => (expr.span, format!("{inner_expr}; {vec}[] as {return_type}")),
9597
_ => (expr.span, format!("{{ {inner_expr}; {vec}[] as {return_type} }}")),
9698
};
9799
span_lint_and_then(

tests/ui/zero_repeat_side_effects.fixed

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#![warn(clippy::zero_repeat_side_effects)]
22
#![expect(clippy::unnecessary_operation, clippy::useless_vec, clippy::needless_late_init)]
3+
#![allow(clippy::no_effect)] // only fires _after_ the fix
34

45
fn f() -> i32 {
56
println!("side effect");
@@ -40,9 +41,9 @@ fn main() {
4041
//~^ zero_repeat_side_effects
4142

4243
// when singled out/not part of assignment/local
43-
{ f(); vec![] as std::vec::Vec<i32> };
44+
f(); vec![] as std::vec::Vec<i32>;
4445
//~^ zero_repeat_side_effects
45-
{ f(); [] as [i32; 0] };
46+
f(); [] as [i32; 0];
4647
//~^ zero_repeat_side_effects
4748

4849
// should not trigger

tests/ui/zero_repeat_side_effects.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#![warn(clippy::zero_repeat_side_effects)]
22
#![expect(clippy::unnecessary_operation, clippy::useless_vec, clippy::needless_late_init)]
3+
#![allow(clippy::no_effect)] // only fires _after_ the fix
34

45
fn f() -> i32 {
56
println!("side effect");

tests/ui/zero_repeat_side_effects.stderr

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
error: expression with side effects as the initial value in a zero-sized array initializer
2-
--> tests/ui/zero_repeat_side_effects.rs:16:5
2+
--> tests/ui/zero_repeat_side_effects.rs:17:5
33
|
44
LL | let a = [f(); 0];
55
| ^^^^^^^^^^^^^^^^^
@@ -13,7 +13,7 @@ LL + f(); let a: [i32; 0] = [];
1313
|
1414

1515
error: expression with side effects as the initial value in a zero-sized array initializer
16-
--> tests/ui/zero_repeat_side_effects.rs:19:5
16+
--> tests/ui/zero_repeat_side_effects.rs:20:5
1717
|
1818
LL | b = [f(); 0];
1919
| ^^^^^^^^^^^^
@@ -25,7 +25,7 @@ LL + f(); b = [] as [i32; 0];
2525
|
2626

2727
error: expression with side effects as the initial value in a zero-sized array initializer
28-
--> tests/ui/zero_repeat_side_effects.rs:24:5
28+
--> tests/ui/zero_repeat_side_effects.rs:25:5
2929
|
3030
LL | let c = vec![f(); 0];
3131
| ^^^^^^^^^^^^^^^^^^^^^
@@ -37,7 +37,7 @@ LL + f(); let c: std::vec::Vec<i32> = vec![];
3737
|
3838

3939
error: expression with side effects as the initial value in a zero-sized array initializer
40-
--> tests/ui/zero_repeat_side_effects.rs:27:5
40+
--> tests/ui/zero_repeat_side_effects.rs:28:5
4141
|
4242
LL | d = vec![f(); 0];
4343
| ^^^^^^^^^^^^^^^^
@@ -49,7 +49,7 @@ LL + f(); d = vec![] as std::vec::Vec<i32>;
4949
|
5050

5151
error: expression with side effects as the initial value in a zero-sized array initializer
52-
--> tests/ui/zero_repeat_side_effects.rs:31:5
52+
--> tests/ui/zero_repeat_side_effects.rs:32:5
5353
|
5454
LL | let e = [println!("side effect"); 0];
5555
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@@ -61,7 +61,7 @@ LL + println!("side effect"); let e: [(); 0] = [];
6161
|
6262

6363
error: expression with side effects as the initial value in a zero-sized array initializer
64-
--> tests/ui/zero_repeat_side_effects.rs:35:5
64+
--> tests/ui/zero_repeat_side_effects.rs:36:5
6565
|
6666
LL | let g = [{ f() }; 0];
6767
| ^^^^^^^^^^^^^^^^^^^^^
@@ -73,7 +73,7 @@ LL + { f() }; let g: [i32; 0] = [];
7373
|
7474

7575
error: expression with side effects as the initial value in a zero-sized array initializer
76-
--> tests/ui/zero_repeat_side_effects.rs:39:10
76+
--> tests/ui/zero_repeat_side_effects.rs:40:10
7777
|
7878
LL | drop(vec![f(); 0]);
7979
| ^^^^^^^^^^^^
@@ -85,31 +85,31 @@ LL + drop({ f(); vec![] as std::vec::Vec<i32> });
8585
|
8686

8787
error: expression with side effects as the initial value in a zero-sized array initializer
88-
--> tests/ui/zero_repeat_side_effects.rs:43:5
88+
--> tests/ui/zero_repeat_side_effects.rs:44:5
8989
|
9090
LL | vec![f(); 0];
9191
| ^^^^^^^^^^^^
9292
|
9393
help: consider performing the side effect separately
9494
|
9595
LL - vec![f(); 0];
96-
LL + { f(); vec![] as std::vec::Vec<i32> };
96+
LL + f(); vec![] as std::vec::Vec<i32>;
9797
|
9898

9999
error: expression with side effects as the initial value in a zero-sized array initializer
100-
--> tests/ui/zero_repeat_side_effects.rs:45:5
100+
--> tests/ui/zero_repeat_side_effects.rs:46:5
101101
|
102102
LL | [f(); 0];
103103
| ^^^^^^^^
104104
|
105105
help: consider performing the side effect separately
106106
|
107107
LL - [f(); 0];
108-
LL + { f(); [] as [i32; 0] };
108+
LL + f(); [] as [i32; 0];
109109
|
110110

111111
error: expression with side effects as the initial value in a zero-sized array initializer
112-
--> tests/ui/zero_repeat_side_effects.rs:99:10
112+
--> tests/ui/zero_repeat_side_effects.rs:100:10
113113
|
114114
LL | foo(&[Some(f()); 0]);
115115
| ^^^^^^^^^^^^^^
@@ -121,7 +121,7 @@ LL + foo(&{ Some(f()); [] as [std::option::Option<i32>; 0] });
121121
|
122122

123123
error: expression with side effects as the initial value in a zero-sized array initializer
124-
--> tests/ui/zero_repeat_side_effects.rs:101:10
124+
--> tests/ui/zero_repeat_side_effects.rs:102:10
125125
|
126126
LL | foo(&[Some(Some(S::new())); 0]);
127127
| ^^^^^^^^^^^^^^^^^^^^^^^^^

0 commit comments

Comments
 (0)