From 00e6b5d26c82d5faff066c24418a0eb5741efcd1 Mon Sep 17 00:00:00 2001 From: DJMcNab <36049421+DJMcNab@users.noreply.github.com> Date: Mon, 28 Jan 2019 20:03:56 +0000 Subject: Parse and validate attributes in blocks --- crates/ra_syntax/src/validation/block.rs | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 crates/ra_syntax/src/validation/block.rs (limited to 'crates/ra_syntax/src/validation/block.rs') 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 @@ +use crate::{SyntaxKind::*, + ast::{self, AttrsOwner, AstNode}, + yellow::{ + SyntaxError, + SyntaxErrorKind::*, + }, +}; + +pub(crate) fn validate_block_node(node: &ast::Block, errors: &mut Vec) { + if let Some(parent) = node.syntax().parent() { + match parent.kind() { + FN_DEF => return, + BLOCK_EXPR => match parent.parent().map(|v| v.kind()) { + Some(EXPR_STMT) | Some(BLOCK) => return, + _ => {} + }, + _ => {} + } + } + errors.extend( + node.attrs() + .map(|attr| SyntaxError::new(InvalidBlockAttr, attr.syntax().range())), + ) +} -- cgit v1.2.3