Skip to content

Commit 326124b

Browse files
committed
Avoid renaming for TupleStruct with multiple arguments
update spec
1 parent 20338fd commit 326124b

File tree

3 files changed

+48
-20
lines changed

3 files changed

+48
-20
lines changed

clippy_lints/src/manual_let_else.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,8 @@ fn emit_manual_let_else(
156156
let (sn_pat, _) = snippet_with_context(cx, pat.span, span.ctxt(), "", &mut app);
157157
format!("({sn_pat})")
158158
},
159-
PatKind::TupleStruct(ref w, ..) => {
159+
// Replace the variable name iff `TupleStruct` has one argument like `Variant(v)`.
160+
PatKind::TupleStruct(ref w, args, ..) if args.len() == 1 => {
160161
let sn_wrapper = cx.sess().source_map().span_to_snippet(w.span()).unwrap_or_default();
161162
let (sn_inner, _) = snippet_with_context(cx, local.span, span.ctxt(), "", &mut app);
162163
format!("{sn_wrapper}({sn_inner})")

tests/ui/manual_let_else.rs

+15
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,12 @@
88
)]
99
#![warn(clippy::manual_let_else)]
1010

11+
enum Variant {
12+
A(usize, usize),
13+
B(usize),
14+
C,
15+
}
16+
1117
fn g() -> Option<()> {
1218
None
1319
}
@@ -248,4 +254,13 @@ fn not_fire() {
248254
Some(value) => value,
249255
_ => macro_call!(),
250256
};
257+
258+
fn e() -> Variant {
259+
Variant::A(0, 0)
260+
}
261+
262+
// Should not be renamed
263+
let v = if let Variant::A(a, 0) = e() { a } else { return };
264+
// Should be renamed
265+
let v = if let Variant::B(b) = e() { b } else { return };
251266
}

tests/ui/manual_let_else.stderr

+31-19
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
error: this could be rewritten as `let...else`
2-
--> $DIR/manual_let_else.rs:18:5
2+
--> $DIR/manual_let_else.rs:24:5
33
|
44
LL | let v = if let Some(v_some) = g() { v_some } else { return };
55
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider writing: `let Some(v) = g() else { return };`
66
|
77
= note: `-D clippy::manual-let-else` implied by `-D warnings`
88

99
error: this could be rewritten as `let...else`
10-
--> $DIR/manual_let_else.rs:19:5
10+
--> $DIR/manual_let_else.rs:25:5
1111
|
1212
LL | / let v = if let Some(v_some) = g() {
1313
LL | | v_some
@@ -24,7 +24,7 @@ LL + };
2424
|
2525

2626
error: this could be rewritten as `let...else`
27-
--> $DIR/manual_let_else.rs:25:5
27+
--> $DIR/manual_let_else.rs:31:5
2828
|
2929
LL | / let v = if let Some(v) = g() {
3030
LL | | // Blocks around the identity should have no impact
@@ -45,25 +45,25 @@ LL + };
4545
|
4646

4747
error: this could be rewritten as `let...else`
48-
--> $DIR/manual_let_else.rs:38:9
48+
--> $DIR/manual_let_else.rs:44:9
4949
|
5050
LL | let v = if let Some(v_some) = g() { v_some } else { continue };
5151
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider writing: `let Some(v) = g() else { continue };`
5252

5353
error: this could be rewritten as `let...else`
54-
--> $DIR/manual_let_else.rs:39:9
54+
--> $DIR/manual_let_else.rs:45:9
5555
|
5656
LL | let v = if let Some(v_some) = g() { v_some } else { break };
5757
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider writing: `let Some(v) = g() else { break };`
5858

5959
error: this could be rewritten as `let...else`
60-
--> $DIR/manual_let_else.rs:43:5
60+
--> $DIR/manual_let_else.rs:49:5
6161
|
6262
LL | let v = if let Some(v_some) = g() { v_some } else { panic!() };
6363
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider writing: `let Some(v) = g() else { panic!() };`
6464

6565
error: this could be rewritten as `let...else`
66-
--> $DIR/manual_let_else.rs:46:5
66+
--> $DIR/manual_let_else.rs:52:5
6767
|
6868
LL | / let v = if let Some(v_some) = g() {
6969
LL | | v_some
@@ -80,7 +80,7 @@ LL + };
8080
|
8181

8282
error: this could be rewritten as `let...else`
83-
--> $DIR/manual_let_else.rs:53:5
83+
--> $DIR/manual_let_else.rs:59:5
8484
|
8585
LL | / let v = if let Some(v_some) = g() {
8686
LL | | v_some
@@ -97,7 +97,7 @@ LL + };
9797
|
9898

