about summary refs log tree commit diff
diff options
context:
space:
mode:
authorAleksey Kladov <aleksey.kladov@gmail.com>2020-04-30 22:43:06 +0200
committerAleksey Kladov <aleksey.kladov@gmail.com>2020-04-30 22:58:26 +0200
commit1865dedadf02c0ecc71a039645ad832d33881d30 (patch)
treeabdb487e6f8a7968f49738833219384804064ef2
parent292ba6a1f81fee4170c3081f74499fe8c3ddedd4 (diff)
downloadrust-1865dedadf02c0ecc71a039645ad832d33881d30.tar.gz
rust-1865dedadf02c0ecc71a039645ad832d33881d30.zip
Introduce BlockModifier
-rw-r--r--crates/ra_syntax/src/ast.rs4
-rw-r--r--crates/ra_syntax/src/ast/expr_extensions.rs17
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() {