Skip to content

Commit 3e351cc

Browse files
committed
Add trailing comma when extracting match arm expressions into functions
1 parent 322513b commit 3e351cc

File tree

1 file changed

+66
-2
lines changed

1 file changed

+66
-2
lines changed

crates/ide_assists/src/handlers/extract_function.rs

Lines changed: 66 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,10 @@ pub(crate) fn extract_function(acc: &mut Assists, ctx: &AssistContext) -> Option
9797

9898
let params = extracted_function_params(ctx, &body, locals_used.iter().copied());
9999

100+
let insert_comma = body
101+
.parent()
102+
.and_then(ast::MatchArm::cast)
103+
.map_or(false, |it| it.comma_token().is_none());
100104
let fun = Function {
101105
name: "fun_name".to_string(),
102106
self_param,
@@ -110,7 +114,10 @@ pub(crate) fn extract_function(acc: &mut Assists, ctx: &AssistContext) -> Option
110114
let new_indent = IndentLevel::from_node(&insert_after);
111115
let old_indent = fun.body.indent_level();
112116

113-
builder.replace(target_range, format_replacement(ctx, &fun, old_indent, has_await));
117+
builder.replace(target_range, make_call(ctx, &fun, old_indent, has_await));
118+
if insert_comma {
119+
builder.insert(target_range.end(), ",");
120+
}
114121

115122
let fn_def = format_function(ctx, module, &fun, old_indent, new_indent, has_await);
116123
let insert_offset = insert_after.text_range().end();
@@ -364,6 +371,13 @@ fn try_kind_of_ty(ty: hir::Type, ctx: &AssistContext) -> Option<TryKind> {
364371
}
365372

366373
impl FunctionBody {
374+
fn parent(&self) -> Option<SyntaxNode> {
375+
match self {
376+
FunctionBody::Expr(expr) => expr.syntax().parent(),
377+
FunctionBody::Span { parent, .. } => Some(parent.syntax().clone()),
378+
}
379+
}
380+
367381
fn from_expr(expr: ast::Expr) -> Option<Self> {
368382
match expr {
369383
ast::Expr::BreakExpr(it) => it.expr().map(Self::Expr),
@@ -978,7 +992,7 @@ fn node_to_insert_after(body: &FunctionBody, anchor: Anchor) -> Option<SyntaxNod
978992
last_ancestor
979993
}
980994

981-
fn format_replacement(
995+
fn make_call(
982996
ctx: &AssistContext,
983997
fun: &Function,
984998
indent: IndentLevel,
@@ -3767,6 +3781,56 @@ async fn some_function() {
37673781
extract_function,
37683782
r#"
37693783
fn main() $0{}$0
3784+
"#,
3785+
);
3786+
}
3787+
3788+
#[test]
3789+
fn extract_adds_comma_for_match_arm() {
3790+
check_assist(
3791+
extract_function,
3792+
r#"
3793+
fn main() {
3794+
match 6 {
3795+
100 => $0{ 100 }$0
3796+
_ => 0,
3797+
}
3798+
}
3799+
"#,
3800+
r#"
3801+
fn main() {
3802+
match 6 {
3803+
100 => fun_name(),
3804+
_ => 0,
3805+
}
3806+
}
3807+
3808+
fn $0fun_name() -> i32 {
3809+
100
3810+
}
3811+
"#,
3812+
);
3813+
check_assist(
3814+
extract_function,
3815+
r#"
3816+
fn main() {
3817+
match 6 {
3818+
100 => $0{ 100 }$0,
3819+
_ => 0,
3820+
}
3821+
}
3822+
"#,
3823+
r#"
3824+
fn main() {
3825+
match 6 {
3826+
100 => fun_name(),
3827+
_ => 0,
3828+
}
3829+
}
3830+
3831+
fn $0fun_name() -> i32 {
3832+
100
3833+
}
37703834
"#,
37713835
);
37723836
}

0 commit comments

Comments
 (0)