Move AttrsOwnerNode to syntax and make it public

This commit is contained in:
Jonas Schievink 2021-03-19 19:42:06 +01:00
parent fc21640a65
commit fc5f73de45
3 changed files with 33 additions and 33 deletions

View file

@ -6,7 +6,7 @@ use either::Either;
use hir::{HasAttrs, InFile, Semantics};
use ide_db::{call_info::ActiveParameter, defs::Definition, SymbolKind};
use syntax::{
ast::{self, AstNode, AttrsOwner, DocCommentsOwner},
ast::{self, AstNode, AttrsOwner, AttrsOwnerNode, DocCommentsOwner},
match_ast, AstToken, NodeOrToken, SyntaxNode, SyntaxToken, TextRange, TextSize,
};
@ -89,36 +89,6 @@ const RUSTDOC_FENCE_TOKENS: &[&'static str] = &[
"edition2021",
];
// Basically an owned dyn AttrsOwner without extra Boxing
struct AttrsOwnerNode {
node: SyntaxNode,
}
impl AttrsOwnerNode {
fn new<N: DocCommentsOwner>(node: N) -> Self {
AttrsOwnerNode { node: node.syntax().clone() }
}
}
impl AttrsOwner for AttrsOwnerNode {}
impl AstNode for AttrsOwnerNode {
fn can_cast(_: syntax::SyntaxKind) -> bool
where
Self: Sized,
{
false
}
fn cast(_: SyntaxNode) -> Option<Self>
where
Self: Sized,
{
None
}
fn syntax(&self) -> &SyntaxNode {
&self.node
}
}
fn doc_attributes<'node>(
sema: &Semantics<RootDatabase>,
node: &'node SyntaxNode,

View file

@ -20,8 +20,8 @@ pub use self::{
expr_ext::{ArrayExprKind, BinOp, Effect, ElseBranch, LiteralKind, PrefixOp, RangeOp},
generated::{nodes::*, tokens::*},
node_ext::{
AttrKind, FieldKind, Macro, NameLike, NameOrNameRef, PathSegmentKind, SelfParamKind,
SlicePatComponents, StructKind, TypeBoundKind, VisibilityKind,
AttrKind, AttrsOwnerNode, FieldKind, Macro, NameLike, NameOrNameRef, PathSegmentKind,
SelfParamKind, SlicePatComponents, StructKind, TypeBoundKind, VisibilityKind,
},
token_ext::*,
traits::*,

View file

@ -90,6 +90,36 @@ impl NameOwner for Macro {
impl AttrsOwner for Macro {}
/// Basically an owned `dyn AttrsOwner` without extra boxing.
pub struct AttrsOwnerNode {
node: SyntaxNode,
}
impl AttrsOwnerNode {
pub fn new<N: AttrsOwner>(node: N) -> Self {
AttrsOwnerNode { node: node.syntax().clone() }
}
}
impl AttrsOwner for AttrsOwnerNode {}
impl AstNode for AttrsOwnerNode {
fn can_cast(_: SyntaxKind) -> bool
where
Self: Sized,
{
false
}
fn cast(_: SyntaxNode) -> Option<Self>
where
Self: Sized,
{
None
}
fn syntax(&self) -> &SyntaxNode {
&self.node
}
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum AttrKind {
Inner,