aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_assists/src/handlers/unwrap_block.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_assists/src/handlers/unwrap_block.rs')
-rw-r--r--crates/ra_assists/src/handlers/unwrap_block.rs66
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// ```
29pub(crate) fn unwrap_block(acc: &mut Assists, ctx: &AssistContext) -> Option<()> { 29pub(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']),