mirror of
https://github.com/rust-lang/rust-analyzer
synced 2024-12-26 13:03:31 +00:00
Introduce AttrKind
This commit is contained in:
parent
1596b31698
commit
848c576266
3 changed files with 16 additions and 8 deletions
|
@ -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)
|
||||
}
|
||||
|
|
|
@ -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 {}"#,
|
||||
)
|
||||
|
|
|
@ -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,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue