diff options
Diffstat (limited to 'crates')
-rw-r--r-- | crates/ra_assists/src/handlers/early_return.rs | 2 | ||||
-rw-r--r-- | crates/ra_syntax/src/ast/make.rs | 11 |
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 2cc9ff153..69bacf224 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 { | |||
108 | pub fn expr_match(expr: ast::Expr, match_arm_list: ast::MatchArmList) -> ast::Expr { | 108 | pub 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 | } |
111 | pub fn expr_if(condition: ast::Expr, then_branch: ast::BlockExpr) -> ast::Expr { | 111 | pub 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 | } |
114 | pub fn expr_prefix(op: SyntaxKind, expr: ast::Expr) -> ast::Expr { | 114 | pub 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 | ||
126 | pub 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 | |||
126 | pub fn bind_pat(name: ast::Name) -> ast::BindPat { | 135 | pub fn bind_pat(name: ast::Name) -> ast::BindPat { |
127 | return from_text(name.text()); | 136 | return from_text(name.text()); |
128 | 137 | ||