1
1
use syntax:: ast:: { edit:: AstNodeEdit , AstNode , HasName , LetStmt , Pat } ;
2
+ use syntax:: T ;
2
3
3
4
use crate :: { AssistContext , AssistId , AssistKind , Assists } ;
4
5
@@ -95,7 +96,7 @@ fn binders_to_str(binders: &[(String, bool)], addmut: bool) -> String {
95
96
//
96
97
// ```
97
98
// fn main() {
98
- // let Ok(mut x) = f() else {$0 return };
99
+ // let Ok(mut x) = f() else$0 { return };
99
100
// }
100
101
// ```
101
102
// ->
@@ -108,7 +109,9 @@ fn binders_to_str(binders: &[(String, bool)], addmut: bool) -> String {
108
109
// }
109
110
// ```
110
111
pub ( crate ) fn convert_let_else_to_match ( acc : & mut Assists , ctx : & AssistContext ) -> Option < ( ) > {
111
- let let_stmt: LetStmt = ctx. find_node_at_offset ( ) ?;
112
+ // should focus on else token to trigger
113
+ let else_token = ctx. find_token_syntax_at_offset ( T ! [ else] ) ?;
114
+ let let_stmt = LetStmt :: cast ( else_token. parent ( ) ?. parent ( ) ?) ?;
112
115
let let_else_block = let_stmt. let_else ( ) ?. block_expr ( ) ?;
113
116
let let_init = let_stmt. initializer ( ) ?;
114
117
if let_stmt. ty ( ) . is_some ( ) {
@@ -177,18 +180,30 @@ mod tests {
177
180
convert_let_else_to_match,
178
181
r#"
179
182
fn main() {
180
- let 1: u32 = v.iter().sum() else {$0 return };
183
+ let 1: u32 = v.iter().sum() else$0 { return };
181
184
}"# ,
182
185
) ;
183
186
}
184
187
188
+ #[ test]
189
+ fn convert_let_else_to_match_on_else ( ) {
190
+ check_assist_not_applicable (
191
+ convert_let_else_to_match,
192
+ r#"
193
+ fn main() {
194
+ let Ok(x) = f() else {$0 return };
195
+ }
196
+ "# ,
197
+ ) ;
198
+ }
199
+
185
200
#[ test]
186
201
fn convert_let_else_to_match_no_macropat ( ) {
187
202
check_assist_not_applicable (
188
203
convert_let_else_to_match,
189
204
r#"
190
205
fn main() {
191
- let m!() = g() else {$0 return };
206
+ let m!() = g() else$0 { return };
192
207
}
193
208
"# ,
194
209
) ;
@@ -200,7 +215,7 @@ fn main() {
200
215
convert_let_else_to_match,
201
216
r"
202
217
fn main() {
203
- let Ok(x) = f() else {$0 continue };
218
+ let Ok(x) = f() else$0 { continue };
204
219
}" ,
205
220
"let Ok(x) = f() else { continue };" ,
206
221
) ;
@@ -212,7 +227,7 @@ fn main() {
212
227
convert_let_else_to_match,
213
228
r"
214
229
fn main() {
215
- let Ok(x) = f() else {$0 continue };
230
+ let Ok(x) = f() else$0 { continue };
216
231
}" ,
217
232
r"
218
233
fn main() {
@@ -230,7 +245,7 @@ fn main() {
230
245
convert_let_else_to_match,
231
246
r"
232
247
fn main() {
233
- let Ok(mut x) = f() else {$0 continue };
248
+ let Ok(mut x) = f() el$0se { continue };
234
249
}" ,
235
250
r"
236
251
fn main() {
@@ -248,7 +263,7 @@ fn main() {
248
263
convert_let_else_to_match,
249
264
r#"
250
265
fn main() {
251
- let ControlFlow::Break((x, "tag", y, ..)) = f() else {$0 g(); return };
266
+ let ControlFlow::Break((x, "tag", y, ..)) = f() else$0 { g(); return };
252
267
}"# ,
253
268
r#"
254
269
fn main() {
@@ -266,7 +281,7 @@ fn main() {
266
281
convert_let_else_to_match,
267
282
r#"
268
283
fn main() {
269
- let [one, 1001, other] = f() else {$0 break };
284
+ let [one, 1001, other] = f() else$0 { break };
270
285
}"# ,
271
286
r#"
272
287
fn main() {
@@ -284,7 +299,7 @@ fn main() {
284
299
convert_let_else_to_match,
285
300
r#"
286
301
fn main() {
287
- let [Struct { inner: Some(it) }, 1001, other] = f() else {$0 break };
302
+ let [Struct { inner: Some(it) }, 1001, other] = f() else$0 { break };
288
303
}"# ,
289
304
r#"
290
305
fn main() {
@@ -302,7 +317,7 @@ fn main() {
302
317
convert_let_else_to_match,
303
318
r#"
304
319
fn main() {
305
- let [Struct { inner }, 1001, other] = f() else {$0 break };
320
+ let [Struct { inner }, 1001, other] = f() else$0 { break };
306
321
}"# ,
307
322
r#"
308
323
fn main() {
@@ -320,7 +335,7 @@ fn main() {
320
335
convert_let_else_to_match,
321
336
r#"
322
337
fn main() {
323
- let (8 | 9) = f() else {$0 panic!() };
338
+ let (8 | 9) = f() else$0 { panic!() };
324
339
}"# ,
325
340
r#"
326
341
fn main() {
@@ -338,7 +353,7 @@ fn main() {
338
353
convert_let_else_to_match,
339
354
r#"
340
355
fn main() {
341
- let 1.. = f() else {$0 return };
356
+ let 1.. = f() e$0lse { return };
342
357
}"# ,
343
358
r#"
344
359
fn main() {
@@ -356,7 +371,7 @@ fn main() {
356
371
convert_let_else_to_match,
357
372
r#"
358
373
fn main() {
359
- let Ok(&mut x) = f(&mut 0) else {$0 return };
374
+ let Ok(&mut x) = f(&mut 0) else$0 { return };
360
375
}"# ,
361
376
r#"
362
377
fn main() {
@@ -374,7 +389,7 @@ fn main() {
374
389
convert_let_else_to_match,
375
390
r#"
376
391
fn main() {
377
- let Ok(ref mut x) = f() else {$0 return };
392
+ let Ok(ref mut x) = f() else$0 { return };
378
393
}"# ,
379
394
r#"
380
395
fn main() {
@@ -392,7 +407,7 @@ fn main() {
392
407
convert_let_else_to_match,
393
408
r#"
394
409
fn main() {
395
- let out @ Ok(ins) = f() else {$0 return };
410
+ let out @ Ok(ins) = f() else$0 { return };
396
411
}"# ,
397
412
r#"
398
413
fn main() {
@@ -411,7 +426,7 @@ fn main() {
411
426
r#"
412
427
fn main() {
413
428
let v = vec![1, 2, 3];
414
- let &[mut x, y, ..] = &v.iter().collect::<Vec<_>>()[..]$0 else { return };
429
+ let &[mut x, y, ..] = &v.iter().collect::<Vec<_>>()[..] else$0 { return };
415
430
}"# ,
416
431
r#"
417
432
fn main() {
0 commit comments