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, 27 insertions, 39 deletions
diff --git a/crates/ra_assists/src/handlers/unwrap_block.rs b/crates/ra_assists/src/handlers/unwrap_block.rs index a66fba7c3..8b38695a9 100644 --- a/crates/ra_assists/src/handlers/unwrap_block.rs +++ b/crates/ra_assists/src/handlers/unwrap_block.rs | |||
@@ -27,7 +27,7 @@ use crate::{AssistContext, AssistId, AssistKind, Assists}; | |||
27 | // } | 27 | // } |
28 | // ``` | 28 | // ``` |
29 | pub(crate) fn unwrap_block(acc: &mut Assists, ctx: &AssistContext) -> Option<()> { | 29 | pub(crate) fn unwrap_block(acc: &mut Assists, ctx: &AssistContext) -> Option<()> { |
30 | let assist_id = AssistId("unwrap_block"); | 30 | let assist_id = AssistId("unwrap_block", AssistKind::RefactorRewrite); |
31 | let assist_label = "Unwrap block"; | 31 | let assist_label = "Unwrap block"; |
32 | 32 | ||
33 | let l_curly_token = ctx.find_token_at_offset(T!['{'])?; | 33 | let l_curly_token = ctx.find_token_at_offset(T!['{'])?; |
@@ -50,47 +50,35 @@ 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( | 53 | return acc.add(assist_id, assist_label, target, |edit| { |
54 | assist_id, | 54 | let range_to_del_else_if = TextRange::new( |
55 | AssistKind::Refactor, | 55 | ancestor_then_branch.syntax().text_range().end(), |
56 | assist_label, | 56 | l_curly_token.text_range().start(), |
57 | target, | 57 | ); |
58 | |edit| { | 58 | let range_to_del_rest = TextRange::new( |
59 | let range_to_del_else_if = TextRange::new( | 59 | then_branch.syntax().text_range().end(), |
60 | ancestor_then_branch.syntax().text_range().end(), | 60 | if_expr.syntax().text_range().end(), |
61 | l_curly_token.text_range().start(), | 61 | ); |
62 | ); | 62 | |
63 | let range_to_del_rest = TextRange::new( | 63 | edit.delete(range_to_del_rest); |
64 | then_branch.syntax().text_range().end(), | 64 | edit.delete(range_to_del_else_if); |
65 | if_expr.syntax().text_range().end(), | 65 | edit.replace( |
66 | ); | 66 | target, |
67 | 67 | update_expr_string(then_branch.to_string(), &[' ', '{']), | |
68 | edit.delete(range_to_del_rest); | 68 | ); |
69 | edit.delete(range_to_del_else_if); | 69 | }); |
70 | edit.replace( | ||
71 | target, | ||
72 | update_expr_string(then_branch.to_string(), &[' ', '{']), | ||
73 | ); | ||
74 | }, | ||
75 | ); | ||
76 | } | 70 | } |
77 | } else { | 71 | } else { |
78 | let target = block.syntax().text_range(); | 72 | let target = block.syntax().text_range(); |
79 | return acc.add( | 73 | return acc.add(assist_id, assist_label, target, |edit| { |
80 | assist_id, | 74 | let range_to_del = TextRange::new( |
81 | AssistKind::RefactorRewrite, | 75 | then_branch.syntax().text_range().end(), |
82 | assist_label, | 76 | l_curly_token.text_range().start(), |
83 | target, | 77 | ); |
84 | |edit| { | ||
85 | let range_to_del = TextRange::new( | ||
86 | then_branch.syntax().text_range().end(), | ||
87 | l_curly_token.text_range().start(), | ||
88 | ); | ||
89 | 78 | ||
90 | edit.delete(range_to_del); | 79 | edit.delete(range_to_del); |
91 | edit.replace(target, update_expr_string(block.to_string(), &[' ', '{'])); | 80 | edit.replace(target, update_expr_string(block.to_string(), &[' ', '{'])); |
92 | }, | 81 | }); |
93 | ); | ||
94 | } | 82 | } |
95 | } | 83 | } |
96 | _ => return None, | 84 | _ => return None, |
@@ -98,7 +86,7 @@ pub(crate) fn unwrap_block(acc: &mut Assists, ctx: &AssistContext) -> Option<()> | |||
98 | 86 | ||
99 | let unwrapped = unwrap_trivial_block(block); | 87 | let unwrapped = unwrap_trivial_block(block); |
100 | let target = unwrapped.syntax().text_range(); | 88 | let target = unwrapped.syntax().text_range(); |
101 | acc.add(assist_id, AssistKind::RefactorRewrite, assist_label, target, |builder| { | 89 | acc.add(assist_id, assist_label, target, |builder| { |
102 | builder.replace( | 90 | builder.replace( |
103 | parent.syntax().text_range(), | 91 | parent.syntax().text_range(), |
104 | update_expr_string(unwrapped.to_string(), &[' ', '{', '\n']), | 92 | update_expr_string(unwrapped.to_string(), &[' ', '{', '\n']), |