diff options
Diffstat (limited to 'crates/ra_hir/src/expr.rs')
-rw-r--r-- | crates/ra_hir/src/expr.rs | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/crates/ra_hir/src/expr.rs b/crates/ra_hir/src/expr.rs index 5430a0c9f..a16561d11 100644 --- a/crates/ra_hir/src/expr.rs +++ b/crates/ra_hir/src/expr.rs | |||
@@ -245,6 +245,10 @@ pub enum Expr { | |||
245 | rhs: ExprId, | 245 | rhs: ExprId, |
246 | op: Option<BinaryOp>, | 246 | op: Option<BinaryOp>, |
247 | }, | 247 | }, |
248 | Index { | ||
249 | base: ExprId, | ||
250 | index: ExprId, | ||
251 | }, | ||
248 | Lambda { | 252 | Lambda { |
249 | args: Vec<PatId>, | 253 | args: Vec<PatId>, |
250 | arg_types: Vec<Option<TypeRef>>, | 254 | arg_types: Vec<Option<TypeRef>>, |
@@ -399,6 +403,10 @@ impl Expr { | |||
399 | f(*lhs); | 403 | f(*lhs); |
400 | f(*rhs); | 404 | f(*rhs); |
401 | } | 405 | } |
406 | Expr::Index { base, index } => { | ||
407 | f(*base); | ||
408 | f(*index); | ||
409 | } | ||
402 | Expr::Field { expr, .. } | 410 | Expr::Field { expr, .. } |
403 | | Expr::Await { expr } | 411 | | Expr::Await { expr } |
404 | | Expr::Try { expr } | 412 | | Expr::Try { expr } |
@@ -887,10 +895,14 @@ where | |||
887 | }; | 895 | }; |
888 | self.alloc_expr(Expr::Literal(lit), syntax_ptr) | 896 | self.alloc_expr(Expr::Literal(lit), syntax_ptr) |
889 | } | 897 | } |
898 | ast::ExprKind::IndexExpr(e) => { | ||
899 | let base = self.collect_expr_opt(e.base()); | ||
900 | let index = self.collect_expr_opt(e.index()); | ||
901 | self.alloc_expr(Expr::Index { base, index }, syntax_ptr) | ||
902 | } | ||
890 | 903 | ||
891 | // FIXME implement HIR for these: | 904 | // FIXME implement HIR for these: |
892 | ast::ExprKind::Label(_e) => self.alloc_expr(Expr::Missing, syntax_ptr), | 905 | ast::ExprKind::Label(_e) => self.alloc_expr(Expr::Missing, syntax_ptr), |
893 | ast::ExprKind::IndexExpr(_e) => self.alloc_expr(Expr::Missing, syntax_ptr), | ||
894 | ast::ExprKind::RangeExpr(_e) => self.alloc_expr(Expr::Missing, syntax_ptr), | 906 | ast::ExprKind::RangeExpr(_e) => self.alloc_expr(Expr::Missing, syntax_ptr), |
895 | ast::ExprKind::MacroCall(e) => { | 907 | ast::ExprKind::MacroCall(e) => { |
896 | let ast_id = self | 908 | let ast_id = self |