about summary refs log tree commit diff
diff options
context:
space:
mode:
authorJeroen Vannevel <jer_vannevel@outlook.com>2022-01-14 01:18:03 +0000
committerJeroen Vannevel <jer_vannevel@outlook.com>2022-01-14 01:32:12 +0000
commit8deadb18ae2654ebbb07dc9b0e030fe1caebfacf (patch)
treed7b4e994d3feceb339b1d44247f2286133f644a2
parent82d3238da8f6c33dc1beb07f3ec945d218615ab8 (diff)
downloadrust-8deadb18ae2654ebbb07dc9b0e030fe1caebfacf.tar.gz
rust-8deadb18ae2654ebbb07dc9b0e030fe1caebfacf.zip
refpat & slicepat
-rw-r--r--crates/ide_assists/src/handlers/merge_match_arms.rs40
1 files changed, 40 insertions, 0 deletions
diff --git a/crates/ide_assists/src/handlers/merge_match_arms.rs b/crates/ide_assists/src/handlers/merge_match_arms.rs
index ecb7d4bf079..209d352c78d 100644
--- a/crates/ide_assists/src/handlers/merge_match_arms.rs
+++ b/crates/ide_assists/src/handlers/merge_match_arms.rs
@@ -146,6 +146,11 @@ fn get_arm_types(context: &AssistContext, arm: &MatchArm) -> HashMap<String, Opt
                 Some(ast::Pat::ParenPat(parentheses)) => {
                     recurse(&parentheses.pat(), map, ctx);
                 }
+                Some(ast::Pat::SlicePat(slice)) => {
+                    for slice_pat in slice.pats() {
+                        recurse(&Some(slice_pat), map, ctx);
+                    }
+                }
                 Some(ast::Pat::IdentPat(ident_pat)) => {
                     if let Some(name) = ident_pat.name() {
                         let pat_type = ctx.sema.type_of_pat(local_pat);
@@ -751,4 +756,39 @@ fn func(x: i32) {
         "#,
         )
     }
+
+    #[test]
+    fn merge_match_arms_refpat() {
+        check_assist_not_applicable(
+            merge_match_arms,
+            r#"
+fn func() {
+    let name = Some(String::from(""));
+    let n = String::from("");
+    match name {
+        Some(ref n) => $0"",
+        Some(n) => "",
+        _ => "other",
+    };
+}
+        "#,
+        )
+    }
+
+    #[test]
+    fn merge_match_arms_slice() {
+        check_assist_not_applicable(
+            merge_match_arms,
+            r#"
+fn func(binary: &[u8]) {
+    let space = b' ';
+    match binary {
+        [0x7f, b'E', b'L', b'F', ..] => $0"",
+        [space] => "",
+        _ => "other",
+    };
+}
+        "#,
+        )
+    }
 }