diff options
| author | Aleksey Kladov <aleksey.kladov@gmail.com> | 2020-04-30 22:43:06 +0200 |
|---|---|---|
| committer | Aleksey Kladov <aleksey.kladov@gmail.com> | 2020-04-30 22:58:26 +0200 |
| commit | 1865dedadf02c0ecc71a039645ad832d33881d30 (patch) | |
| tree | abdb487e6f8a7968f49738833219384804064ef2 | |
| parent | 292ba6a1f81fee4170c3081f74499fe8c3ddedd4 (diff) | |
| download | rust-1865dedadf02c0ecc71a039645ad832d33881d30.tar.gz rust-1865dedadf02c0ecc71a039645ad832d33881d30.zip | |
Introduce BlockModifier
| -rw-r--r-- | crates/ra_syntax/src/ast.rs | 4 | ||||
| -rw-r--r-- | crates/ra_syntax/src/ast/expr_extensions.rs | 17 |
2 files changed, 19 insertions, 2 deletions
diff --git a/crates/ra_syntax/src/ast.rs b/crates/ra_syntax/src/ast.rs index a716e525b95..521ca8ab8ed 100644 --- a/crates/ra_syntax/src/ast.rs +++ b/crates/ra_syntax/src/ast.rs @@ -16,7 +16,9 @@ use crate::{ }; pub use self::{ - expr_extensions::{ArrayExprKind, BinOp, ElseBranch, LiteralKind, PrefixOp, RangeOp}, + expr_extensions::{ + ArrayExprKind, BinOp, BlockModifier, ElseBranch, LiteralKind, PrefixOp, RangeOp, + }, extensions::{ AttrKind, FieldKind, NameOrNameRef, PathSegmentKind, SelfParamKind, SlicePatComponents, StructKind, TypeBoundKind, VisibilityKind, diff --git a/crates/ra_syntax/src/ast/expr_extensions.rs b/crates/ra_syntax/src/ast/expr_extensions.rs index 6aed7b4bb79..352c0d2c57e 100644 --- a/crates/ra_syntax/src/ast/expr_extensions.rs +++ b/crates/ra_syntax/src/ast/expr_extensions.rs @@ -359,7 +359,22 @@ impl ast::Literal { } } +pub enum BlockModifier { + Async(SyntaxToken), + Unsafe(SyntaxToken), +} + impl ast::BlockExpr { + pub fn modifier(&self) -> Option<BlockModifier> { + if let Some(token) = self.async_token() { + return Some(BlockModifier::Async(token)); + } + if let Some(token) = self.unsafe_token() { + return Some(BlockModifier::Unsafe(token)); + } + None + } + /// false if the block is an intrinsic part of the syntax and can't be /// replaced with arbitrary expression. /// @@ -368,7 +383,7 @@ impl ast::BlockExpr { /// const FOO: () = { stand_alone }; /// ``` pub fn is_standalone(&self) -> bool { - if self.unsafe_token().is_some() || self.async_token().is_some() { + if self.modifier().is_some() { return false; } let parent = match self.syntax().parent() { |
