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
Chayim Refael Friedman 8 weeks ago
parent c807114 · parent 7e5955c · commit 2519018
-rw-r--r--crates/ide-assists/src/handlers/merge_match_arms.rs39
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,