diff options
Diffstat (limited to 'crates/ra_assists/src/handlers/unwrap_block.rs')
-rw-r--r-- | crates/ra_assists/src/handlers/unwrap_block.rs | 66 |
1 files changed, 39 insertions, 27 deletions
diff --git a/crates/ra_assists/src/handlers/unwrap_block.rs b/crates/ra_assists/src/handlers/unwrap_block.rs index 1fb13f481..a66fba7c3 100644 --- a/crates/ra_assists/src/handlers/unwrap_block.rs +++ b/crates/ra_assists/src/handlers/unwrap_block.rs | |||
@@ -7,7 +7,7 @@ use ra_syntax::{ | |||
7 | AstNode, TextRange, T, | 7 | AstNode, TextRange, T, |
8 | }; | 8 | }; |
9 | 9 | ||
10 | use crate::{AssistContext, AssistId, Assists}; | 10 | use crate::{AssistContext, AssistId, AssistKind, Assists}; |
11 | 11 | ||
12 | // Assist: unwrap_block | 12 | // Assist: unwrap_block |
13 | // | 13 | // |
@@ -50,35 +50,47 @@ pub(crate) fn unwrap_block(acc: &mut Assists, ctx: &AssistContext) -> Option<()> | |||
50 | let ancestor_then_branch = ancestor.then_branch()?; | 50 | let ancestor_then_branch = ancestor.then_branch()?; |
51 | 51 | ||
52 | let target = then_branch.syntax().text_range(); | 52 | let target = then_branch.syntax().text_range(); |
53 | return acc.add(assist_id, assist_label, target, |edit| { | 53 | return acc.add( |
54 | let range_to_del_else_if = TextRange::new( | 54 | assist_id, |
55 | ancestor_then_branch.syntax().text_range().end(), | 55 | AssistKind::Refactor, |
56 | l_curly_token.text_range().start(), | 56 | assist_label, |
57 | ); | 57 | target, |
58 | let range_to_del_rest = TextRange::new( | 58 | |edit| { |
59 | then_branch.syntax().text_range().end(), | 59 | let range_to_del_else_if = TextRange::new( |
60 | if_expr.syntax().text_range().end(), | 60 | ancestor_then_branch.syntax().text_range().end(), |
61 | ); | 61 | l_curly_token.text_range().start(), |
62 | 62 | ); | |
63 | edit.delete(range_to_del_rest); | 63 | let range_to_del_rest = TextRange::new( |
64 | edit.delete(range_to_del_else_if); | 64 | then_branch.syntax().text_range().end(), |
65 | edit.replace( | 65 | if_expr.syntax().text_range().end(), |
66 | target, | 66 | ); |
67 | update_expr_string(then_branch.to_string(), &[' ', '{']), | 67 | |
68 | ); | 68 | edit.delete(range_to_del_rest); |
69 | }); | 69 | edit.delete(range_to_del_else_if); |
70 | edit.replace( | ||
71 | target, | ||
72 | update_expr_string(then_branch.to_string(), &[' ', '{']), | ||
73 | ); | ||
74 | }, | ||
75 | ); | ||
70 | } | 76 | } |
71 | } else { | 77 | } else { |
72 | let target = block.syntax().text_range(); | 78 | let target = block.syntax().text_range(); |
73 | return acc.add(assist_id, assist_label, target, |edit| { | 79 | return acc.add( |
74 | let range_to_del = TextRange::new( | 80 | assist_id, |
75 | then_branch.syntax().text_range().end(), | 81 | AssistKind::RefactorRewrite, |
76 | l_curly_token.text_range().start(), | 82 | assist_label, |
77 | ); | 83 | target, |
84 | |edit| { | ||
85 | let range_to_del = TextRange::new( | ||
86 | then_branch.syntax().text_range().end(), | ||
87 | l_curly_token.text_range().start(), | ||
88 | ); | ||
78 | 89 | ||
79 | edit.delete(range_to_del); | 90 | edit.delete(range_to_del); |
80 | edit.replace(target, update_expr_string(block.to_string(), &[' ', '{'])); | 91 | edit.replace(target, update_expr_string(block.to_string(), &[' ', '{'])); |
81 | }); | 92 | }, |
93 | ); | ||
82 | } | 94 | } |
83 | } | 95 | } |
84 | _ => return None, | 96 | _ => return None, |
@@ -86,7 +98,7 @@ pub(crate) fn unwrap_block(acc: &mut Assists, ctx: &AssistContext) -> Option<()> | |||
86 | 98 | ||
87 | let unwrapped = unwrap_trivial_block(block); | 99 | let unwrapped = unwrap_trivial_block(block); |
88 | let target = unwrapped.syntax().text_range(); | 100 | let target = unwrapped.syntax().text_range(); |
89 | acc.add(assist_id, assist_label, target, |builder| { | 101 | acc.add(assist_id, AssistKind::RefactorRewrite, assist_label, target, |builder| { |
90 | builder.replace( | 102 | builder.replace( |
91 | parent.syntax().text_range(), | 103 | parent.syntax().text_range(), |
92 | update_expr_string(unwrapped.to_string(), &[' ', '{', '\n']), | 104 | update_expr_string(unwrapped.to_string(), &[' ', '{', '\n']), |