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.rs26
1 files changed, 13 insertions, 13 deletions
diff --git a/crates/ra_assists/src/handlers/unwrap_block.rs b/crates/ra_assists/src/handlers/unwrap_block.rs
index 58649c47e..b407eb870 100644
--- a/crates/ra_assists/src/handlers/unwrap_block.rs
+++ b/crates/ra_assists/src/handlers/unwrap_block.rs
@@ -24,38 +24,38 @@ use ra_syntax::{ast, AstNode, TextRange, T};
24pub(crate) fn unwrap_block(ctx: AssistCtx) -> Option<Assist> { 24pub(crate) fn unwrap_block(ctx: AssistCtx) -> Option<Assist> {
25 let l_curly_token = ctx.find_token_at_offset(T!['{'])?; 25 let l_curly_token = ctx.find_token_at_offset(T!['{'])?;
26 26
27 let res = if let Some(if_expr) = l_curly_token.ancestors().find_map(IfExpr::cast) { 27 let (expr, expr_to_unwrap) = if let Some(if_expr) =
28 l_curly_token.ancestors().find_map(IfExpr::cast)
29 {
28 // if expression 30 // if expression
29 let expr_to_unwrap = if_expr.blocks().find_map(|expr| extract_expr(ctx.frange.range, expr)); 31 let expr_to_unwrap = if_expr.blocks().find_map(|expr| extract_expr(ctx.frange.range, expr));
30 let expr_to_unwrap = expr_to_unwrap?; 32 let expr_to_unwrap = expr_to_unwrap?;
31 // Find if we are in a else if block 33 // Find if we are in a else if block
32 let ancestor = if_expr.syntax().ancestors().skip(1).find_map(ast::IfExpr::cast); 34 let ancestor = if_expr.syntax().ancestors().skip(1).find_map(ast::IfExpr::cast);
33 35
34 if let Some(ancestor) = ancestor { 36 match ancestor {
35 Some((ast::Expr::IfExpr(ancestor), expr_to_unwrap)) 37 None => (ast::Expr::IfExpr(if_expr), expr_to_unwrap),
36 } else { 38 Some(ancestor) => (ast::Expr::IfExpr(ancestor), expr_to_unwrap),
37 Some((ast::Expr::IfExpr(if_expr), expr_to_unwrap))
38 } 39 }
39 } else if let Some(for_expr) = l_curly_token.ancestors().find_map(ForExpr::cast) { 40 } else if let Some(for_expr) = l_curly_token.ancestors().find_map(ForExpr::cast) {
40 // for expression 41 // for expression
41 let block_expr = for_expr.loop_body()?; 42 let block_expr = for_expr.loop_body()?;
42 extract_expr(ctx.frange.range, block_expr) 43 let expr_to_unwrap = extract_expr(ctx.frange.range, block_expr)?;
43 .map(|expr_to_unwrap| (ast::Expr::ForExpr(for_expr), expr_to_unwrap)) 44 (ast::Expr::ForExpr(for_expr), expr_to_unwrap)
44 } else if let Some(while_expr) = l_curly_token.ancestors().find_map(WhileExpr::cast) { 45 } else if let Some(while_expr) = l_curly_token.ancestors().find_map(WhileExpr::cast) {
45 // while expression 46 // while expression
46 let block_expr = while_expr.loop_body()?; 47 let block_expr = while_expr.loop_body()?;
47 extract_expr(ctx.frange.range, block_expr) 48 let expr_to_unwrap = extract_expr(ctx.frange.range, block_expr)?;
48 .map(|expr_to_unwrap| (ast::Expr::WhileExpr(while_expr), expr_to_unwrap)) 49 (ast::Expr::WhileExpr(while_expr), expr_to_unwrap)
49 } else if let Some(loop_expr) = l_curly_token.ancestors().find_map(LoopExpr::cast) { 50 } else if let Some(loop_expr) = l_curly_token.ancestors().find_map(LoopExpr::cast) {
50 // loop expression 51 // loop expression
51 let block_expr = loop_expr.loop_body()?; 52 let block_expr = loop_expr.loop_body()?;
52 extract_expr(ctx.frange.range, block_expr) 53 let expr_to_unwrap = extract_expr(ctx.frange.range, block_expr)?;
53 .map(|expr_to_unwrap| (ast::Expr::LoopExpr(loop_expr), expr_to_unwrap)) 54 (ast::Expr::LoopExpr(loop_expr), expr_to_unwrap)
54 } else { 55 } else {
55 None 56 return None;
56 }; 57 };
57 58
58 let (expr, expr_to_unwrap) = res?;
59 ctx.add_assist(AssistId("unwrap_block"), "Unwrap block", |edit| { 59 ctx.add_assist(AssistId("unwrap_block"), "Unwrap block", |edit| {
60 edit.set_cursor(expr.syntax().text_range().start()); 60 edit.set_cursor(expr.syntax().text_range().start());
61 edit.target(expr_to_unwrap.syntax().text_range()); 61 edit.target(expr_to_unwrap.syntax().text_range());