diff options
Diffstat (limited to 'crates')
-rw-r--r-- | crates/ra_assists/src/handlers/change_return_type_to_result.rs | 2 | ||||
-rw-r--r-- | crates/ra_hir_def/src/body/lower.rs | 30 | ||||
-rw-r--r-- | crates/ra_syntax/src/ast.rs | 2 | ||||
-rw-r--r-- | crates/ra_syntax/src/ast/generated.rs | 41 | ||||
-rw-r--r-- | crates/ra_syntax/src/ast/generated/nodes.rs | 26 |
5 files changed, 64 insertions, 37 deletions
diff --git a/crates/ra_assists/src/handlers/change_return_type_to_result.rs b/crates/ra_assists/src/handlers/change_return_type_to_result.rs index 167e162d8..4b73c41da 100644 --- a/crates/ra_assists/src/handlers/change_return_type_to_result.rs +++ b/crates/ra_assists/src/handlers/change_return_type_to_result.rs | |||
@@ -74,6 +74,7 @@ impl TailReturnCollector { | |||
74 | let expr = match &stmt { | 74 | let expr = match &stmt { |
75 | ast::Stmt::ExprStmt(stmt) => stmt.expr(), | 75 | ast::Stmt::ExprStmt(stmt) => stmt.expr(), |
76 | ast::Stmt::LetStmt(stmt) => stmt.initializer(), | 76 | ast::Stmt::LetStmt(stmt) => stmt.initializer(), |
77 | ast::Stmt::Item(_) => continue, | ||
77 | }; | 78 | }; |
78 | if let Some(expr) = &expr { | 79 | if let Some(expr) = &expr { |
79 | self.handle_exprs(expr, collect_break); | 80 | self.handle_exprs(expr, collect_break); |
@@ -94,6 +95,7 @@ impl TailReturnCollector { | |||
94 | let expr_stmt = match &expr_stmt { | 95 | let expr_stmt = match &expr_stmt { |
95 | ast::Stmt::ExprStmt(stmt) => stmt.expr(), | 96 | ast::Stmt::ExprStmt(stmt) => stmt.expr(), |
96 | ast::Stmt::LetStmt(stmt) => stmt.initializer(), | 97 | ast::Stmt::LetStmt(stmt) => stmt.initializer(), |
98 | ast::Stmt::Item(_) => None, | ||
97 | }; | 99 | }; |
98 | if let Some(expr) = &expr_stmt { | 100 | if let Some(expr) = &expr_stmt { |
99 | self.handle_exprs(expr, collect_break); | 101 | self.handle_exprs(expr, collect_break); |
diff --git a/crates/ra_hir_def/src/body/lower.rs b/crates/ra_hir_def/src/body/lower.rs index 827ced4ad..5816bf566 100644 --- a/crates/ra_hir_def/src/body/lower.rs +++ b/crates/ra_hir_def/src/body/lower.rs | |||
@@ -10,7 +10,7 @@ use hir_expand::{ | |||
10 | use ra_arena::Arena; | 10 | use ra_arena::Arena; |
11 | use ra_syntax::{ | 11 | use ra_syntax::{ |
12 | ast::{ | 12 | ast::{ |
13 | self, ArgListOwner, ArrayExprKind, LiteralKind, LoopBodyOwner, ModuleItemOwner, NameOwner, | 13 | self, ArgListOwner, ArrayExprKind, LiteralKind, LoopBodyOwner, NameOwner, |
14 | SlicePatComponents, | 14 | SlicePatComponents, |
15 | }, | 15 | }, |
16 | AstNode, AstPtr, | 16 | AstNode, AstPtr, |
@@ -601,14 +601,20 @@ impl ExprCollector<'_> { | |||
601 | self.collect_block_items(&block); | 601 | self.collect_block_items(&block); |
602 | let statements = block | 602 | let statements = block |
603 | .statements() | 603 | .statements() |
604 | .map(|s| match s { | 604 | .filter_map(|s| { |
605 | ast::Stmt::LetStmt(stmt) => { | 605 | let stmt = match s { |
606 | let pat = self.collect_pat_opt(stmt.pat()); | 606 | ast::Stmt::LetStmt(stmt) => { |
607 | let type_ref = stmt.ty().map(|it| TypeRef::from_ast(&self.ctx(), it)); | 607 | let pat = self.collect_pat_opt(stmt.pat()); |
608 | let initializer = stmt.initializer().map(|e| self.collect_expr(e)); | 608 | let type_ref = stmt.ty().map(|it| TypeRef::from_ast(&self.ctx(), it)); |
609 | Statement::Let { pat, type_ref, initializer } | 609 | let initializer = stmt.initializer().map(|e| self.collect_expr(e)); |
610 | } | 610 | Statement::Let { pat, type_ref, initializer } |
611 | ast::Stmt::ExprStmt(stmt) => Statement::Expr(self.collect_expr_opt(stmt.expr())), | 611 | } |
612 | ast::Stmt::ExprStmt(stmt) => { | ||
613 | Statement::Expr(self.collect_expr_opt(stmt.expr())) | ||
614 | } | ||
615 | ast::Stmt::Item(_) => return None, | ||
616 | }; | ||
617 | Some(stmt) | ||
612 | }) | 618 | }) |
613 | .collect(); | 619 | .collect(); |
614 | let tail = block.expr().map(|e| self.collect_expr(e)); | 620 | let tail = block.expr().map(|e| self.collect_expr(e)); |
@@ -620,7 +626,11 @@ impl ExprCollector<'_> { | |||
620 | let container = ContainerId::DefWithBodyId(self.def); | 626 | let container = ContainerId::DefWithBodyId(self.def); |
621 | 627 | ||
622 | let items = block | 628 | let items = block |
623 | .items() | 629 | .statements() |
630 | .filter_map(|stmt| match stmt { | ||
631 | ast::Stmt::Item(it) => Some(it), | ||
632 | ast::Stmt::LetStmt(_) | ast::Stmt::ExprStmt(_) => None, | ||
633 | }) | ||
624 | .filter_map(|item| { | 634 | .filter_map(|item| { |
625 | let (def, name): (ModuleDefId, Option<ast::Name>) = match item { | 635 | let (def, name): (ModuleDefId, Option<ast::Name>) = match item { |
626 | ast::Item::Fn(def) => { | 636 | ast::Item::Fn(def) => { |
diff --git a/crates/ra_syntax/src/ast.rs b/crates/ra_syntax/src/ast.rs index 8a0e3d27b..d536bb1e7 100644 --- a/crates/ra_syntax/src/ast.rs +++ b/crates/ra_syntax/src/ast.rs | |||
@@ -17,7 +17,7 @@ use crate::{ | |||
17 | 17 | ||
18 | pub use self::{ | 18 | pub use self::{ |
19 | expr_ext::{ArrayExprKind, BinOp, Effect, ElseBranch, LiteralKind, PrefixOp, RangeOp}, | 19 | expr_ext::{ArrayExprKind, BinOp, Effect, ElseBranch, LiteralKind, PrefixOp, RangeOp}, |
20 | generated::{nodes::*, tokens::*}, | 20 | generated::*, |
21 | node_ext::{ | 21 | node_ext::{ |
22 | AttrKind, FieldKind, NameOrNameRef, PathSegmentKind, SelfParamKind, SlicePatComponents, | 22 | AttrKind, FieldKind, NameOrNameRef, PathSegmentKind, SelfParamKind, SlicePatComponents, |
23 | StructKind, TypeBoundKind, VisibilityKind, | 23 | StructKind, TypeBoundKind, VisibilityKind, |
diff --git a/crates/ra_syntax/src/ast/generated.rs b/crates/ra_syntax/src/ast/generated.rs index f5199e09f..4a6f41ee7 100644 --- a/crates/ra_syntax/src/ast/generated.rs +++ b/crates/ra_syntax/src/ast/generated.rs | |||
@@ -1,6 +1,41 @@ | |||
1 | //! This file is actually hand-written, but the submodules are indeed generated. | 1 | //! This file is actually hand-written, but the submodules are indeed generated. |
2 | |||
3 | #[rustfmt::skip] | 2 | #[rustfmt::skip] |
4 | pub(super) mod nodes; | 3 | mod nodes; |
5 | #[rustfmt::skip] | 4 | #[rustfmt::skip] |
6 | pub(super) mod tokens; | 5 | mod tokens; |
6 | |||
7 | use crate::{ | ||
8 | AstNode, | ||
9 | SyntaxKind::{self, *}, | ||
10 | SyntaxNode, | ||
11 | }; | ||
12 | |||
13 | pub use {nodes::*, tokens::*}; | ||
14 | |||
15 | // Stmt is the only nested enum, so it's easier to just hand-write it | ||
16 | impl AstNode for Stmt { | ||
17 | fn can_cast(kind: SyntaxKind) -> bool { | ||
18 | match kind { | ||
19 | LET_STMT | EXPR_STMT => true, | ||
20 | _ => Item::can_cast(kind), | ||
21 | } | ||
22 | } | ||
23 | fn cast(syntax: SyntaxNode) -> Option<Self> { | ||
24 | let res = match syntax.kind() { | ||
25 | LET_STMT => Stmt::LetStmt(LetStmt { syntax }), | ||
26 | EXPR_STMT => Stmt::ExprStmt(ExprStmt { syntax }), | ||
27 | _ => { | ||
28 | let item = Item::cast(syntax)?; | ||
29 | Stmt::Item(item) | ||
30 | } | ||
31 | }; | ||
32 | Some(res) | ||
33 | } | ||
34 | fn syntax(&self) -> &SyntaxNode { | ||
35 | match self { | ||
36 | Stmt::LetStmt(it) => &it.syntax, | ||
37 | Stmt::ExprStmt(it) => &it.syntax, | ||
38 | Stmt::Item(it) => it.syntax(), | ||
39 | } | ||
40 | } | ||
41 | } | ||
diff --git a/crates/ra_syntax/src/ast/generated/nodes.rs b/crates/ra_syntax/src/ast/generated/nodes.rs index 286be1032..763fd20f4 100644 --- a/crates/ra_syntax/src/ast/generated/nodes.rs +++ b/crates/ra_syntax/src/ast/generated/nodes.rs | |||
@@ -348,7 +348,6 @@ pub struct BlockExpr { | |||
348 | pub(crate) syntax: SyntaxNode, | 348 | pub(crate) syntax: SyntaxNode, |
349 | } | 349 | } |
350 | impl ast::AttrsOwner for BlockExpr {} | 350 | impl ast::AttrsOwner for BlockExpr {} |
351 | impl ast::ModuleItemOwner for BlockExpr {} | ||
352 | impl BlockExpr { | 351 | impl BlockExpr { |
353 | pub fn label(&self) -> Option<Label> { support::child(&self.syntax) } | 352 | pub fn label(&self) -> Option<Label> { support::child(&self.syntax) } |
354 | pub fn l_curly_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T!['{']) } | 353 | pub fn l_curly_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T!['{']) } |
@@ -1395,8 +1394,8 @@ impl ast::AttrsOwner for GenericParam {} | |||
1395 | pub enum Stmt { | 1394 | pub enum Stmt { |
1396 | LetStmt(LetStmt), | 1395 | LetStmt(LetStmt), |
1397 | ExprStmt(ExprStmt), | 1396 | ExprStmt(ExprStmt), |
1397 | Item(Item), | ||
1398 | } | 1398 | } |
1399 | impl ast::AttrsOwner for Stmt {} | ||
1400 | impl AstNode for SourceFile { | 1399 | impl AstNode for SourceFile { |
1401 | fn can_cast(kind: SyntaxKind) -> bool { kind == SOURCE_FILE } | 1400 | fn can_cast(kind: SyntaxKind) -> bool { kind == SOURCE_FILE } |
1402 | fn cast(syntax: SyntaxNode) -> Option<Self> { | 1401 | fn cast(syntax: SyntaxNode) -> Option<Self> { |
@@ -3380,27 +3379,8 @@ impl From<LetStmt> for Stmt { | |||
3380 | impl From<ExprStmt> for Stmt { | 3379 | impl From<ExprStmt> for Stmt { |
3381 | fn from(node: ExprStmt) -> Stmt { Stmt::ExprStmt(node) } | 3380 | fn from(node: ExprStmt) -> Stmt { Stmt::ExprStmt(node) } |
3382 | } | 3381 | } |
3383 | impl AstNode for Stmt { | 3382 | impl From<Item> for Stmt { |
3384 | fn can_cast(kind: SyntaxKind) -> bool { | 3383 | fn from(node: Item) -> Stmt { Stmt::Item(node) } |
3385 | match kind { | ||
3386 | LET_STMT | EXPR_STMT => true, | ||
3387 | _ => false, | ||
3388 | } | ||
3389 | } | ||
3390 | fn cast(syntax: SyntaxNode) -> Option<Self> { | ||
3391 | let res = match syntax.kind() { | ||
3392 | LET_STMT => Stmt::LetStmt(LetStmt { syntax }), | ||
3393 | EXPR_STMT => Stmt::ExprStmt(ExprStmt { syntax }), | ||
3394 | _ => return None, | ||
3395 | }; | ||
3396 | Some(res) | ||
3397 | } | ||
3398 | fn syntax(&self) -> &SyntaxNode { | ||
3399 | match self { | ||
3400 | Stmt::LetStmt(it) => &it.syntax, | ||
3401 | Stmt::ExprStmt(it) => &it.syntax, | ||
3402 | } | ||
3403 | } | ||
3404 | } | 3384 | } |
3405 | impl std::fmt::Display for Item { | 3385 | impl std::fmt::Display for Item { |
3406 | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { | 3386 | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { |