use rowan::NodeOrToken;
use crate::AstNode;
use crate::AstToken;
use crate::Comment;
use crate::Ident;
use crate::SyntaxKind;
use crate::SyntaxNode;
use crate::SyntaxToken;
use crate::TreeNode;
use crate::TreeToken;
use crate::Version;
use crate::VersionStatement;
use crate::Whitespace;
use crate::v1::*;
#[macropol::macropol]
macro_rules! ast_element_impl {
(
// The name of the impl to create (e.g., `Node`).
$name:ident,
$display:ident,
$trait_name:ty,
[$($suffix:ident(): $syntax_kind:ty => $inner:ty => $variant:ty),*]
) => {
paste::paste! {
impl<T: $trait_name> $name<T> {
#[doc = "Attempts to cast an element to a [`" $name "`]."]
pub fn cast(element: T) -> Option<Self> {
match element.kind() {
$(
SyntaxKind::$syntax_kind => {
let inner = $inner::<T>::cast(element)
.expect(
"couldn't cast ${stringify!($display)} to \
`${stringify!($inner)}`
");
Some($name::$variant(inner))
},
)*
_ => None
}
}
#[doc = "Returns whether or not a particular [`SyntaxKind`] can cast to a [`" $name "`]."]
pub fn can_cast(kind: &SyntaxKind) -> bool {
match kind {
$(
SyntaxKind::$syntax_kind => true,
)*
_ => false
}
}
#[doc = "Gets the inner type from the [`" $name "`]."]
pub fn inner(&self) -> &T {
match self {
$(
$name::$variant(e) => e.inner(),
)*
}
}
$(
pub fn [<as_ $suffix>](&self) -> Option<&$inner<T>> {
match self {
$name::$variant($suffix) => Some($suffix),
_ => None,
}
}
pub fn [<into_ $suffix>](self) -> Option<$inner<T>> {
match self {
$name::$variant($suffix) => Some($suffix),
_ => None,
}
}
pub fn [<unwrap_ $suffix>](self) -> $inner<T> {
self.[<into_ $suffix>]().expect(
"expected `${stringify!($variant)}` but got a different variant"
)
}
)*
}
}
};
}
#[derive(Clone, Debug)]
pub enum Node<N: TreeNode = SyntaxNode> {
AccessExpr(AccessExpr<N>),
AdditionExpr(AdditionExpr<N>),
ArrayType(ArrayType<N>),
Ast(Ast<N>),
BoundDecl(BoundDecl<N>),
CallAfter(CallAfter<N>),
CallAlias(CallAlias<N>),
CallExpr(CallExpr<N>),
CallInputItem(CallInputItem<N>),
CallStatement(CallStatement<N>),
CallTarget(CallTarget<N>),
CommandSection(CommandSection<N>),
ConditionalStatement(ConditionalStatement<N>),
ConditionalStatementClause(ConditionalStatementClause<N>),
DefaultOption(DefaultOption<N>),
DivisionExpr(DivisionExpr<N>),
EqualityExpr(EqualityExpr<N>),
EnumDefinition(EnumDefinition<N>),
EnumTypeParameter(EnumTypeParameter<N>),
EnumChoice(EnumChoice<N>),
ExponentiationExpr(ExponentiationExpr<N>),
GreaterEqualExpr(GreaterEqualExpr<N>),
GreaterExpr(GreaterExpr<N>),
IfExpr(IfExpr<N>),
ImportAlias(ImportAlias<N>),
ImportStatement(ImportStatement<N>),
ImportMember(ImportMember<N>),
ImportMembers(ImportMembers<N>),
SymbolicModulePath(SymbolicModulePath<N>),
IndexExpr(IndexExpr<N>),
InequalityExpr(InequalityExpr<N>),
InputSection(InputSection<N>),
LessEqualExpr(LessEqualExpr<N>),
LessExpr(LessExpr<N>),
LiteralArray(LiteralArray<N>),
LiteralBoolean(LiteralBoolean<N>),
LiteralFloat(LiteralFloat<N>),
LiteralHints(LiteralHints<N>),
LiteralHintsItem(LiteralHintsItem<N>),
LiteralInput(LiteralInput<N>),
LiteralInputItem(LiteralInputItem<N>),
LiteralInteger(LiteralInteger<N>),
LiteralMap(LiteralMap<N>),
LiteralMapItem(LiteralMapItem<N>),
LiteralNone(LiteralNone<N>),
LiteralNull(LiteralNull<N>),
LiteralObject(LiteralObject<N>),
LiteralObjectItem(LiteralObjectItem<N>),
LiteralOutput(LiteralOutput<N>),
LiteralOutputItem(LiteralOutputItem<N>),
LiteralPair(LiteralPair<N>),
LiteralString(LiteralString<N>),
LiteralStruct(LiteralStruct<N>),
LiteralStructItem(LiteralStructItem<N>),
LogicalAndExpr(LogicalAndExpr<N>),
LogicalNotExpr(LogicalNotExpr<N>),
LogicalOrExpr(LogicalOrExpr<N>),
MapType(MapType<N>),
MetadataArray(MetadataArray<N>),
MetadataObject(MetadataObject<N>),
MetadataObjectItem(MetadataObjectItem<N>),
MetadataSection(MetadataSection<N>),
ModuloExpr(ModuloExpr<N>),
MultiplicationExpr(MultiplicationExpr<N>),
NameRefExpr(NameRefExpr<N>),
NegationExpr(NegationExpr<N>),
OutputSection(OutputSection<N>),
PairType(PairType<N>),
ObjectType(ObjectType<N>),
ParameterMetadataSection(ParameterMetadataSection<N>),
ParenthesizedExpr(ParenthesizedExpr<N>),
Placeholder(Placeholder<N>),
PrimitiveType(PrimitiveType<N>),
RequirementsItem(RequirementsItem<N>),
RequirementsSection(RequirementsSection<N>),
RuntimeItem(RuntimeItem<N>),
RuntimeSection(RuntimeSection<N>),
ScatterStatement(ScatterStatement<N>),
SepOption(SepOption<N>),
StructDefinition(StructDefinition<N>),
SubtractionExpr(SubtractionExpr<N>),
TaskDefinition(TaskDefinition<N>),
TaskHintsItem(TaskHintsItem<N>),
TaskHintsSection(TaskHintsSection<N>),
TrueFalseOption(TrueFalseOption<N>),
TypeRef(TypeRef<N>),
UnboundDecl(UnboundDecl<N>),
VersionStatement(VersionStatement<N>),
WorkflowDefinition(WorkflowDefinition<N>),
WorkflowHintsArray(WorkflowHintsArray<N>),
WorkflowHintsItem(WorkflowHintsItem<N>),
WorkflowHintsObject(WorkflowHintsObject<N>),
WorkflowHintsObjectItem(WorkflowHintsObjectItem<N>),
WorkflowHintsSection(WorkflowHintsSection<N>),
}
ast_element_impl!(
Node,
node,
TreeNode,
[
access_expr(): AccessExprNode => AccessExpr => AccessExpr,
addition_expr(): AdditionExprNode => AdditionExpr => AdditionExpr,
array_type(): ArrayTypeNode => ArrayType => ArrayType,
ast(): RootNode => Ast => Ast,
bound_decl(): BoundDeclNode => BoundDecl => BoundDecl,
call_after(): CallAfterNode => CallAfter => CallAfter,
call_alias(): CallAliasNode => CallAlias => CallAlias,
call_expr(): CallExprNode => CallExpr => CallExpr,
call_input_item(): CallInputItemNode => CallInputItem => CallInputItem,
call_statement(): CallStatementNode => CallStatement => CallStatement,
call_target(): CallTargetNode => CallTarget => CallTarget,
command_section(): CommandSectionNode => CommandSection => CommandSection,
conditional_statement(): ConditionalStatementNode => ConditionalStatement => ConditionalStatement,
conditional_statement_clause(): ConditionalStatementClauseNode => ConditionalStatementClause => ConditionalStatementClause,
default_option(): PlaceholderDefaultOptionNode => DefaultOption => DefaultOption,
division_expr(): DivisionExprNode => DivisionExpr => DivisionExpr,
equality_expr(): EqualityExprNode => EqualityExpr => EqualityExpr,
enum_definition(): EnumDefinitionNode => EnumDefinition => EnumDefinition,
enum_type_parameter(): EnumTypeParameterNode => EnumTypeParameter => EnumTypeParameter,
enum_choice(): EnumChoiceNode => EnumChoice => EnumChoice,
exponentiation_expr(): ExponentiationExprNode => ExponentiationExpr => ExponentiationExpr,
greater_equal_expr(): GreaterEqualExprNode => GreaterEqualExpr => GreaterEqualExpr,
greater_expr(): GreaterExprNode => GreaterExpr => GreaterExpr,
if_expr(): IfExprNode => IfExpr => IfExpr,
import_alias(): ImportAliasNode => ImportAlias => ImportAlias,
import_statement(): ImportStatementNode => ImportStatement => ImportStatement,
import_member(): ImportMemberNode => ImportMember => ImportMember,
import_members(): ImportMembersNode => ImportMembers => ImportMembers,
symbolic_module_path(): SymbolicModulePathNode => SymbolicModulePath => SymbolicModulePath,
index_expr(): IndexExprNode => IndexExpr => IndexExpr,
inequality_expr(): InequalityExprNode => InequalityExpr => InequalityExpr,
input_section(): InputSectionNode => InputSection => InputSection,
less_equal_expr(): LessEqualExprNode => LessEqualExpr => LessEqualExpr,
less_expr(): LessExprNode => LessExpr => LessExpr,
literal_array(): LiteralArrayNode => LiteralArray => LiteralArray,
literal_boolean(): LiteralBooleanNode => LiteralBoolean => LiteralBoolean,
literal_float(): LiteralFloatNode => LiteralFloat => LiteralFloat,
literal_hints(): LiteralHintsNode => LiteralHints => LiteralHints,
literal_hints_item(): LiteralHintsItemNode => LiteralHintsItem => LiteralHintsItem,
literal_input(): LiteralInputNode => LiteralInput => LiteralInput,
literal_input_item(): LiteralInputItemNode => LiteralInputItem => LiteralInputItem,
literal_integer(): LiteralIntegerNode => LiteralInteger => LiteralInteger,
literal_map(): LiteralMapNode => LiteralMap => LiteralMap,
literal_map_item(): LiteralMapItemNode => LiteralMapItem => LiteralMapItem,
literal_none(): LiteralNoneNode => LiteralNone => LiteralNone,
literal_null(): LiteralNullNode => LiteralNull => LiteralNull,
literal_object(): LiteralObjectNode => LiteralObject => LiteralObject,
literal_object_item(): LiteralObjectItemNode => LiteralObjectItem => LiteralObjectItem,
literal_output(): LiteralOutputNode => LiteralOutput => LiteralOutput,
literal_output_item(): LiteralOutputItemNode => LiteralOutputItem => LiteralOutputItem,
literal_pair(): LiteralPairNode => LiteralPair => LiteralPair,
literal_string(): LiteralStringNode => LiteralString => LiteralString,
literal_struct(): LiteralStructNode => LiteralStruct => LiteralStruct,
literal_struct_item(): LiteralStructItemNode => LiteralStructItem => LiteralStructItem,
logical_and_expr(): LogicalAndExprNode => LogicalAndExpr => LogicalAndExpr,
logical_not_expr(): LogicalNotExprNode => LogicalNotExpr => LogicalNotExpr,
logical_or_expr(): LogicalOrExprNode => LogicalOrExpr => LogicalOrExpr,
map_type(): MapTypeNode => MapType => MapType,
metadata_array(): MetadataArrayNode => MetadataArray => MetadataArray,
metadata_object(): MetadataObjectNode => MetadataObject => MetadataObject,
metadata_object_item(): MetadataObjectItemNode => MetadataObjectItem => MetadataObjectItem,
metadata_section(): MetadataSectionNode => MetadataSection => MetadataSection,
modulo_expr(): ModuloExprNode => ModuloExpr => ModuloExpr,
multiplication_expr(): MultiplicationExprNode => MultiplicationExpr => MultiplicationExpr,
name_ref_expr(): NameRefExprNode => NameRefExpr => NameRefExpr,
negation_expr(): NegationExprNode => NegationExpr => NegationExpr,
object_type(): ObjectTypeNode => ObjectType => ObjectType,
output_section(): OutputSectionNode => OutputSection => OutputSection,
pair_type(): PairTypeNode => PairType => PairType,
parameter_metadata_section(): ParameterMetadataSectionNode => ParameterMetadataSection => ParameterMetadataSection,
parenthesized_expr(): ParenthesizedExprNode => ParenthesizedExpr => ParenthesizedExpr,
placeholder(): PlaceholderNode => Placeholder => Placeholder,
primitive_type(): PrimitiveTypeNode => PrimitiveType => PrimitiveType,
requirements_item(): RequirementsItemNode => RequirementsItem => RequirementsItem,
requirements_section(): RequirementsSectionNode => RequirementsSection => RequirementsSection,
runtime_item(): RuntimeItemNode => RuntimeItem => RuntimeItem,
runtime_section(): RuntimeSectionNode => RuntimeSection => RuntimeSection,
scatter_statement(): ScatterStatementNode => ScatterStatement => ScatterStatement,
sep_option(): PlaceholderSepOptionNode => SepOption => SepOption,
struct_definition(): StructDefinitionNode => StructDefinition => StructDefinition,
subtraction_expr(): SubtractionExprNode => SubtractionExpr => SubtractionExpr,
task_definition(): TaskDefinitionNode => TaskDefinition => TaskDefinition,
task_hints_item(): TaskHintsItemNode => TaskHintsItem => TaskHintsItem,
task_hints_section(): TaskHintsSectionNode => TaskHintsSection => TaskHintsSection,
true_false_option(): PlaceholderTrueFalseOptionNode => TrueFalseOption => TrueFalseOption,
type_ref(): TypeRefNode => TypeRef => TypeRef,
unbound_decl(): UnboundDeclNode => UnboundDecl => UnboundDecl,
version_statement(): VersionStatementNode => VersionStatement => VersionStatement,
workflow_definition(): WorkflowDefinitionNode => WorkflowDefinition => WorkflowDefinition,
workflow_hints_array(): WorkflowHintsArrayNode => WorkflowHintsArray => WorkflowHintsArray,
workflow_hints_item(): WorkflowHintsItemNode => WorkflowHintsItem => WorkflowHintsItem,
workflow_hints_object(): WorkflowHintsObjectNode => WorkflowHintsObject => WorkflowHintsObject,
workflow_hints_object_item(): WorkflowHintsObjectItemNode => WorkflowHintsObjectItem => WorkflowHintsObjectItem,
workflow_hints_section(): WorkflowHintsSectionNode => WorkflowHintsSection => WorkflowHintsSection
]
);
#[derive(Clone, Debug)]
pub enum Token<T: TreeToken = SyntaxToken> {
AfterKeyword(AfterKeyword<T>),
AliasKeyword(AliasKeyword<T>),
ArrayTypeKeyword(ArrayTypeKeyword<T>),
AsKeyword(AsKeyword<T>),
Assignment(Assignment<T>),
Asterisk(Asterisk<T>),
BooleanTypeKeyword(BooleanTypeKeyword<T>),
CallKeyword(CallKeyword<T>),
CloseBrace(CloseBrace<T>),
CloseBracket(CloseBracket<T>),
CloseHeredoc(CloseHeredoc<T>),
CloseParen(CloseParen<T>),
Colon(Colon<T>),
Comma(Comma<T>),
CommandKeyword(CommandKeyword<T>),
CommandText(CommandText<T>),
Comment(Comment<T>),
DirectoryTypeKeyword(DirectoryTypeKeyword<T>),
Dot(Dot<T>),
DoubleQuote(DoubleQuote<T>),
ElseKeyword(ElseKeyword<T>),
EnumKeyword(EnumKeyword<T>),
EnvKeyword(EnvKeyword<T>),
Equal(Equal<T>),
Exclamation(Exclamation<T>),
Exponentiation(Exponentiation<T>),
FalseKeyword(FalseKeyword<T>),
FileTypeKeyword(FileTypeKeyword<T>),
Float(Float<T>),
FloatTypeKeyword(FloatTypeKeyword<T>),
FromKeyword(FromKeyword<T>),
Greater(Greater<T>),
GreaterEqual(GreaterEqual<T>),
HintsKeyword(HintsKeyword<T>),
Ident(Ident<T>),
IfKeyword(IfKeyword<T>),
ImportKeyword(ImportKeyword<T>),
InKeyword(InKeyword<T>),
InputKeyword(InputKeyword<T>),
Integer(Integer<T>),
IntTypeKeyword(IntTypeKeyword<T>),
Less(Less<T>),
LessEqual(LessEqual<T>),
LogicalAnd(LogicalAnd<T>),
LogicalOr(LogicalOr<T>),
MapTypeKeyword(MapTypeKeyword<T>),
MetaKeyword(MetaKeyword<T>),
Minus(Minus<T>),
NoneKeyword(NoneKeyword<T>),
NotEqual(NotEqual<T>),
NullKeyword(NullKeyword<T>),
ObjectKeyword(ObjectKeyword<T>),
ObjectTypeKeyword(ObjectTypeKeyword<T>),
OpenBrace(OpenBrace<T>),
OpenBracket(OpenBracket<T>),
OpenHeredoc(OpenHeredoc<T>),
OpenParen(OpenParen<T>),
OutputKeyword(OutputKeyword<T>),
PairTypeKeyword(PairTypeKeyword<T>),
ParameterMetaKeyword(ParameterMetaKeyword<T>),
Percent(Percent<T>),
PlaceholderOpen(PlaceholderOpen<T>),
Plus(Plus<T>),
QuestionMark(QuestionMark<T>),
RequirementsKeyword(RequirementsKeyword<T>),
RuntimeKeyword(RuntimeKeyword<T>),
ScatterKeyword(ScatterKeyword<T>),
SingleQuote(SingleQuote<T>),
Slash(Slash<T>),
StringText(StringText<T>),
StringTypeKeyword(StringTypeKeyword<T>),
StructKeyword(StructKeyword<T>),
TaskKeyword(TaskKeyword<T>),
ThenKeyword(ThenKeyword<T>),
TrueKeyword(TrueKeyword<T>),
Version(Version<T>),
VersionKeyword(VersionKeyword<T>),
Whitespace(Whitespace<T>),
WorkflowKeyword(WorkflowKeyword<T>),
}
ast_element_impl!(
Token,
token,
TreeToken,
[
after_keyword(): AfterKeyword => AfterKeyword => AfterKeyword,
alias_keyword(): AliasKeyword => AliasKeyword => AliasKeyword,
array_type_keyword(): ArrayTypeKeyword => ArrayTypeKeyword => ArrayTypeKeyword,
as_keyword(): AsKeyword => AsKeyword => AsKeyword,
assignment(): Assignment => Assignment => Assignment,
asterisk(): Asterisk => Asterisk => Asterisk,
boolean_type_keyword(): BooleanTypeKeyword => BooleanTypeKeyword => BooleanTypeKeyword,
call_keyword(): CallKeyword => CallKeyword => CallKeyword,
close_brace(): CloseBrace => CloseBrace => CloseBrace,
close_bracket(): CloseBracket => CloseBracket => CloseBracket,
close_heredoc(): CloseHeredoc => CloseHeredoc => CloseHeredoc,
close_paren(): CloseParen => CloseParen => CloseParen,
colon(): Colon => Colon => Colon,
comma(): Comma => Comma => Comma,
command_keyword(): CommandKeyword => CommandKeyword => CommandKeyword,
command_text(): LiteralCommandText => CommandText => CommandText,
comment(): Comment => Comment => Comment,
directory_type_keyword(): DirectoryTypeKeyword => DirectoryTypeKeyword => DirectoryTypeKeyword,
dot(): Dot => Dot => Dot,
double_quote(): DoubleQuote => DoubleQuote => DoubleQuote,
else_keyword(): ElseKeyword => ElseKeyword => ElseKeyword,
enum_keyword(): EnumKeyword => EnumKeyword => EnumKeyword,
env_keyword(): EnvKeyword => EnvKeyword => EnvKeyword,
equal(): Equal => Equal => Equal,
exclamation(): Exclamation => Exclamation => Exclamation,
exponentiation(): Exponentiation => Exponentiation => Exponentiation,
false_keyword(): FalseKeyword => FalseKeyword => FalseKeyword,
file_type_keyword(): FileTypeKeyword => FileTypeKeyword => FileTypeKeyword,
float(): Float => Float => Float,
float_type_keyword(): FloatTypeKeyword => FloatTypeKeyword => FloatTypeKeyword,
from_keyword(): FromKeyword => FromKeyword => FromKeyword,
greater(): Greater => Greater => Greater,
greater_equal(): GreaterEqual => GreaterEqual => GreaterEqual,
hints_keyword(): HintsKeyword => HintsKeyword => HintsKeyword,
ident(): Ident => Ident => Ident,
if_keyword(): IfKeyword => IfKeyword => IfKeyword,
import_keyword(): ImportKeyword => ImportKeyword => ImportKeyword,
in_keyword(): InKeyword => InKeyword => InKeyword,
input_keyword(): InputKeyword => InputKeyword => InputKeyword,
integer(): Integer => Integer => Integer,
int_type_keyword(): IntTypeKeyword => IntTypeKeyword => IntTypeKeyword,
less(): Less => Less => Less,
less_equal(): LessEqual => LessEqual => LessEqual,
logical_and(): LogicalAnd => LogicalAnd => LogicalAnd,
logical_or(): LogicalOr => LogicalOr => LogicalOr,
map_type_keyword(): MapTypeKeyword => MapTypeKeyword => MapTypeKeyword,
meta_keyword(): MetaKeyword => MetaKeyword => MetaKeyword,
minus(): Minus => Minus => Minus,
none_keyword(): NoneKeyword => NoneKeyword => NoneKeyword,
not_equal(): NotEqual => NotEqual => NotEqual,
null_keyword(): NullKeyword => NullKeyword => NullKeyword,
object_keyword(): ObjectKeyword => ObjectKeyword => ObjectKeyword,
object_type_keyword(): ObjectTypeKeyword => ObjectTypeKeyword => ObjectTypeKeyword,
open_brace(): OpenBrace => OpenBrace => OpenBrace,
open_bracket(): OpenBracket => OpenBracket => OpenBracket,
open_heredoc(): OpenHeredoc => OpenHeredoc => OpenHeredoc,
open_paren(): OpenParen => OpenParen => OpenParen,
output_keyword(): OutputKeyword => OutputKeyword => OutputKeyword,
pair_type_keyword(): PairTypeKeyword => PairTypeKeyword => PairTypeKeyword,
parameter_meta_keyword(): ParameterMetaKeyword => ParameterMetaKeyword => ParameterMetaKeyword,
percent(): Percent => Percent => Percent,
placeholder_open(): PlaceholderOpen => PlaceholderOpen => PlaceholderOpen,
plus(): Plus => Plus => Plus,
question_mark(): QuestionMark => QuestionMark => QuestionMark,
requirements_keyword(): RequirementsKeyword => RequirementsKeyword => RequirementsKeyword,
runtime_keyword(): RuntimeKeyword => RuntimeKeyword => RuntimeKeyword,
scatter_keyword(): ScatterKeyword => ScatterKeyword => ScatterKeyword,
single_quote(): SingleQuote => SingleQuote => SingleQuote,
slash(): Slash => Slash => Slash,
string_text(): LiteralStringText => StringText => StringText,
string_type_keyword(): StringTypeKeyword => StringTypeKeyword => StringTypeKeyword,
struct_keyword(): StructKeyword => StructKeyword => StructKeyword,
task_keyword(): TaskKeyword => TaskKeyword => TaskKeyword,
then_keyword(): ThenKeyword => ThenKeyword => ThenKeyword,
true_keyword(): TrueKeyword => TrueKeyword => TrueKeyword,
version_keyword(): VersionKeyword => VersionKeyword => VersionKeyword,
version(): Version => Version => Version,
whitespace(): Whitespace => Whitespace => Whitespace,
workflow_keyword(): WorkflowKeyword => WorkflowKeyword => WorkflowKeyword
]
);
#[derive(Clone, Debug)]
pub enum Element<N: TreeNode = SyntaxNode> {
Node(Node<N>),
Token(Token<N::Token>),
}
impl<N: TreeNode> Element<N> {
pub fn as_node(&self) -> Option<&Node<N>> {
match self {
Self::Node(node) => Some(node),
_ => None,
}
}
pub fn into_node(self) -> Option<Node<N>> {
match self {
Self::Node(node) => Some(node),
_ => None,
}
}
pub fn unwrap_node(self) -> Node<N> {
self.into_node()
.expect("expected `Element::Node` but got a different variant")
}
pub fn as_token(&self) -> Option<&Token<N::Token>> {
match self {
Self::Token(token) => Some(token),
_ => None,
}
}
pub fn into_token(self) -> Option<Token<N::Token>> {
match self {
Self::Token(token) => Some(token),
_ => None,
}
}
pub fn unwrap_token(self) -> Token<N::Token> {
self.into_token()
.expect("expected `Element::Token` but got a different variant")
}
pub fn inner(&self) -> NodeOrToken<N, N::Token> {
match self {
Element::Node(node) => NodeOrToken::Node(node.inner().clone()),
Element::Token(token) => NodeOrToken::Token(token.inner().clone()),
}
}
pub fn kind(&self) -> SyntaxKind {
match self {
Element::Node(node) => node.inner().kind(),
Element::Token(token) => token.inner().kind(),
}
}
pub fn is_trivia(&self) -> bool {
match self {
Element::Node(node) => node.inner().kind().is_trivia(),
Element::Token(token) => token.inner().kind().is_trivia(),
}
}
pub fn cast(element: NodeOrToken<N, N::Token>) -> Self {
match element {
NodeOrToken::Node(n) => {
Self::Node(Node::cast(n).expect("a syntax node should cast to a Node"))
}
NodeOrToken::Token(t) => {
Self::Token(Token::cast(t).expect("a syntax token should cast to a Token"))
}
}
}
}