diff options
| author | Laurențiu Nicola <lnicola@dend.ro> | 2022-11-09 21:49:10 +0200 |
|---|---|---|
| committer | Laurențiu Nicola <lnicola@dend.ro> | 2022-11-09 21:49:10 +0200 |
| commit | 79923c382a0f206d78f601eb42dd89c03c4dad4e (patch) | |
| tree | ee70602176e275f5b21c0afbe2330279a48d6830 /crates/syntax/src | |
| parent | c60b1f6414dcdfcf772499c88780a532c0262c4c (diff) | |
| download | rust-79923c382a0f206d78f601eb42dd89c03c4dad4e.tar.gz rust-79923c382a0f206d78f601eb42dd89c03c4dad4e.zip | |
:arrow_up: rust-analyzer
Diffstat (limited to 'crates/syntax/src')
| -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} (); }}")) |
