diff options
author | Aleksey Kladov <[email protected]> | 2020-07-31 14:40:48 +0100 |
---|---|---|
committer | Aleksey Kladov <[email protected]> | 2020-07-31 14:40:48 +0100 |
commit | a7ca6583fbce6f1bddce7b31ad5bb1fc0665b616 (patch) | |
tree | b148be3186c9de3de526fe798eac36f27517c178 /crates/ra_syntax/src | |
parent | 4d38b0dce1884dab0da7394ccc979eef0a21076c (diff) |
Handwrite Stmt
Diffstat (limited to 'crates/ra_syntax/src')
-rw-r--r-- | crates/ra_syntax/src/ast.rs | 2 | ||||
-rw-r--r-- | crates/ra_syntax/src/ast/generated.rs | 37 | ||||
-rw-r--r-- | crates/ra_syntax/src/ast/generated/nodes.rs | 22 |
3 files changed, 35 insertions, 26 deletions
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..ba55f1c42 100644 --- a/crates/ra_syntax/src/ast/generated.rs +++ b/crates/ra_syntax/src/ast/generated.rs | |||
@@ -1,6 +1,37 @@ | |||
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 | _ => false, | ||
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 | _ => return None, | ||
28 | }; | ||
29 | Some(res) | ||
30 | } | ||
31 | fn syntax(&self) -> &SyntaxNode { | ||
32 | match self { | ||
33 | Stmt::LetStmt(it) => &it.syntax, | ||
34 | Stmt::ExprStmt(it) => &it.syntax, | ||
35 | } | ||
36 | } | ||
37 | } | ||
diff --git a/crates/ra_syntax/src/ast/generated/nodes.rs b/crates/ra_syntax/src/ast/generated/nodes.rs index 286be1032..8ef72fec7 100644 --- a/crates/ra_syntax/src/ast/generated/nodes.rs +++ b/crates/ra_syntax/src/ast/generated/nodes.rs | |||
@@ -3380,28 +3380,6 @@ impl From<LetStmt> for Stmt { | |||
3380 | impl From<ExprStmt> for Stmt { | 3380 | impl From<ExprStmt> for Stmt { |
3381 | fn from(node: ExprStmt) -> Stmt { Stmt::ExprStmt(node) } | 3381 | fn from(node: ExprStmt) -> Stmt { Stmt::ExprStmt(node) } |
3382 | } | 3382 | } |
3383 | impl AstNode for Stmt { | ||
3384 | fn can_cast(kind: SyntaxKind) -> bool { | ||
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 | } | ||
3405 | impl std::fmt::Display for Item { | 3383 | impl std::fmt::Display for Item { |
3406 | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { | 3384 | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { |
3407 | std::fmt::Display::fmt(self.syntax(), f) | 3385 | std::fmt::Display::fmt(self.syntax(), f) |