aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir/src/expr.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_hir/src/expr.rs')
-rw-r--r--crates/ra_hir/src/expr.rs13
1 files changed, 12 insertions, 1 deletions
diff --git a/crates/ra_hir/src/expr.rs b/crates/ra_hir/src/expr.rs
index 593fe1598..f0936e9f3 100644
--- a/crates/ra_hir/src/expr.rs
+++ b/crates/ra_hir/src/expr.rs
@@ -183,6 +183,9 @@ pub enum Expr {
183 arg_types: Vec<Option<TypeRef>>, 183 arg_types: Vec<Option<TypeRef>>,
184 body: ExprId, 184 body: ExprId,
185 }, 185 },
186 Tuple {
187 exprs: Vec<ExprId>,
188 },
186} 189}
187 190
188pub use ra_syntax::ast::PrefixOp as UnaryOp; 191pub use ra_syntax::ast::PrefixOp as UnaryOp;
@@ -297,6 +300,11 @@ impl Expr {
297 | Expr::UnaryOp { expr, .. } => { 300 | Expr::UnaryOp { expr, .. } => {
298 f(*expr); 301 f(*expr);
299 } 302 }
303 Expr::Tuple { exprs } => {
304 for expr in exprs {
305 f(*expr);
306 }
307 }
300 } 308 }
301 } 309 }
302} 310}
@@ -621,11 +629,14 @@ impl ExprCollector {
621 let op = e.op(); 629 let op = e.op();
622 self.alloc_expr(Expr::BinaryOp { lhs, rhs, op }, syntax_ptr) 630 self.alloc_expr(Expr::BinaryOp { lhs, rhs, op }, syntax_ptr)
623 } 631 }
632 ast::ExprKind::TupleExpr(e) => {
633 let exprs = e.exprs().map(|expr| self.collect_expr(expr)).collect();
634 self.alloc_expr(Expr::Tuple { exprs }, syntax_ptr)
635 }
624 636
625 // TODO implement HIR for these: 637 // TODO implement HIR for these:
626 ast::ExprKind::Label(_e) => self.alloc_expr(Expr::Missing, syntax_ptr), 638 ast::ExprKind::Label(_e) => self.alloc_expr(Expr::Missing, syntax_ptr),
627 ast::ExprKind::IndexExpr(_e) => self.alloc_expr(Expr::Missing, syntax_ptr), 639 ast::ExprKind::IndexExpr(_e) => self.alloc_expr(Expr::Missing, syntax_ptr),
628 ast::ExprKind::TupleExpr(_e) => self.alloc_expr(Expr::Missing, syntax_ptr),
629 ast::ExprKind::ArrayExpr(_e) => self.alloc_expr(Expr::Missing, syntax_ptr), 640 ast::ExprKind::ArrayExpr(_e) => self.alloc_expr(Expr::Missing, syntax_ptr),
630 ast::ExprKind::RangeExpr(_e) => self.alloc_expr(Expr::Missing, syntax_ptr), 641 ast::ExprKind::RangeExpr(_e) => self.alloc_expr(Expr::Missing, syntax_ptr),
631 ast::ExprKind::Literal(_e) => self.alloc_expr(Expr::Missing, syntax_ptr), 642 ast::ExprKind::Literal(_e) => self.alloc_expr(Expr::Missing, syntax_ptr),