diff options
| author | Jeroen Vannevel <jer_vannevel@outlook.com> | 2022-01-14 01:18:03 +0000 |
|---|---|---|
| committer | Jeroen Vannevel <jer_vannevel@outlook.com> | 2022-01-14 01:32:12 +0000 |
| commit | 8deadb18ae2654ebbb07dc9b0e030fe1caebfacf (patch) | |
| tree | d7b4e994d3feceb339b1d44247f2286133f644a2 | |
| parent | 82d3238da8f6c33dc1beb07f3ec945d218615ab8 (diff) | |
| download | rust-8deadb18ae2654ebbb07dc9b0e030fe1caebfacf.tar.gz rust-8deadb18ae2654ebbb07dc9b0e030fe1caebfacf.zip | |
refpat & slicepat
| -rw-r--r-- | crates/ide_assists/src/handlers/merge_match_arms.rs | 40 |
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", + }; +} + "#, + ) + } } |
