From 848c5762667101c8a017e561da2fa7e39b212929 Mon Sep 17 00:00:00 2001 From: Kirill Bulatov Date: Wed, 12 Feb 2020 16:44:52 +0200 Subject: Introduce AttrKind --- crates/ra_syntax/src/ast.rs | 6 +++--- crates/ra_syntax/src/ast/extensions.rs | 15 ++++++++++++--- 2 files changed, 15 insertions(+), 6 deletions(-) (limited to 'crates/ra_syntax/src') diff --git a/crates/ra_syntax/src/ast.rs b/crates/ra_syntax/src/ast.rs index d3e8888bd..50441e75b 100644 --- a/crates/ra_syntax/src/ast.rs +++ b/crates/ra_syntax/src/ast.rs @@ -18,8 +18,8 @@ use crate::{ pub use self::{ expr_extensions::{ArrayExprKind, BinOp, ElseBranch, LiteralKind, PrefixOp, RangeOp}, extensions::{ - FieldKind, PathSegmentKind, SelfParamKind, SlicePatComponents, StructKind, TypeBoundKind, - VisibilityKind, + AttrKind, FieldKind, PathSegmentKind, SelfParamKind, SlicePatComponents, StructKind, + TypeBoundKind, VisibilityKind, }, generated::*, tokens::*, @@ -218,7 +218,7 @@ fn test_doc_comment_multi_line_block_strips_suffix() { fn test_comments_preserve_trailing_whitespace() { let file = SourceFile::parse( r#" -/// Representation of a Realm. +/// Representation of a Realm. /// In the specification these are called Realm Records. struct Realm {}"#, ) diff --git a/crates/ra_syntax/src/ast/extensions.rs b/crates/ra_syntax/src/ast/extensions.rs index a297ae110..44de4af89 100644 --- a/crates/ra_syntax/src/ast/extensions.rs +++ b/crates/ra_syntax/src/ast/extensions.rs @@ -37,6 +37,12 @@ fn text_of_first_token(node: &SyntaxNode) -> &SmolStr { node.green().children().next().and_then(|it| it.into_token()).unwrap().text() } +#[derive(Debug, Clone, PartialEq, Eq)] +pub enum AttrKind { + Inner, + Outer, +} + impl ast::Attr { pub fn as_simple_atom(&self) -> Option { match self.input() { @@ -72,13 +78,16 @@ impl ast::Attr { } } - pub fn is_inner_attribute(&self) -> bool { + pub fn kind(&self) -> AttrKind { let first_token = self.syntax().first_token(); let first_token_kind = first_token.as_ref().map(SyntaxToken::kind); let second_token_kind = first_token.and_then(|token| token.next_token()).as_ref().map(SyntaxToken::kind); - return first_token_kind == Some(SyntaxKind::POUND) - && second_token_kind == Some(SyntaxKind::EXCL); + + match (first_token_kind, second_token_kind) { + (Some(SyntaxKind::POUND), Some(SyntaxKind::EXCL)) => AttrKind::Inner, + _ => AttrKind::Outer, + } } } -- cgit v1.2.3