@@ -56,7 +56,11 @@ pub(crate) fn convert_to_guarded_return(acc: &mut Assists, ctx: &AssistContext)
56
56
match path. qualifier ( ) {
57
57
None => {
58
58
let bound_ident = pat. fields ( ) . next ( ) . unwrap ( ) ;
59
- Some ( ( path, bound_ident) )
59
+ if ast:: IdentPat :: can_cast ( bound_ident. syntax ( ) . kind ( ) ) {
60
+ Some ( ( path, bound_ident) )
61
+ } else {
62
+ return None ;
63
+ }
60
64
}
61
65
Some ( _) => return None ,
62
66
}
@@ -143,10 +147,7 @@ pub(crate) fn convert_to_guarded_return(acc: &mut Assists, ctx: &AssistContext)
143
147
make:: expr_match ( cond_expr, make:: match_arm_list ( vec ! [ happy_arm, sad_arm] ) )
144
148
} ;
145
149
146
- let let_stmt = make:: let_stmt (
147
- make:: ident_pat ( make:: name ( & bound_ident. syntax ( ) . to_string ( ) ) ) . into ( ) ,
148
- Some ( match_expr) ,
149
- ) ;
150
+ let let_stmt = make:: let_stmt ( bound_ident, Some ( match_expr) ) ;
150
151
let let_stmt = let_stmt. indent ( if_indent_level) ;
151
152
replace ( let_stmt. syntax ( ) , & then_block, & parent_block, & if_expr)
152
153
}
@@ -284,7 +285,7 @@ mod tests {
284
285
r#"
285
286
fn main(n: Option<String>) {
286
287
bar();
287
- if$0 let Ok (n) = n {
288
+ if$0 let Some (n) = n {
288
289
foo(n);
289
290
290
291
//comment
@@ -296,7 +297,69 @@ mod tests {
296
297
fn main(n: Option<String>) {
297
298
bar();
298
299
let n = match n {
299
- Ok(it) => it,
300
+ Some(it) => it,
301
+ _ => return,
302
+ };
303
+ foo(n);
304
+
305
+ //comment
306
+ bar();
307
+ }
308
+ "# ,
309
+ ) ;
310
+ }
311
+
312
+ #[ test]
313
+ fn convert_let_mut_ok_inside_fn ( ) {
314
+ check_assist (
315
+ convert_to_guarded_return,
316
+ r#"
317
+ fn main(n: Option<String>) {
318
+ bar();
319
+ if$0 let Some(mut n) = n {
320
+ foo(n);
321
+
322
+ //comment
323
+ bar();
324
+ }
325
+ }
326
+ "# ,
327
+ r#"
328
+ fn main(n: Option<String>) {
329
+ bar();
330
+ let mut n = match n {
331
+ Some(it) => it,
332
+ _ => return,
333
+ };
334
+ foo(n);
335
+
336
+ //comment
337
+ bar();
338
+ }
339
+ "# ,
340
+ ) ;
341
+ }
342
+
343
+ #[ test]
344
+ fn convert_let_ref_ok_inside_fn ( ) {
345
+ check_assist (
346
+ convert_to_guarded_return,
347
+ r#"
348
+ fn main(n: Option<&str>) {
349
+ bar();
350
+ if$0 let Some(ref n) = n {
351
+ foo(n);
352
+
353
+ //comment
354
+ bar();
355
+ }
356
+ }
357
+ "# ,
358
+ r#"
359
+ fn main(n: Option<&str>) {
360
+ bar();
361
+ let ref n = match n {
362
+ Some(it) => it,
300
363
_ => return,
301
364
};
302
365
foo(n);
0 commit comments