Introduce AttrKind

This commit is contained in:
Kirill Bulatov 2020-02-12 16:44:52 +02:00
parent 1596b31698
commit 848c576266
3 changed files with 16 additions and 8 deletions

View file

@ -434,8 +434,7 @@ fn best_action_for_target(
let add_after_anchor = anchor
.clone()
.and_then(ast::Attr::cast)
.as_ref()
.map(ast::Attr::is_inner_attribute)
.map(|attr| attr.kind() == ast::AttrKind::Inner)
.unwrap_or(false);
ImportAction::add_new_use(anchor, add_after_anchor)
}

View file

@ -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 {}"#,
)

View file

@ -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<SmolStr> {
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,
}
}
}