diff options
Diffstat (limited to 'crates/ide_assists/src/handlers')
-rw-r--r-- | crates/ide_assists/src/handlers/extract_function.rs | 10 | ||||
-rw-r--r-- | crates/ide_assists/src/handlers/pull_assignment_up.rs | 43 |
2 files changed, 51 insertions, 2 deletions
diff --git a/crates/ide_assists/src/handlers/extract_function.rs b/crates/ide_assists/src/handlers/extract_function.rs index 9f34cc725..8779d8bd1 100644 --- a/crates/ide_assists/src/handlers/extract_function.rs +++ b/crates/ide_assists/src/handlers/extract_function.rs | |||
@@ -112,7 +112,10 @@ pub(crate) fn extract_function(acc: &mut Assists, ctx: &AssistContext) -> Option | |||
112 | 112 | ||
113 | let fn_def = format_function(ctx, module, &fun, old_indent, new_indent); | 113 | let fn_def = format_function(ctx, module, &fun, old_indent, new_indent); |
114 | let insert_offset = insert_after.text_range().end(); | 114 | let insert_offset = insert_after.text_range().end(); |
115 | builder.insert(insert_offset, fn_def); | 115 | match ctx.config.snippet_cap { |
116 | Some(cap) => builder.insert_snippet(cap, insert_offset, fn_def), | ||
117 | None => builder.insert(insert_offset, fn_def), | ||
118 | } | ||
116 | }, | 119 | }, |
117 | ) | 120 | ) |
118 | } | 121 | } |
@@ -1079,7 +1082,10 @@ fn format_function( | |||
1079 | let params = make_param_list(ctx, module, fun); | 1082 | let params = make_param_list(ctx, module, fun); |
1080 | let ret_ty = make_ret_ty(ctx, module, fun); | 1083 | let ret_ty = make_ret_ty(ctx, module, fun); |
1081 | let body = make_body(ctx, old_indent, new_indent, fun); | 1084 | let body = make_body(ctx, old_indent, new_indent, fun); |
1082 | format_to!(fn_def, "\n\n{}fn $0{}{}", new_indent, fun.name, params); | 1085 | match ctx.config.snippet_cap { |
1086 | Some(_) => format_to!(fn_def, "\n\n{}fn $0{}{}", new_indent, fun.name, params), | ||
1087 | None => format_to!(fn_def, "\n\n{}fn {}{}", new_indent, fun.name, params), | ||
1088 | } | ||
1083 | if let Some(ret_ty) = ret_ty { | 1089 | if let Some(ret_ty) = ret_ty { |
1084 | format_to!(fn_def, " {}", ret_ty); | 1090 | format_to!(fn_def, " {}", ret_ty); |
1085 | } | 1091 | } |
diff --git a/crates/ide_assists/src/handlers/pull_assignment_up.rs b/crates/ide_assists/src/handlers/pull_assignment_up.rs index 13e1cb754..377ed4f2f 100644 --- a/crates/ide_assists/src/handlers/pull_assignment_up.rs +++ b/crates/ide_assists/src/handlers/pull_assignment_up.rs | |||
@@ -156,6 +156,17 @@ fn is_equivalent( | |||
156 | false | 156 | false |
157 | } | 157 | } |
158 | } | 158 | } |
159 | (ast::Expr::PrefixExpr(prefix0), ast::Expr::PrefixExpr(prefix1)) | ||
160 | if prefix0.op_kind() == Some(ast::PrefixOp::Deref) | ||
161 | && prefix1.op_kind() == Some(ast::PrefixOp::Deref) => | ||
162 | { | ||
163 | mark::hit!(test_pull_assignment_up_deref); | ||
164 | if let (Some(prefix0), Some(prefix1)) = (prefix0.expr(), prefix1.expr()) { | ||
165 | is_equivalent(sema, &prefix0, &prefix1) | ||
166 | } else { | ||
167 | false | ||
168 | } | ||
169 | } | ||
159 | _ => false, | 170 | _ => false, |
160 | } | 171 | } |
161 | } | 172 | } |
@@ -397,4 +408,36 @@ fn foo() { | |||
397 | }"#, | 408 | }"#, |
398 | ) | 409 | ) |
399 | } | 410 | } |
411 | |||
412 | #[test] | ||
413 | fn test_pull_assignment_up_deref() { | ||
414 | mark::check!(test_pull_assignment_up_deref); | ||
415 | check_assist( | ||
416 | pull_assignment_up, | ||
417 | r#" | ||
418 | fn foo() { | ||
419 | let mut a = 1; | ||
420 | let b = &mut a; | ||
421 | |||
422 | if true { | ||
423 | $0*b = 2; | ||
424 | } else { | ||
425 | *b = 3; | ||
426 | } | ||
427 | } | ||
428 | "#, | ||
429 | r#" | ||
430 | fn foo() { | ||
431 | let mut a = 1; | ||
432 | let b = &mut a; | ||
433 | |||
434 | *b = if true { | ||
435 | 2 | ||
436 | } else { | ||
437 | 3 | ||
438 | }; | ||
439 | } | ||
440 | "#, | ||
441 | ) | ||
442 | } | ||
400 | } | 443 | } |