Skip to content

Commit 4e16cfb

Browse files
committed
simple implementation
1 parent 1e303cc commit 4e16cfb

File tree

1 file changed

+13
-5
lines changed

1 file changed

+13
-5
lines changed

crates/ide_assists/src/handlers/add_missing_match_arms.rs

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ pub(crate) fn add_missing_match_arms(acc: &mut Assists, ctx: &AssistContext) ->
4141
let match_arm_list = match_expr.match_arm_list()?;
4242
let target_range : TextRange;
4343

44-
if !cursor_inside_simple_match_arm_list(&ctx, &match_expr, &match_arm_list) {
44+
if let None = cursor_inside_simple_match_arm_list(&ctx, &match_expr, &match_arm_list) {
4545
target_range = TextRange::new(
4646
ctx.sema.original_range(match_expr.syntax()).range.start(),
4747
ctx.sema.original_range(match_arm_list.syntax()).range.start(),
@@ -192,12 +192,20 @@ pub(crate) fn add_missing_match_arms(acc: &mut Assists, ctx: &AssistContext) ->
192192
)
193193
}
194194

195-
fn cursor_inside_simple_match_arm_list(ctx: &AssistContext, match_expr : &MatchExpr, match_arm_list : &MatchArmList) -> bool {
196-
// println!("---\n{:#?}\n{:#?}\n---", match_expr, match_arm_list);
195+
fn cursor_inside_simple_match_arm_list(ctx: &AssistContext, match_expr : &MatchExpr, match_arm_list : &MatchArmList) -> Option<()> {
196+
println!("---\n{:#?}\n{:#?}\n---", match_expr, match_arm_list);
197197
if match_arm_list.arms().next() == None {
198-
return true;
198+
return Some(());
199199
}
200-
false
200+
201+
let wild_pat = ctx.find_node_at_offset_with_descend::<ast::WildcardPat>()?;
202+
let arm = wild_pat.syntax().parent().and_then(ast::MatchArm::cast)?;
203+
let arm_match_expr = arm.syntax().ancestors().nth(2).and_then(ast::MatchExpr::cast)?;
204+
if arm_match_expr == *match_expr {
205+
return Some(())
206+
}
207+
208+
None
201209
}
202210

203211
fn is_variant_missing(existing_pats: &[Pat], var: &Pat) -> bool {

0 commit comments

Comments
 (0)