about summary refs log tree commit diff
path: root/crates/syntax/src
diff options
context:
space:
mode:
authorLaurențiu Nicola <lnicola@dend.ro>2022-11-09 21:49:10 +0200
committerLaurențiu Nicola <lnicola@dend.ro>2022-11-09 21:49:10 +0200
commit79923c382a0f206d78f601eb42dd89c03c4dad4e (patch)
treeee70602176e275f5b21c0afbe2330279a48d6830 /crates/syntax/src
parentc60b1f6414dcdfcf772499c88780a532c0262c4c (diff)
downloadrust-79923c382a0f206d78f601eb42dd89c03c4dad4e.tar.gz
rust-79923c382a0f206d78f601eb42dd89c03c4dad4e.zip
:arrow_up: rust-analyzer
Diffstat (limited to 'crates/syntax/src')
-rw-r--r--crates/syntax/src/ast/make.rs20
1 files changed, 20 insertions, 0 deletions
diff --git a/crates/syntax/src/ast/make.rs b/crates/syntax/src/ast/make.rs
index 4057a75e7c1..8c26009add2 100644
--- a/crates/syntax/src/ast/make.rs
+++ b/crates/syntax/src/ast/make.rs
@@ -334,6 +334,10 @@ pub fn block_expr(
     ast_from_text(&format!("fn f() {buf}"))
 }
 
+pub fn tail_only_block_expr(tail_expr: ast::Expr) -> ast::BlockExpr {
+    ast_from_text(&format!("fn f() {{ {tail_expr} }}"))
+}
+
 /// Ideally this function wouldn't exist since it involves manual indenting.
 /// It differs from `make::block_expr` by also supporting comments.
 ///
@@ -656,6 +660,22 @@ pub fn let_stmt(
     };
     ast_from_text(&format!("fn f() {{ {text} }}"))
 }
+
+pub fn let_else_stmt(
+    pattern: ast::Pat,
+    ty: Option<ast::Type>,
+    expr: ast::Expr,
+    diverging: ast::BlockExpr,
+) -> ast::LetStmt {
+    let mut text = String::new();
+    format_to!(text, "let {pattern}");
+    if let Some(ty) = ty {
+        format_to!(text, ": {ty}");
+    }
+    format_to!(text, " = {expr} else {diverging};");
+    ast_from_text(&format!("fn f() {{ {text} }}"))
+}
+
 pub fn expr_stmt(expr: ast::Expr) -> ast::ExprStmt {
     let semi = if expr.is_block_like() { "" } else { ";" };
     ast_from_text(&format!("fn f() {{ {expr}{semi} (); }}"))