// This file is automatically generated based on the file `./generated.rs.tera` when `cargo gen-syntax` is run // Do not edit manually //! This module contains auto-generated Rust AST. Like `SyntaxNode`s, AST nodes //! are generic over ownership: `X<'a>` things are `Copy` references, `XNode` //! are Arc-based. You can switch between the two variants using `.owned` and //! `.borrowed` functions. Most of the code works with borowed mode, and only //! this mode has all AST accessors. #![cfg_attr(rustfmt, rustfmt_skip)] use crate::{ SyntaxNode, SyntaxKind::{self, *}, ast::{self, AstNode}, }; // Alias #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct Alias { pub(crate) syntax: SyntaxNode, } impl AstNode for Alias { fn can_cast(kind: SyntaxKind) -> bool { match kind { ALIAS => true, _ => false, } } fn cast(syntax: SyntaxNode) -> Option { if Self::can_cast(syntax.kind()) { Some(Alias { syntax }) } else { None } } fn syntax(&self) -> &SyntaxNode { &self.syntax } } impl ast::NameOwner for Alias {} impl Alias {} // ArgList #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct ArgList { pub(crate) syntax: SyntaxNode, } impl AstNode for ArgList { fn can_cast(kind: SyntaxKind) -> bool { match kind { ARG_LIST => true, _ => false, } } fn cast(syntax: SyntaxNode) -> Option { if Self::can_cast(syntax.kind()) { Some(ArgList { syntax }) } else { None } } fn syntax(&self) -> &SyntaxNode { &self.syntax } } impl ArgList { pub fn args(&self) -> impl Iterator { super::children(self) } } // ArrayExpr #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct ArrayExpr { pub(crate) syntax: SyntaxNode, } impl AstNode for ArrayExpr { fn can_cast(kind: SyntaxKind) -> bool { match kind { ARRAY_EXPR => true, _ => false, } } fn cast(syntax: SyntaxNode) -> Option { if Self::can_cast(syntax.kind()) { Some(ArrayExpr { syntax }) } else { None } } fn syntax(&self) -> &SyntaxNode { &self.syntax } } impl ArrayExpr { pub fn exprs(&self) -> impl Iterator { super::children(self) } } // ArrayType #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct ArrayType { pub(crate) syntax: SyntaxNode, } impl AstNode for ArrayType { fn can_cast(kind: SyntaxKind) -> bool { match kind { ARRAY_TYPE => true, _ => false, } } fn cast(syntax: SyntaxNode) -> Option { if Self::can_cast(syntax.kind()) { Some(ArrayType { syntax }) } else { None } } fn syntax(&self) -> &SyntaxNode { &self.syntax } } impl ArrayType { pub fn type_ref(&self) -> Option { super::child_opt(self) } pub fn expr(&self) -> Option { super::child_opt(self) } } // AssocTypeArg #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct AssocTypeArg { pub(crate) syntax: SyntaxNode, } impl AstNode for AssocTypeArg { fn can_cast(kind: SyntaxKind) -> bool { match kind { ASSOC_TYPE_ARG => true, _ => false, } } fn cast(syntax: SyntaxNode) -> Option { if Self::can_cast(syntax.kind()) { Some(AssocTypeArg { syntax }) } else { None } } fn syntax(&self) -> &SyntaxNode { &self.syntax } } impl AssocTypeArg { pub fn name_ref(&self) -> Option { super::child_opt(self) } pub fn type_ref(&self) -> Option { super::child_opt(self) } } // Attr #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct Attr { pub(crate) syntax: SyntaxNode, } impl AstNode for Attr { fn can_cast(kind: SyntaxKind) -> bool { match kind { ATTR => true, _ => false, } } fn cast(syntax: SyntaxNode) -> Option { if Self::can_cast(syntax.kind()) { Some(Attr { syntax }) } else { None } } fn syntax(&self) -> &SyntaxNode { &self.syntax } } impl Attr { pub fn value(&self) -> Option { super::child_opt(self) } } // BinExpr #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct BinExpr { pub(crate) syntax: SyntaxNode, } impl AstNode for BinExpr { fn can_cast(kind: SyntaxKind) -> bool { match kind { BIN_EXPR => true, _ => false, } } fn cast(syntax: SyntaxNode) -> Option { if Self::can_cast(syntax.kind()) { Some(BinExpr { syntax }) } else { None } } fn syntax(&self) -> &SyntaxNode { &self.syntax } } impl BinExpr {} // BindPat #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct BindPat { pub(crate) syntax: SyntaxNode, } impl AstNode for BindPat { fn can_cast(kind: SyntaxKind) -> bool { match kind { BIND_PAT => true, _ => false, } } fn cast(syntax: SyntaxNode) -> Option { if Self::can_cast(syntax.kind()) { Some(BindPat { syntax }) } else { None } } fn syntax(&self) -> &SyntaxNode { &self.syntax } } impl ast::NameOwner for BindPat {} impl BindPat { pub fn pat(&self) -> Option { super::child_opt(self) } } // Block #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct Block { pub(crate) syntax: SyntaxNode, } impl AstNode for Block { fn can_cast(kind: SyntaxKind) -> bool { match kind { BLOCK => true, _ => false, } } fn cast(syntax: SyntaxNode) -> Option { if Self::can_cast(syntax.kind()) { Some(Block { syntax }) } else { None } } fn syntax(&self) -> &SyntaxNode { &self.syntax } } impl ast::AttrsOwner for Block {} impl Block { pub fn statements(&self) -> impl Iterator { super::children(self) } pub fn expr(&self) -> Option { super::child_opt(self) } } // BlockExpr #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct BlockExpr { pub(crate) syntax: SyntaxNode, } impl AstNode for BlockExpr { fn can_cast(kind: SyntaxKind) -> bool { match kind { BLOCK_EXPR => true, _ => false, } } fn cast(syntax: SyntaxNode) -> Option { if Self::can_cast(syntax.kind()) { Some(BlockExpr { syntax }) } else { None } } fn syntax(&self) -> &SyntaxNode { &self.syntax } } impl BlockExpr { pub fn block(&self) -> Option { super::child_opt(self) } } // BreakExpr #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct BreakExpr { pub(crate) syntax: SyntaxNode, } impl AstNode for BreakExpr { fn can_cast(kind: SyntaxKind) -> bool { match kind { BREAK_EXPR => true, _ => false, } } fn cast(syntax: SyntaxNode) -> Option { if Self::can_cast(syntax.kind()) { Some(BreakExpr { syntax }) } else { None } } fn syntax(&self) -> &SyntaxNode { &self.syntax } } impl BreakExpr { pub fn expr(&self) -> Option { super::child_opt(self) } } // CallExpr #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct CallExpr { pub(crate) syntax: SyntaxNode, } impl AstNode for CallExpr { fn can_cast(kind: SyntaxKind) -> bool { match kind { CALL_EXPR => true, _ => false, } } fn cast(syntax: SyntaxNode) -> Option { if Self::can_cast(syntax.kind()) { Some(CallExpr { syntax }) } else { None } } fn syntax(&self) -> &SyntaxNode { &self.syntax } } impl ast::ArgListOwner for CallExpr {} impl CallExpr { pub fn expr(&self) -> Option { super::child_opt(self) } } // CastExpr #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct CastExpr { pub(crate) syntax: SyntaxNode, } impl AstNode for CastExpr { fn can_cast(kind: SyntaxKind) -> bool { match kind { CAST_EXPR => true, _ => false, } } fn cast(syntax: SyntaxNode) -> Option { if Self::can_cast(syntax.kind()) { Some(CastExpr { syntax }) } else { None } } fn syntax(&self) -> &SyntaxNode { &self.syntax } } impl CastExpr { pub fn expr(&self) -> Option { super::child_opt(self) } pub fn type_ref(&self) -> Option { super::child_opt(self) } } // Condition #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct Condition { pub(crate) syntax: SyntaxNode, } impl AstNode for Condition { fn can_cast(kind: SyntaxKind) -> bool { match kind { CONDITION => true, _ => false, } } fn cast(syntax: SyntaxNode) -> Option { if Self::can_cast(syntax.kind()) { Some(Condition { syntax }) } else { None } } fn syntax(&self) -> &SyntaxNode { &self.syntax } } impl Condition { pub fn pat(&self) -> Option { super::child_opt(self) } pub fn expr(&self) -> Option { super::child_opt(self) } } // ConstDef #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct ConstDef { pub(crate) syntax: SyntaxNode, } impl AstNode for ConstDef { fn can_cast(kind: SyntaxKind) -> bool { match kind { CONST_DEF => true, _ => false, } } fn cast(syntax: SyntaxNode) -> Option { if Self::can_cast(syntax.kind()) { Some(ConstDef { syntax }) } else { None } } fn syntax(&self) -> &SyntaxNode { &self.syntax } } impl ast::VisibilityOwner for ConstDef {} impl ast::NameOwner for ConstDef {} impl ast::TypeParamsOwner for ConstDef {} impl ast::AttrsOwner for ConstDef {} impl ast::DocCommentsOwner for ConstDef {} impl ast::TypeAscriptionOwner for ConstDef {} impl ConstDef { pub fn body(&self) -> Option { super::child_opt(self) } } // ContinueExpr #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct ContinueExpr { pub(crate) syntax: SyntaxNode, } impl AstNode for ContinueExpr { fn can_cast(kind: SyntaxKind) -> bool { match kind { CONTINUE_EXPR => true, _ => false, } } fn cast(syntax: SyntaxNode) -> Option { if Self::can_cast(syntax.kind()) { Some(ContinueExpr { syntax }) } else { None } } fn syntax(&self) -> &SyntaxNode { &self.syntax } } impl ContinueExpr {} // DynTraitType #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct DynTraitType { pub(crate) syntax: SyntaxNode, } impl AstNode for DynTraitType { fn can_cast(kind: SyntaxKind) -> bool { match kind { DYN_TRAIT_TYPE => true, _ => false, } } fn cast(syntax: SyntaxNode) -> Option { if Self::can_cast(syntax.kind()) { Some(DynTraitType { syntax }) } else { None } } fn syntax(&self) -> &SyntaxNode { &self.syntax } } impl ast::TypeBoundsOwner for DynTraitType {} impl DynTraitType {} // EnumDef #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct EnumDef { pub(crate) syntax: SyntaxNode, } impl AstNode for EnumDef { fn can_cast(kind: SyntaxKind) -> bool { match kind { ENUM_DEF => true, _ => false, } } fn cast(syntax: SyntaxNode) -> Option { if Self::can_cast(syntax.kind()) { Some(EnumDef { syntax }) } else { None } } fn syntax(&self) -> &SyntaxNode { &self.syntax } } impl ast::VisibilityOwner for EnumDef {} impl ast::NameOwner for EnumDef {} impl ast::TypeParamsOwner for EnumDef {} impl ast::AttrsOwner for EnumDef {} impl ast::DocCommentsOwner for EnumDef {} impl EnumDef { pub fn variant_list(&self) -> Option { super::child_opt(self) } } // EnumVariant #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct EnumVariant { pub(crate) syntax: SyntaxNode, } impl AstNode for EnumVariant { fn can_cast(kind: SyntaxKind) -> bool { match kind { ENUM_VARIANT => true, _ => false, } } fn cast(syntax: SyntaxNode) -> Option { if Self::can_cast(syntax.kind()) { Some(EnumVariant { syntax }) } else { None } } fn syntax(&self) -> &SyntaxNode { &self.syntax } } impl ast::NameOwner for EnumVariant {} impl ast::DocCommentsOwner for EnumVariant {} impl ast::AttrsOwner for EnumVariant {} impl EnumVariant { pub fn expr(&self) -> Option { super::child_opt(self) } } // EnumVariantList #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct EnumVariantList { pub(crate) syntax: SyntaxNode, } impl AstNode for EnumVariantList { fn can_cast(kind: SyntaxKind) -> bool { match kind { ENUM_VARIANT_LIST => true, _ => false, } } fn cast(syntax: SyntaxNode) -> Option { if Self::can_cast(syntax.kind()) { Some(EnumVariantList { syntax }) } else { None } } fn syntax(&self) -> &SyntaxNode { &self.syntax } } impl EnumVariantList { pub fn variants(&self) -> impl Iterator { super::children(self) } } // Expr #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct Expr { pub(crate) syntax: SyntaxNode, } impl AstNode for Expr { fn can_cast(kind: SyntaxKind) -> bool { match kind { | TUPLE_EXPR | ARRAY_EXPR | PAREN_EXPR | PATH_EXPR | LAMBDA_EXPR | IF_EXPR | LOOP_EXPR | FOR_EXPR | WHILE_EXPR | CONTINUE_EXPR | BREAK_EXPR | LABEL | BLOCK_EXPR | RETURN_EXPR | MATCH_EXPR | STRUCT_LIT | CALL_EXPR | INDEX_EXPR | METHOD_CALL_EXPR | FIELD_EXPR | TRY_EXPR | TRY_BLOCK_EXPR | CAST_EXPR | REF_EXPR | PREFIX_EXPR | RANGE_EXPR | BIN_EXPR | LITERAL | MACRO_CALL => true, _ => false, } } fn cast(syntax: SyntaxNode) -> Option { if Self::can_cast(syntax.kind()) { Some(Expr { syntax }) } else { None } } fn syntax(&self) -> &SyntaxNode { &self.syntax } } #[derive(Debug, Clone, PartialEq, Eq)] pub enum ExprKind { TupleExpr(TupleExpr), ArrayExpr(ArrayExpr), ParenExpr(ParenExpr), PathExpr(PathExpr), LambdaExpr(LambdaExpr), IfExpr(IfExpr), LoopExpr(LoopExpr), ForExpr(ForExpr), WhileExpr(WhileExpr), ContinueExpr(ContinueExpr), BreakExpr(BreakExpr), Label(Label), BlockExpr(BlockExpr), ReturnExpr(ReturnExpr), MatchExpr(MatchExpr), StructLit(StructLit), CallExpr(CallExpr), IndexExpr(IndexExpr), MethodCallExpr(MethodCallExpr), FieldExpr(FieldExpr), TryExpr(TryExpr), TryBlockExpr(TryBlockExpr), CastExpr(CastExpr), RefExpr(RefExpr), PrefixExpr(PrefixExpr), RangeExpr(RangeExpr), BinExpr(BinExpr), Literal(Literal), MacroCall(MacroCall), } impl From for Expr { fn from(n: TupleExpr) -> Expr { Expr { syntax: n.syntax } } } impl From for Expr { fn from(n: ArrayExpr) -> Expr { Expr { syntax: n.syntax } } } impl From for Expr { fn from(n: ParenExpr) -> Expr { Expr { syntax: n.syntax } } } impl From for Expr { fn from(n: PathExpr) -> Expr { Expr { syntax: n.syntax } } } impl From for Expr { fn from(n: LambdaExpr) -> Expr { Expr { syntax: n.syntax } } } impl From for Expr { fn from(n: IfExpr) -> Expr { Expr { syntax: n.syntax } } } impl From for Expr { fn from(n: LoopExpr) -> Expr { Expr { syntax: n.syntax } } } impl From for Expr { fn from(n: ForExpr) -> Expr { Expr { syntax: n.syntax } } } impl From for Expr { fn from(n: WhileExpr) -> Expr { Expr { syntax: n.syntax } } } impl From for Expr { fn from(n: ContinueExpr) -> Expr { Expr { syntax: n.syntax } } } impl From for Expr { fn from(n: BreakExpr) -> Expr { Expr { syntax: n.syntax } } } impl From