diff options
| author | Amos Wenger <amoswenger@gmail.com> | 2022-11-25 13:06:01 +0100 |
|---|---|---|
| committer | Amos Wenger <amoswenger@gmail.com> | 2022-11-25 13:06:01 +0100 |
| commit | ae43043aabf5d85ef07548560f9be77e997d9d75 (patch) | |
| tree | 81031442e82a02cd3e145e512c7f504d7a00345a /crates/syntax | |
| parent | 8514f3fe7e957670570cbadb16b96d53b4c368f7 (diff) | |
| parent | 79923c382a0f206d78f601eb42dd89c03c4dad4e (diff) | |
Merge commit '79923c382' into HEAD
Diffstat (limited to 'crates/syntax')
| -rw-r--r-- | crates/syntax/src/ast/make.rs | 20 |
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} (); }}")) |
