aboutsummaryrefslogtreecommitdiff
path: root/crates
diff options
context:
space:
mode:
authorAleksey Kladov <[email protected]>2020-03-27 10:38:00 +0000
committerAleksey Kladov <[email protected]>2020-03-27 10:38:00 +0000
commitcbb53cf55ca350bbcada5fc759b0119d932e879d (patch)
tree8e553c230d6dafcebfdd5ae69af99e0eddc4e156 /crates
parentd953df319b3057e446b05eac0dcc88a4a5bb4b60 (diff)
More general ctor for ifs
Diffstat (limited to 'crates')
-rw-r--r--crates/ra_assists/src/handlers/early_return.rs2
-rw-r--r--crates/ra_syntax/src/ast/make.rs11
2 files changed, 11 insertions, 2 deletions
diff --git a/crates/ra_assists/src/handlers/early_return.rs b/crates/ra_assists/src/handlers/early_return.rs
index f3167b4e5..ea6c56f8c 100644
--- a/crates/ra_assists/src/handlers/early_return.rs
+++ b/crates/ra_assists/src/handlers/early_return.rs
@@ -104,7 +104,7 @@ pub(crate) fn convert_to_guarded_return(ctx: AssistCtx) -> Option<Assist> {
104 let then_branch = 104 let then_branch =
105 make::block_expr(once(make::expr_stmt(early_expression).into()), None); 105 make::block_expr(once(make::expr_stmt(early_expression).into()), None);
106 let cond = invert_boolean_expression(cond_expr); 106 let cond = invert_boolean_expression(cond_expr);
107 let e = make::expr_if(cond, then_branch); 107 let e = make::expr_if(make::condition(cond, None), then_branch);
108 if_indent_level.increase_indent(e) 108 if_indent_level.increase_indent(e)
109 }; 109 };
110 replace(new_expr.syntax(), &then_block, &parent_block, &if_expr) 110 replace(new_expr.syntax(), &then_block, &parent_block, &if_expr)
diff --git a/crates/ra_syntax/src/ast/make.rs b/crates/ra_syntax/src/ast/make.rs
index ffc874a10..6aee39203 100644
--- a/crates/ra_syntax/src/ast/make.rs
+++ b/crates/ra_syntax/src/ast/make.rs
@@ -108,7 +108,7 @@ pub fn expr_return() -> ast::Expr {
108pub fn expr_match(expr: ast::Expr, match_arm_list: ast::MatchArmList) -> ast::Expr { 108pub fn expr_match(expr: ast::Expr, match_arm_list: ast::MatchArmList) -> ast::Expr {
109 expr_from_text(&format!("match {} {}", expr, match_arm_list)) 109 expr_from_text(&format!("match {} {}", expr, match_arm_list))
110} 110}
111pub fn expr_if(condition: ast::Expr, then_branch: ast::BlockExpr) -> ast::Expr { 111pub fn expr_if(condition: ast::Condition, then_branch: ast::BlockExpr) -> ast::Expr {
112 expr_from_text(&format!("if {} {}", condition, then_branch)) 112 expr_from_text(&format!("if {} {}", condition, then_branch))
113} 113}
114pub fn expr_prefix(op: SyntaxKind, expr: ast::Expr) -> ast::Expr { 114pub fn expr_prefix(op: SyntaxKind, expr: ast::Expr) -> ast::Expr {
@@ -123,6 +123,15 @@ pub fn try_expr_from_text(text: &str) -> Option<ast::Expr> {
123 try_ast_from_text(&format!("const C: () = {};", text)) 123 try_ast_from_text(&format!("const C: () = {};", text))
124} 124}
125 125
126pub fn condition(expr: ast::Expr, pattern: Option<ast::Pat>) -> ast::Condition {
127 match pattern {
128 None => ast_from_text(&format!("const _: () = while {} {{}};", expr)),
129 Some(pattern) => {
130 ast_from_text(&format!("const _: () = while {} = {} {{}};", pattern, expr))
131 }
132 }
133}
134
126pub fn bind_pat(name: ast::Name) -> ast::BindPat { 135pub fn bind_pat(name: ast::Name) -> ast::BindPat {
127 return from_text(name.text()); 136 return from_text(name.text());
128 137