aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_syntax/src/validation
diff options
context:
space:
mode:
authorDJMcNab <[email protected]>2019-01-28 20:03:56 +0000
committerDJMcNab <[email protected]>2019-01-28 20:03:56 +0000
commit00e6b5d26c82d5faff066c24418a0eb5741efcd1 (patch)
tree82ad741bab4f820850ba6f13e2b760cc840f43fb /crates/ra_syntax/src/validation
parent137b1ccb715fe795cdf6c528bef6f8df3387f158 (diff)
Parse and validate attributes in blocks
Diffstat (limited to 'crates/ra_syntax/src/validation')
-rw-r--r--crates/ra_syntax/src/validation/block.rs24
1 files changed, 24 insertions, 0 deletions
diff --git a/crates/ra_syntax/src/validation/block.rs b/crates/ra_syntax/src/validation/block.rs
new file mode 100644
index 000000000..9e1949124
--- /dev/null
+++ b/crates/ra_syntax/src/validation/block.rs
@@ -0,0 +1,24 @@
1use crate::{SyntaxKind::*,
2 ast::{self, AttrsOwner, AstNode},
3 yellow::{
4 SyntaxError,
5 SyntaxErrorKind::*,
6 },
7};
8
9pub(crate) fn validate_block_node(node: &ast::Block, errors: &mut Vec<SyntaxError>) {
10 if let Some(parent) = node.syntax().parent() {
11 match parent.kind() {
12 FN_DEF => return,
13 BLOCK_EXPR => match parent.parent().map(|v| v.kind()) {
14 Some(EXPR_STMT) | Some(BLOCK) => return,
15 _ => {}
16 },
17 _ => {}
18 }
19 }
20 errors.extend(
21 node.attrs()
22 .map(|attr| SyntaxError::new(InvalidBlockAttr, attr.syntax().range())),
23 )
24}