diff options
Diffstat (limited to 'crates/ra_assists/src/handlers/merge_match_arms.rs')
-rw-r--r-- | crates/ra_assists/src/handlers/merge_match_arms.rs | 46 |
1 files changed, 26 insertions, 20 deletions
diff --git a/crates/ra_assists/src/handlers/merge_match_arms.rs b/crates/ra_assists/src/handlers/merge_match_arms.rs index 90ce66378..f0f11a046 100644 --- a/crates/ra_assists/src/handlers/merge_match_arms.rs +++ b/crates/ra_assists/src/handlers/merge_match_arms.rs | |||
@@ -6,7 +6,7 @@ use ra_syntax::{ | |||
6 | Direction, | 6 | Direction, |
7 | }; | 7 | }; |
8 | 8 | ||
9 | use crate::{AssistContext, AssistId, Assists, TextRange}; | 9 | use crate::{AssistContext, AssistId, AssistKind, Assists, TextRange}; |
10 | 10 | ||
11 | // Assist: merge_match_arms | 11 | // Assist: merge_match_arms |
12 | // | 12 | // |
@@ -59,25 +59,31 @@ pub(crate) fn merge_match_arms(acc: &mut Assists, ctx: &AssistContext) -> Option | |||
59 | return None; | 59 | return None; |
60 | } | 60 | } |
61 | 61 | ||
62 | acc.add(AssistId("merge_match_arms"), "Merge match arms", current_text_range, |edit| { | 62 | acc.add( |
63 | let pats = if arms_to_merge.iter().any(contains_placeholder) { | 63 | AssistId("merge_match_arms"), |
64 | "_".into() | 64 | AssistKind::RefactorRewrite, |
65 | } else { | 65 | "Merge match arms", |
66 | arms_to_merge | 66 | current_text_range, |
67 | .iter() | 67 | |edit| { |
68 | .filter_map(ast::MatchArm::pat) | 68 | let pats = if arms_to_merge.iter().any(contains_placeholder) { |
69 | .map(|x| x.syntax().to_string()) | 69 | "_".into() |
70 | .collect::<Vec<String>>() | 70 | } else { |
71 | .join(" | ") | 71 | arms_to_merge |
72 | }; | 72 | .iter() |
73 | 73 | .filter_map(ast::MatchArm::pat) | |
74 | let arm = format!("{} => {}", pats, current_expr.syntax().text()); | 74 | .map(|x| x.syntax().to_string()) |
75 | 75 | .collect::<Vec<String>>() | |
76 | let start = arms_to_merge.first().unwrap().syntax().text_range().start(); | 76 | .join(" | ") |
77 | let end = arms_to_merge.last().unwrap().syntax().text_range().end(); | 77 | }; |
78 | 78 | ||
79 | edit.replace(TextRange::new(start, end), arm); | 79 | let arm = format!("{} => {}", pats, current_expr.syntax().text()); |
80 | }) | 80 | |
81 | let start = arms_to_merge.first().unwrap().syntax().text_range().start(); | ||
82 | let end = arms_to_merge.last().unwrap().syntax().text_range().end(); | ||
83 | |||
84 | edit.replace(TextRange::new(start, end), arm); | ||
85 | }, | ||
86 | ) | ||
81 | } | 87 | } |
82 | 88 | ||
83 | fn contains_placeholder(a: &ast::MatchArm) -> bool { | 89 | fn contains_placeholder(a: &ast::MatchArm) -> bool { |