// 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::*, ast::{self, AstNode}, }; // Alias #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct Alias { pub(crate) syntax: SyntaxNode, } impl AstNode for Alias { fn cast(syntax: SyntaxNode) -> Option { match syntax.kind() { ALIAS => Some(Alias { syntax }), _ => 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 cast(syntax: SyntaxNode) -> Option { match syntax.kind() { ARG_LIST => Some(ArgList { syntax }), _ => 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 cast(syntax: SyntaxNode) -> Option { match syntax.kind() { ARRAY_EXPR => Some(ArrayExpr { syntax }), _ => 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 cast(syntax: SyntaxNode) -> Option { match syntax.kind() { ARRAY_TYPE => Some(ArrayType { syntax }), _ => 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 cast(syntax: SyntaxNode) -> Option { match syntax.kind() { ASSOC_TYPE_ARG => Some(AssocTypeArg { syntax }), _ => 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 cast(syntax: SyntaxNode) -> Option { match syntax.kind() { ATTR => Some(Attr { syntax }), _ => 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 cast(syntax: SyntaxNode) -> Option { match syntax.kind() { BIN_EXPR => Some(BinExpr { syntax }), _ => 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 cast(syntax: SyntaxNode) -> Option { match syntax.kind() { BIND_PAT => Some(BindPat { syntax }), _ => 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 cast(syntax: SyntaxNode) -> Option { match syntax.kind() { BLOCK => Some(Block { syntax }), _ => 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 cast(syntax: SyntaxNode) -> Option { match syntax.kind() { BLOCK_EXPR => Some(BlockExpr { syntax }), _ => 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 cast(syntax: SyntaxNode) -> Option { match syntax.kind() { BREAK_EXPR => Some(BreakExpr { syntax }), _ => 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 cast(syntax: SyntaxNode) -> Option { match syntax.kind() { CALL_EXPR => Some(CallExpr { syntax }), _ => 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 cast(syntax: SyntaxNode) -> Option { match syntax.kind() { CAST_EXPR => Some(CastExpr { syntax }), _ => 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 cast(syntax: SyntaxNode) -> Option { match syntax.kind() { CONDITION => Some(Condition { syntax }), _ => 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 cast(syntax: SyntaxNode) -> Option { match syntax.kind() { CONST_DEF => Some(ConstDef { syntax }), _ => 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 cast(syntax: SyntaxNode) -> Option { match syntax.kind() { CONTINUE_EXPR => Some(ContinueExpr { syntax }), _ => 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 cast(syntax: SyntaxNode) -> Option { match syntax.kind() { DYN_TRAIT_TYPE => Some(DynTraitType { syntax }), _ => 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 cast(syntax: SyntaxNode) -> Option { match syntax.kind() { ENUM_DEF => Some(EnumDef { syntax }), _ => 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 cast(syntax: SyntaxNode) -> Option { match syntax.kind() { ENUM_VARIANT => Some(EnumVariant { syntax }), _ => 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 cast(syntax: SyntaxNode) -> Option { match syntax.kind() { ENUM_VARIANT_LIST => Some(EnumVariantList { syntax }), _ => 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, } #[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::cast(n.syntax).unwrap() } } impl From for Expr { fn from(n: ArrayExpr) -> Expr { Expr::cast(n.syntax).unwrap() } } impl From for Expr { fn from(n: ParenExpr) -> Expr { Expr::cast(n.syntax).unwrap() } } impl From for Expr { fn from(n: PathExpr) -> Expr { Expr::cast(n.syntax).unwrap() } } impl From for Expr { fn from(n: LambdaExpr) -> Expr { Expr::cast(n.syntax).unwrap() } } impl From for Expr { fn from(n: IfExpr) -> Expr { Expr::cast(n.syntax).unwrap() } } impl From for Expr { fn from(n: LoopExpr) -> Expr { Expr::cast(n.syntax).unwrap() } } impl From for Expr { fn from(n: ForExpr) -> Expr { Expr::cast(n.syntax).unwrap() } } impl From for Expr { fn from(n: WhileExpr) -> Expr { Expr::cast(n.syntax).unwrap() } } impl From for Expr { fn from(n: ContinueExpr) -> Expr { Expr::cast(n.syntax).unwrap() } } impl From for Expr { fn from(n: BreakExpr) -> Expr { Expr::cast(n.syntax).unwrap() } } impl From