Unnamed repository; edit this file 'description' to name the repository.
Merge pull request #21411 from A4-Tacks/merge-ambig-ident-pat
Fix not applicable on ambiguous ident pat for merge_match_arms
| -rw-r--r-- | crates/ide-assists/src/handlers/merge_match_arms.rs | 39 |
1 files changed, 38 insertions, 1 deletions
diff --git a/crates/ide-assists/src/handlers/merge_match_arms.rs b/crates/ide-assists/src/handlers/merge_match_arms.rs index 08170f81b2..6e84af5f91 100644 --- a/crates/ide-assists/src/handlers/merge_match_arms.rs +++ b/crates/ide-assists/src/handlers/merge_match_arms.rs @@ -160,8 +160,11 @@ fn get_arm_types<'db>( } } ast::Pat::IdentPat(ident_pat) => { - if let Some(name) = ident_pat.name() { + if let Some(name) = ident_pat.name() + && ctx.sema.to_def(ident_pat).is_some() + { let pat_type = ctx.sema.type_of_binding_in_pat(ident_pat); + map.insert(name.text().to_string(), pat_type); } } @@ -213,6 +216,40 @@ fn main() { } #[test] + fn merge_match_arms_ambiguous_ident_patterns() { + check_assist( + merge_match_arms, + r#" +#[derive(Debug)] +enum X { A, B, C } +use X::*; + +fn main() { + let x = A; + let y = match x { + A => { 1i32$0 } + B => { 1i32 } + C => { 2i32 } + } +} +"#, + r#" +#[derive(Debug)] +enum X { A, B, C } +use X::*; + +fn main() { + let x = A; + let y = match x { + A | B => { 1i32 }, + C => { 2i32 } + } +} +"#, + ); + } + + #[test] fn merge_match_arms_multiple_patterns() { check_assist( merge_match_arms, |