diff options
author | Benjamin Coenen <[email protected]> | 2020-05-01 15:26:30 +0100 |
---|---|---|
committer | Benjamin Coenen <[email protected]> | 2020-05-01 15:26:30 +0100 |
commit | dc34162450797f5756ce2b44f1a3fe73d8e2dce4 (patch) | |
tree | 0883abc2d87f8b9704b49f5662da04b73ffedbf6 /crates/ra_syntax/src/ast/expr_extensions.rs | |
parent | bbe22640b8d52354c3de3e126c9fcda5b1b174fd (diff) | |
parent | a5f2b16366f027ad60c58266a66eb7fbdcbda9f9 (diff) |
Merge branch 'master' of github.com:rust-analyzer/rust-analyzer
Diffstat (limited to 'crates/ra_syntax/src/ast/expr_extensions.rs')
-rw-r--r-- | crates/ra_syntax/src/ast/expr_extensions.rs | 28 |
1 files changed, 23 insertions, 5 deletions
diff --git a/crates/ra_syntax/src/ast/expr_extensions.rs b/crates/ra_syntax/src/ast/expr_extensions.rs index 1c1134bc5..329c80749 100644 --- a/crates/ra_syntax/src/ast/expr_extensions.rs +++ b/crates/ra_syntax/src/ast/expr_extensions.rs | |||
@@ -16,7 +16,7 @@ impl ast::Expr { | |||
16 | | ast::Expr::WhileExpr(_) | 16 | | ast::Expr::WhileExpr(_) |
17 | | ast::Expr::BlockExpr(_) | 17 | | ast::Expr::BlockExpr(_) |
18 | | ast::Expr::MatchExpr(_) | 18 | | ast::Expr::MatchExpr(_) |
19 | | ast::Expr::TryBlockExpr(_) => true, | 19 | | ast::Expr::TryExpr(_) => true, |
20 | _ => false, | 20 | _ => false, |
21 | } | 21 | } |
22 | } | 22 | } |
@@ -359,7 +359,22 @@ impl ast::Literal { | |||
359 | } | 359 | } |
360 | } | 360 | } |
361 | 361 | ||
362 | pub enum BlockModifier { | ||
363 | Async(SyntaxToken), | ||
364 | Unsafe(SyntaxToken), | ||
365 | } | ||
366 | |||
362 | impl ast::BlockExpr { | 367 | impl ast::BlockExpr { |
368 | pub fn modifier(&self) -> Option<BlockModifier> { | ||
369 | if let Some(token) = self.async_token() { | ||
370 | return Some(BlockModifier::Async(token)); | ||
371 | } | ||
372 | if let Some(token) = self.unsafe_token() { | ||
373 | return Some(BlockModifier::Unsafe(token)); | ||
374 | } | ||
375 | None | ||
376 | } | ||
377 | |||
363 | /// false if the block is an intrinsic part of the syntax and can't be | 378 | /// false if the block is an intrinsic part of the syntax and can't be |
364 | /// replaced with arbitrary expression. | 379 | /// replaced with arbitrary expression. |
365 | /// | 380 | /// |
@@ -368,12 +383,15 @@ impl ast::BlockExpr { | |||
368 | /// const FOO: () = { stand_alone }; | 383 | /// const FOO: () = { stand_alone }; |
369 | /// ``` | 384 | /// ``` |
370 | pub fn is_standalone(&self) -> bool { | 385 | pub fn is_standalone(&self) -> bool { |
371 | let kind = match self.syntax().parent() { | 386 | if self.modifier().is_some() { |
387 | return false; | ||
388 | } | ||
389 | let parent = match self.syntax().parent() { | ||
390 | Some(it) => it, | ||
372 | None => return true, | 391 | None => return true, |
373 | Some(it) => it.kind(), | ||
374 | }; | 392 | }; |
375 | match kind { | 393 | match parent.kind() { |
376 | FN_DEF | MATCH_ARM | IF_EXPR | WHILE_EXPR | LOOP_EXPR | TRY_BLOCK_EXPR => false, | 394 | FN_DEF | IF_EXPR | WHILE_EXPR | LOOP_EXPR => false, |
377 | _ => true, | 395 | _ => true, |
378 | } | 396 | } |
379 | } | 397 | } |