aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_syntax
diff options
context:
space:
mode:
authorbors[bot] <26634292+bors[bot]@users.noreply.github.com>2020-07-31 14:54:19 +0100
committerGitHub <[email protected]>2020-07-31 14:54:19 +0100
commitad239f6197bda31f7a9b904b5ccb25c93cbc701a (patch)
tree5e4b244c62c61824dbb63246aa9943e3b2398131 /crates/ra_syntax
parent3407d6f8a430627be333c32cb4cef02c0c8d11e3 (diff)
parentd4d986c7f850e1f535bb4c22e3a7f7fba5483628 (diff)
Merge #5623
5623: Item is a Stmt r=matklad a=matklad bors r+ 🤖 Co-authored-by: Aleksey Kladov <[email protected]>
Diffstat (limited to 'crates/ra_syntax')
-rw-r--r--crates/ra_syntax/src/ast.rs2
-rw-r--r--crates/ra_syntax/src/ast/generated.rs41
-rw-r--r--crates/ra_syntax/src/ast/generated/nodes.rs26
3 files changed, 42 insertions, 27 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
18pub use self::{ 18pub 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]
4pub(super) mod nodes; 3mod nodes;
5#[rustfmt::skip] 4#[rustfmt::skip]
6pub(super) mod tokens; 5mod tokens;
6
7use crate::{
8 AstNode,
9 SyntaxKind::{self, *},
10 SyntaxNode,
11};
12
13pub use {nodes::*, tokens::*};
14
15// Stmt is the only nested enum, so it's easier to just hand-write it
16impl 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}
350impl ast::AttrsOwner for BlockExpr {} 350impl ast::AttrsOwner for BlockExpr {}
351impl ast::ModuleItemOwner for BlockExpr {}
352impl BlockExpr { 351impl 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 {}
1395pub enum Stmt { 1394pub enum Stmt {
1396 LetStmt(LetStmt), 1395 LetStmt(LetStmt),
1397 ExprStmt(ExprStmt), 1396 ExprStmt(ExprStmt),
1397 Item(Item),
1398} 1398}
1399impl ast::AttrsOwner for Stmt {}
1400impl AstNode for SourceFile { 1399impl 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 {
3380impl From<ExprStmt> for Stmt { 3379impl From<ExprStmt> for Stmt {
3381 fn from(node: ExprStmt) -> Stmt { Stmt::ExprStmt(node) } 3380 fn from(node: ExprStmt) -> Stmt { Stmt::ExprStmt(node) }
3382} 3381}
3383impl AstNode for Stmt { 3382impl 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}
3405impl std::fmt::Display for Item { 3385impl 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 {