aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_assists/src/handlers/unwrap_block.rs
diff options
context:
space:
mode:
authorJeremy Kolb <[email protected]>2020-06-28 23:36:05 +0100
committerkjeremy <[email protected]>2020-07-02 22:13:02 +0100
commitb98c16a034620913f3dbc67bd3f48ad2686face7 (patch)
tree10f90c96791cfd82bb160a1a5c7474ccc17d5b8b /crates/ra_assists/src/handlers/unwrap_block.rs
parent4cb8bf03c588dcf244d25785de3878b6ef3f7958 (diff)
Categorize assists
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, 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
10use crate::{AssistContext, AssistId, Assists}; 10use 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']),