9999
error: this could be rewritten as `let...else`
100-
--> $DIR/manual_let_else.rs:60:5
100+
--> $DIR/manual_let_else.rs:66:5
101101
|
102102
LL | / let v = if let Some(v_some) = g() {
103103
LL | | v_some
@@ -116,7 +116,7 @@ LL + };
116116
|
117117

118118
error: this could be rewritten as `let...else`
119-
--> $DIR/manual_let_else.rs:70:5
119+
--> $DIR/manual_let_else.rs:76:5
120120
|
121121
LL | / let v = if let Some(v_some) = g() {
122122
LL | | v_some
@@ -138,13 +138,13 @@ LL + };
138138
|
139139

140140
error: this could be rewritten as `let...else`
141-
--> $DIR/manual_let_else.rs:80:5
141+
--> $DIR/manual_let_else.rs:86:5
142142
|
143143
LL | let v = if let Some(v_some) = g() { v_some } else { if panic!() {} };
144144
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider writing: `let Some(v) = g() else { if panic!() {} };`
145145

146146
error: this could be rewritten as `let...else`
147-
--> $DIR/manual_let_else.rs:83:5
147+
--> $DIR/manual_let_else.rs:89:5
148148
|
149149
LL | / let v = if let Some(v_some) = g() {
150150
LL | | v_some
@@ -165,7 +165,7 @@ LL + };
165165
|
166166

167167
error: this could be rewritten as `let...else`
168-
--> $DIR/manual_let_else.rs:92:5
168+
--> $DIR/manual_let_else.rs:98:5
169169
|
170170
LL | / let v = if let Some(v_some) = g() {
171171
LL | | v_some
@@ -186,7 +186,7 @@ LL + } };
186186
|
187187

188188
error: this could be rewritten as `let...else`
189-
--> $DIR/manual_let_else.rs:101:5
189+
--> $DIR/manual_let_else.rs:107:5
190190
|
191191
LL | / let v = if let Some(v_some) = g() {
192192
LL | | v_some
@@ -215,7 +215,7 @@ LL + };
215215
|
216216

217217
error: this could be rewritten as `let...else`
218-
--> $DIR/manual_let_else.rs:118:5
218+
--> $DIR/manual_let_else.rs:124:5
219219
|
220220
LL | / let (v, w) = if let Some(v_some) = g().map(|v| (v, 42)) {
221221
LL | | v_some
@@ -232,7 +232,7 @@ LL + };
232232
|
233233

234234
error: this could be rewritten as `let...else`
235-
--> $DIR/manual_let_else.rs:125:5
235+
--> $DIR/manual_let_else.rs:131:5
236236
|
237237
LL | / let v = if let (Some(v_some), w_some) = (g(), 0) {
238238
LL | | (w_some, v_some)
@@ -249,7 +249,7 @@ LL + };
249249
|
250250

251251
error: this could be rewritten as `let...else`
252-
--> $DIR/manual_let_else.rs:134:13
252+
--> $DIR/manual_let_else.rs:140:13
253253
|
254254
LL | let $n = if let Some(v) = $e { v } else { return };
255255
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider writing: `let Some($n) = g() else { return };`
@@ -260,13 +260,25 @@ LL | create_binding_if_some!(w, g());
260260
= note: this error originates in the macro `create_binding_if_some` (in Nightly builds, run with -Z macro-backtrace for more info)
261261

262262
error: this could be rewritten as `let...else`
263-
--> $DIR/manual_let_else.rs:247:5
263+
--> $DIR/manual_let_else.rs:253:5
264264
|
265265
LL | / let _ = match ff {
266266
LL | | Some(value) => value,
267267
LL | | _ => macro_call!(),
268268
LL | | };
269269
| |______^ help: consider writing: `let Some(_) = ff else { macro_call!() };`
270270

271-
error: aborting due to 18 previous errors
271+
error: this could be rewritten as `let...else`
272+
--> $DIR/manual_let_else.rs:263:5
273+
|
274+
LL | let v = if let Variant::A(a, 0) = e() { a } else { return };
275+
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider writing: `let Variant::A(a, 0) = e() else { return };`
276+
277+
error: this could be rewritten as `let...else`
278+
--> $DIR/manual_let_else.rs:265:5
279+
|
280+
LL | let v = if let Variant::B(b) = e() { b } else { return };
281+
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider writing: `let Variant::B(v) = e() else { return };`
282+
283+
error: aborting due to 20 previous errors
272284

0 commit comments

Comments
 (0)