rust/crates/ra_syntax/src/ast/generated.rs
bors[bot] 4ad2e4ce4e Merge #1154
1154: Initial support for lang items (and str completion) r=flodiebold a=marcogroppo

This PR adds partial support for lang items.
For now, the only supported lang items are the ones that target an impl block.

Lang items are now resolved during type inference - this means that `str` completion now works.

Fixes #1139.

(thanks Florian Diebold for the help!)


Co-authored-by: Marco Groppo <marco.groppo@gmail.com>
2019-04-20 16:13:50 +00:00

4453 lines
111 KiB
Rust

// 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 rowan::TransparentNewType;
use crate::{
SyntaxNode, SyntaxKind::*,
syntax_node::{TreeArc},
ast::{self, AstNode},
};
// Alias
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct Alias {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for Alias {
type Repr = rowan::SyntaxNode;
}
impl AstNode for Alias {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
ALIAS => Some(Alias::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for Alias {
type Owned = TreeArc<Alias>;
fn to_owned(&self) -> TreeArc<Alias> { TreeArc::cast(self.syntax.to_owned()) }
}
impl ast::NameOwner for Alias {}
impl Alias {}
// ArgList
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct ArgList {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for ArgList {
type Repr = rowan::SyntaxNode;
}
impl AstNode for ArgList {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
ARG_LIST => Some(ArgList::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for ArgList {
type Owned = TreeArc<ArgList>;
fn to_owned(&self) -> TreeArc<ArgList> { TreeArc::cast(self.syntax.to_owned()) }
}
impl ArgList {
pub fn args(&self) -> impl Iterator<Item = &Expr> {
super::children(self)
}
}
// ArrayExpr
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct ArrayExpr {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for ArrayExpr {
type Repr = rowan::SyntaxNode;
}
impl AstNode for ArrayExpr {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
ARRAY_EXPR => Some(ArrayExpr::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for ArrayExpr {
type Owned = TreeArc<ArrayExpr>;
fn to_owned(&self) -> TreeArc<ArrayExpr> { TreeArc::cast(self.syntax.to_owned()) }
}
impl ArrayExpr {
pub fn exprs(&self) -> impl Iterator<Item = &Expr> {
super::children(self)
}
}
// ArrayType
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct ArrayType {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for ArrayType {
type Repr = rowan::SyntaxNode;
}
impl AstNode for ArrayType {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
ARRAY_TYPE => Some(ArrayType::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for ArrayType {
type Owned = TreeArc<ArrayType>;
fn to_owned(&self) -> TreeArc<ArrayType> { TreeArc::cast(self.syntax.to_owned()) }
}
impl ArrayType {
pub fn type_ref(&self) -> Option<&TypeRef> {
super::child_opt(self)
}
pub fn expr(&self) -> Option<&Expr> {
super::child_opt(self)
}
}
// AssocTypeArg
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct AssocTypeArg {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for AssocTypeArg {
type Repr = rowan::SyntaxNode;
}
impl AstNode for AssocTypeArg {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
ASSOC_TYPE_ARG => Some(AssocTypeArg::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for AssocTypeArg {
type Owned = TreeArc<AssocTypeArg>;
fn to_owned(&self) -> TreeArc<AssocTypeArg> { TreeArc::cast(self.syntax.to_owned()) }
}
impl AssocTypeArg {
pub fn name_ref(&self) -> Option<&NameRef> {
super::child_opt(self)
}
pub fn type_ref(&self) -> Option<&TypeRef> {
super::child_opt(self)
}
}
// Attr
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct Attr {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for Attr {
type Repr = rowan::SyntaxNode;
}
impl AstNode for Attr {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
ATTR => Some(Attr::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for Attr {
type Owned = TreeArc<Attr>;
fn to_owned(&self) -> TreeArc<Attr> { TreeArc::cast(self.syntax.to_owned()) }
}
impl Attr {
pub fn value(&self) -> Option<&TokenTree> {
super::child_opt(self)
}
}
// BinExpr
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct BinExpr {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for BinExpr {
type Repr = rowan::SyntaxNode;
}
impl AstNode for BinExpr {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
BIN_EXPR => Some(BinExpr::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for BinExpr {
type Owned = TreeArc<BinExpr>;
fn to_owned(&self) -> TreeArc<BinExpr> { TreeArc::cast(self.syntax.to_owned()) }
}
impl BinExpr {}
// BindPat
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct BindPat {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for BindPat {
type Repr = rowan::SyntaxNode;
}
impl AstNode for BindPat {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
BIND_PAT => Some(BindPat::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for BindPat {
type Owned = TreeArc<BindPat>;
fn to_owned(&self) -> TreeArc<BindPat> { TreeArc::cast(self.syntax.to_owned()) }
}
impl ast::NameOwner for BindPat {}
impl BindPat {
pub fn pat(&self) -> Option<&Pat> {
super::child_opt(self)
}
}
// Block
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct Block {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for Block {
type Repr = rowan::SyntaxNode;
}
impl AstNode for Block {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
BLOCK => Some(Block::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for Block {
type Owned = TreeArc<Block>;
fn to_owned(&self) -> TreeArc<Block> { TreeArc::cast(self.syntax.to_owned()) }
}
impl ast::AttrsOwner for Block {}
impl Block {
pub fn statements(&self) -> impl Iterator<Item = &Stmt> {
super::children(self)
}
pub fn expr(&self) -> Option<&Expr> {
super::child_opt(self)
}
}
// BlockExpr
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct BlockExpr {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for BlockExpr {
type Repr = rowan::SyntaxNode;
}
impl AstNode for BlockExpr {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
BLOCK_EXPR => Some(BlockExpr::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for BlockExpr {
type Owned = TreeArc<BlockExpr>;
fn to_owned(&self) -> TreeArc<BlockExpr> { TreeArc::cast(self.syntax.to_owned()) }
}
impl BlockExpr {
pub fn block(&self) -> Option<&Block> {
super::child_opt(self)
}
}
// BreakExpr
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct BreakExpr {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for BreakExpr {
type Repr = rowan::SyntaxNode;
}
impl AstNode for BreakExpr {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
BREAK_EXPR => Some(BreakExpr::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for BreakExpr {
type Owned = TreeArc<BreakExpr>;
fn to_owned(&self) -> TreeArc<BreakExpr> { TreeArc::cast(self.syntax.to_owned()) }
}
impl BreakExpr {
pub fn expr(&self) -> Option<&Expr> {
super::child_opt(self)
}
}
// CallExpr
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct CallExpr {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for CallExpr {
type Repr = rowan::SyntaxNode;
}
impl AstNode for CallExpr {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
CALL_EXPR => Some(CallExpr::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for CallExpr {
type Owned = TreeArc<CallExpr>;
fn to_owned(&self) -> TreeArc<CallExpr> { TreeArc::cast(self.syntax.to_owned()) }
}
impl ast::ArgListOwner for CallExpr {}
impl CallExpr {
pub fn expr(&self) -> Option<&Expr> {
super::child_opt(self)
}
}
// CastExpr
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct CastExpr {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for CastExpr {
type Repr = rowan::SyntaxNode;
}
impl AstNode for CastExpr {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
CAST_EXPR => Some(CastExpr::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for CastExpr {
type Owned = TreeArc<CastExpr>;
fn to_owned(&self) -> TreeArc<CastExpr> { TreeArc::cast(self.syntax.to_owned()) }
}
impl CastExpr {
pub fn expr(&self) -> Option<&Expr> {
super::child_opt(self)
}
pub fn type_ref(&self) -> Option<&TypeRef> {
super::child_opt(self)
}
}
// Condition
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct Condition {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for Condition {
type Repr = rowan::SyntaxNode;
}
impl AstNode for Condition {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
CONDITION => Some(Condition::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for Condition {
type Owned = TreeArc<Condition>;
fn to_owned(&self) -> TreeArc<Condition> { TreeArc::cast(self.syntax.to_owned()) }
}
impl Condition {
pub fn pat(&self) -> Option<&Pat> {
super::child_opt(self)
}
pub fn expr(&self) -> Option<&Expr> {
super::child_opt(self)
}
}
// ConstDef
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct ConstDef {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for ConstDef {
type Repr = rowan::SyntaxNode;
}
impl AstNode for ConstDef {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
CONST_DEF => Some(ConstDef::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for ConstDef {
type Owned = TreeArc<ConstDef>;
fn to_owned(&self) -> TreeArc<ConstDef> { TreeArc::cast(self.syntax.to_owned()) }
}
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<&Expr> {
super::child_opt(self)
}
}
// ContinueExpr
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct ContinueExpr {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for ContinueExpr {
type Repr = rowan::SyntaxNode;
}
impl AstNode for ContinueExpr {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
CONTINUE_EXPR => Some(ContinueExpr::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for ContinueExpr {
type Owned = TreeArc<ContinueExpr>;
fn to_owned(&self) -> TreeArc<ContinueExpr> { TreeArc::cast(self.syntax.to_owned()) }
}
impl ContinueExpr {}
// DynTraitType
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct DynTraitType {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for DynTraitType {
type Repr = rowan::SyntaxNode;
}
impl AstNode for DynTraitType {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
DYN_TRAIT_TYPE => Some(DynTraitType::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for DynTraitType {
type Owned = TreeArc<DynTraitType>;
fn to_owned(&self) -> TreeArc<DynTraitType> { TreeArc::cast(self.syntax.to_owned()) }
}
impl ast::TypeBoundsOwner for DynTraitType {}
impl DynTraitType {}
// EnumDef
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct EnumDef {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for EnumDef {
type Repr = rowan::SyntaxNode;
}
impl AstNode for EnumDef {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
ENUM_DEF => Some(EnumDef::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for EnumDef {
type Owned = TreeArc<EnumDef>;
fn to_owned(&self) -> TreeArc<EnumDef> { TreeArc::cast(self.syntax.to_owned()) }
}
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<&EnumVariantList> {
super::child_opt(self)
}
}
// EnumVariant
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct EnumVariant {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for EnumVariant {
type Repr = rowan::SyntaxNode;
}
impl AstNode for EnumVariant {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
ENUM_VARIANT => Some(EnumVariant::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for EnumVariant {
type Owned = TreeArc<EnumVariant>;
fn to_owned(&self) -> TreeArc<EnumVariant> { TreeArc::cast(self.syntax.to_owned()) }
}
impl ast::NameOwner for EnumVariant {}
impl ast::DocCommentsOwner for EnumVariant {}
impl ast::AttrsOwner for EnumVariant {}
impl EnumVariant {
pub fn expr(&self) -> Option<&Expr> {
super::child_opt(self)
}
}
// EnumVariantList
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct EnumVariantList {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for EnumVariantList {
type Repr = rowan::SyntaxNode;
}
impl AstNode for EnumVariantList {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
ENUM_VARIANT_LIST => Some(EnumVariantList::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for EnumVariantList {
type Owned = TreeArc<EnumVariantList>;
fn to_owned(&self) -> TreeArc<EnumVariantList> { TreeArc::cast(self.syntax.to_owned()) }
}
impl EnumVariantList {
pub fn variants(&self) -> impl Iterator<Item = &EnumVariant> {
super::children(self)
}
}
// Expr
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct Expr {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for Expr {
type Repr = rowan::SyntaxNode;
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum ExprKind<'a> {
TupleExpr(&'a TupleExpr),
ArrayExpr(&'a ArrayExpr),
ParenExpr(&'a ParenExpr),
PathExpr(&'a PathExpr),
LambdaExpr(&'a LambdaExpr),
IfExpr(&'a IfExpr),
LoopExpr(&'a LoopExpr),
ForExpr(&'a ForExpr),
WhileExpr(&'a WhileExpr),
ContinueExpr(&'a ContinueExpr),
BreakExpr(&'a BreakExpr),
Label(&'a Label),
BlockExpr(&'a BlockExpr),
ReturnExpr(&'a ReturnExpr),
MatchExpr(&'a MatchExpr),
StructLit(&'a StructLit),
CallExpr(&'a CallExpr),
IndexExpr(&'a IndexExpr),
MethodCallExpr(&'a MethodCallExpr),
FieldExpr(&'a FieldExpr),
TryExpr(&'a TryExpr),
CastExpr(&'a CastExpr),
RefExpr(&'a RefExpr),
PrefixExpr(&'a PrefixExpr),
RangeExpr(&'a RangeExpr),
BinExpr(&'a BinExpr),
Literal(&'a Literal),
MacroCall(&'a MacroCall),
}
impl<'a> From<&'a TupleExpr> for &'a Expr {
fn from(n: &'a TupleExpr) -> &'a Expr {
Expr::cast(&n.syntax).unwrap()
}
}
impl<'a> From<&'a ArrayExpr> for &'a Expr {
fn from(n: &'a ArrayExpr) -> &'a Expr {
Expr::cast(&n.syntax).unwrap()
}
}
impl<'a> From<&'a ParenExpr> for &'a Expr {
fn from(n: &'a ParenExpr) -> &'a Expr {
Expr::cast(&n.syntax).unwrap()
}
}
impl<'a> From<&'a PathExpr> for &'a Expr {
fn from(n: &'a PathExpr) -> &'a Expr {
Expr::cast(&n.syntax).unwrap()
}
}
impl<'a> From<&'a LambdaExpr> for &'a Expr {
fn from(n: &'a LambdaExpr) -> &'a Expr {
Expr::cast(&n.syntax).unwrap()
}
}
impl<'a> From<&'a IfExpr> for &'a Expr {
fn from(n: &'a IfExpr) -> &'a Expr {
Expr::cast(&n.syntax).unwrap()
}
}
impl<'a> From<&'a LoopExpr> for &'a Expr {
fn from(n: &'a LoopExpr) -> &'a Expr {
Expr::cast(&n.syntax).unwrap()
}
}
impl<'a> From<&'a ForExpr> for &'a Expr {
fn from(n: &'a ForExpr) -> &'a Expr {
Expr::cast(&n.syntax).unwrap()
}
}
impl<'a> From<&'a WhileExpr> for &'a Expr {
fn from(n: &'a WhileExpr) -> &'a Expr {
Expr::cast(&n.syntax).unwrap()
}
}
impl<'a> From<&'a ContinueExpr> for &'a Expr {
fn from(n: &'a ContinueExpr) -> &'a Expr {
Expr::cast(&n.syntax).unwrap()
}
}
impl<'a> From<&'a BreakExpr> for &'a Expr {
fn from(n: &'a BreakExpr) -> &'a Expr {
Expr::cast(&n.syntax).unwrap()
}
}
impl<'a> From<&'a Label> for &'a Expr {
fn from(n: &'a Label) -> &'a Expr {
Expr::cast(&n.syntax).unwrap()
}
}
impl<'a> From<&'a BlockExpr> for &'a Expr {
fn from(n: &'a BlockExpr) -> &'a Expr {
Expr::cast(&n.syntax).unwrap()
}
}
impl<'a> From<&'a ReturnExpr> for &'a Expr {
fn from(n: &'a ReturnExpr) -> &'a Expr {
Expr::cast(&n.syntax).unwrap()
}
}
impl<'a> From<&'a MatchExpr> for &'a Expr {
fn from(n: &'a MatchExpr) -> &'a Expr {
Expr::cast(&n.syntax).unwrap()
}
}
impl<'a> From<&'a StructLit> for &'a Expr {
fn from(n: &'a StructLit) -> &'a Expr {
Expr::cast(&n.syntax).unwrap()
}
}
impl<'a> From<&'a CallExpr> for &'a Expr {
fn from(n: &'a CallExpr) -> &'a Expr {
Expr::cast(&n.syntax).unwrap()
}
}
impl<'a> From<&'a IndexExpr> for &'a Expr {
fn from(n: &'a IndexExpr) -> &'a Expr {
Expr::cast(&n.syntax).unwrap()
}
}
impl<'a> From<&'a MethodCallExpr> for &'a Expr {
fn from(n: &'a MethodCallExpr) -> &'a Expr {
Expr::cast(&n.syntax).unwrap()
}
}
impl<'a> From<&'a FieldExpr> for &'a Expr {
fn from(n: &'a FieldExpr) -> &'a Expr {
Expr::cast(&n.syntax).unwrap()
}
}
impl<'a> From<&'a TryExpr> for &'a Expr {
fn from(n: &'a TryExpr) -> &'a Expr {
Expr::cast(&n.syntax).unwrap()
}
}
impl<'a> From<&'a CastExpr> for &'a Expr {
fn from(n: &'a CastExpr) -> &'a Expr {
Expr::cast(&n.syntax).unwrap()
}
}
impl<'a> From<&'a RefExpr> for &'a Expr {
fn from(n: &'a RefExpr) -> &'a Expr {
Expr::cast(&n.syntax).unwrap()
}
}
impl<'a> From<&'a PrefixExpr> for &'a Expr {
fn from(n: &'a PrefixExpr) -> &'a Expr {
Expr::cast(&n.syntax).unwrap()
}
}
impl<'a> From<&'a RangeExpr> for &'a Expr {
fn from(n: &'a RangeExpr) -> &'a Expr {
Expr::cast(&n.syntax).unwrap()
}
}
impl<'a> From<&'a BinExpr> for &'a Expr {
fn from(n: &'a BinExpr) -> &'a Expr {
Expr::cast(&n.syntax).unwrap()
}
}
impl<'a> From<&'a Literal> for &'a Expr {
fn from(n: &'a Literal) -> &'a Expr {
Expr::cast(&n.syntax).unwrap()
}
}
impl<'a> From<&'a MacroCall> for &'a Expr {
fn from(n: &'a MacroCall) -> &'a Expr {
Expr::cast(&n.syntax).unwrap()
}
}
impl AstNode for Expr {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.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
| CAST_EXPR
| REF_EXPR
| PREFIX_EXPR
| RANGE_EXPR
| BIN_EXPR
| LITERAL
| MACRO_CALL => Some(Expr::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for Expr {
type Owned = TreeArc<Expr>;
fn to_owned(&self) -> TreeArc<Expr> { TreeArc::cast(self.syntax.to_owned()) }
}
impl Expr {
pub fn kind(&self) -> ExprKind {
match self.syntax.kind() {
TUPLE_EXPR => ExprKind::TupleExpr(TupleExpr::cast(&self.syntax).unwrap()),
ARRAY_EXPR => ExprKind::ArrayExpr(ArrayExpr::cast(&self.syntax).unwrap()),
PAREN_EXPR => ExprKind::ParenExpr(ParenExpr::cast(&self.syntax).unwrap()),
PATH_EXPR => ExprKind::PathExpr(PathExpr::cast(&self.syntax).unwrap()),
LAMBDA_EXPR => ExprKind::LambdaExpr(LambdaExpr::cast(&self.syntax).unwrap()),
IF_EXPR => ExprKind::IfExpr(IfExpr::cast(&self.syntax).unwrap()),
LOOP_EXPR => ExprKind::LoopExpr(LoopExpr::cast(&self.syntax).unwrap()),
FOR_EXPR => ExprKind::ForExpr(ForExpr::cast(&self.syntax).unwrap()),
WHILE_EXPR => ExprKind::WhileExpr(WhileExpr::cast(&self.syntax).unwrap()),
CONTINUE_EXPR => ExprKind::ContinueExpr(ContinueExpr::cast(&self.syntax).unwrap()),
BREAK_EXPR => ExprKind::BreakExpr(BreakExpr::cast(&self.syntax).unwrap()),
LABEL => ExprKind::Label(Label::cast(&self.syntax).unwrap()),
BLOCK_EXPR => ExprKind::BlockExpr(BlockExpr::cast(&self.syntax).unwrap()),
RETURN_EXPR => ExprKind::ReturnExpr(ReturnExpr::cast(&self.syntax).unwrap()),
MATCH_EXPR => ExprKind::MatchExpr(MatchExpr::cast(&self.syntax).unwrap()),
STRUCT_LIT => ExprKind::StructLit(StructLit::cast(&self.syntax).unwrap()),
CALL_EXPR => ExprKind::CallExpr(CallExpr::cast(&self.syntax).unwrap()),
INDEX_EXPR => ExprKind::IndexExpr(IndexExpr::cast(&self.syntax).unwrap()),
METHOD_CALL_EXPR => ExprKind::MethodCallExpr(MethodCallExpr::cast(&self.syntax).unwrap()),
FIELD_EXPR => ExprKind::FieldExpr(FieldExpr::cast(&self.syntax).unwrap()),
TRY_EXPR => ExprKind::TryExpr(TryExpr::cast(&self.syntax).unwrap()),
CAST_EXPR => ExprKind::CastExpr(CastExpr::cast(&self.syntax).unwrap()),
REF_EXPR => ExprKind::RefExpr(RefExpr::cast(&self.syntax).unwrap()),
PREFIX_EXPR => ExprKind::PrefixExpr(PrefixExpr::cast(&self.syntax).unwrap()),
RANGE_EXPR => ExprKind::RangeExpr(RangeExpr::cast(&self.syntax).unwrap()),
BIN_EXPR => ExprKind::BinExpr(BinExpr::cast(&self.syntax).unwrap()),
LITERAL => ExprKind::Literal(Literal::cast(&self.syntax).unwrap()),
MACRO_CALL => ExprKind::MacroCall(MacroCall::cast(&self.syntax).unwrap()),
_ => unreachable!(),
}
}
}
impl Expr {}
// ExprStmt
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct ExprStmt {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for ExprStmt {
type Repr = rowan::SyntaxNode;
}
impl AstNode for ExprStmt {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
EXPR_STMT => Some(ExprStmt::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for ExprStmt {
type Owned = TreeArc<ExprStmt>;
fn to_owned(&self) -> TreeArc<ExprStmt> { TreeArc::cast(self.syntax.to_owned()) }
}
impl ExprStmt {
pub fn expr(&self) -> Option<&Expr> {
super::child_opt(self)
}
}
// ExternCrateItem
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct ExternCrateItem {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for ExternCrateItem {
type Repr = rowan::SyntaxNode;
}
impl AstNode for ExternCrateItem {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
EXTERN_CRATE_ITEM => Some(ExternCrateItem::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for ExternCrateItem {
type Owned = TreeArc<ExternCrateItem>;
fn to_owned(&self) -> TreeArc<ExternCrateItem> { TreeArc::cast(self.syntax.to_owned()) }
}
impl ExternCrateItem {
pub fn name_ref(&self) -> Option<&NameRef> {
super::child_opt(self)
}
pub fn alias(&self) -> Option<&Alias> {
super::child_opt(self)
}
}
// FieldExpr
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct FieldExpr {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for FieldExpr {
type Repr = rowan::SyntaxNode;
}
impl AstNode for FieldExpr {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
FIELD_EXPR => Some(FieldExpr::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for FieldExpr {
type Owned = TreeArc<FieldExpr>;
fn to_owned(&self) -> TreeArc<FieldExpr> { TreeArc::cast(self.syntax.to_owned()) }
}
impl FieldExpr {
pub fn expr(&self) -> Option<&Expr> {
super::child_opt(self)
}
pub fn name_ref(&self) -> Option<&NameRef> {
super::child_opt(self)
}
}
// FieldPat
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct FieldPat {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for FieldPat {
type Repr = rowan::SyntaxNode;
}
impl AstNode for FieldPat {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
FIELD_PAT => Some(FieldPat::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for FieldPat {
type Owned = TreeArc<FieldPat>;
fn to_owned(&self) -> TreeArc<FieldPat> { TreeArc::cast(self.syntax.to_owned()) }
}
impl ast::NameOwner for FieldPat {}
impl FieldPat {
pub fn pat(&self) -> Option<&Pat> {
super::child_opt(self)
}
}
// FieldPatList
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct FieldPatList {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for FieldPatList {
type Repr = rowan::SyntaxNode;
}
impl AstNode for FieldPatList {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
FIELD_PAT_LIST => Some(FieldPatList::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for FieldPatList {
type Owned = TreeArc<FieldPatList>;
fn to_owned(&self) -> TreeArc<FieldPatList> { TreeArc::cast(self.syntax.to_owned()) }
}
impl FieldPatList {
pub fn field_pats(&self) -> impl Iterator<Item = &FieldPat> {
super::children(self)
}
pub fn bind_pats(&self) -> impl Iterator<Item = &BindPat> {
super::children(self)
}
}
// FnDef
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct FnDef {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for FnDef {
type Repr = rowan::SyntaxNode;
}
impl AstNode for FnDef {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
FN_DEF => Some(FnDef::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for FnDef {
type Owned = TreeArc<FnDef>;
fn to_owned(&self) -> TreeArc<FnDef> { TreeArc::cast(self.syntax.to_owned()) }
}
impl ast::VisibilityOwner for FnDef {}
impl ast::NameOwner for FnDef {}
impl ast::TypeParamsOwner for FnDef {}
impl ast::AttrsOwner for FnDef {}
impl ast::DocCommentsOwner for FnDef {}
impl FnDef {
pub fn param_list(&self) -> Option<&ParamList> {
super::child_opt(self)
}
pub fn body(&self) -> Option<&Block> {
super::child_opt(self)
}
pub fn ret_type(&self) -> Option<&RetType> {
super::child_opt(self)
}
}
// FnPointerType
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct FnPointerType {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for FnPointerType {
type Repr = rowan::SyntaxNode;
}
impl AstNode for FnPointerType {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
FN_POINTER_TYPE => Some(FnPointerType::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for FnPointerType {
type Owned = TreeArc<FnPointerType>;
fn to_owned(&self) -> TreeArc<FnPointerType> { TreeArc::cast(self.syntax.to_owned()) }
}
impl FnPointerType {
pub fn param_list(&self) -> Option<&ParamList> {
super::child_opt(self)
}
pub fn ret_type(&self) -> Option<&RetType> {
super::child_opt(self)
}
}
// ForExpr
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct ForExpr {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for ForExpr {
type Repr = rowan::SyntaxNode;
}
impl AstNode for ForExpr {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
FOR_EXPR => Some(ForExpr::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for ForExpr {
type Owned = TreeArc<ForExpr>;
fn to_owned(&self) -> TreeArc<ForExpr> { TreeArc::cast(self.syntax.to_owned()) }
}
impl ast::LoopBodyOwner for ForExpr {}
impl ForExpr {
pub fn pat(&self) -> Option<&Pat> {
super::child_opt(self)
}
pub fn iterable(&self) -> Option<&Expr> {
super::child_opt(self)
}
}
// ForType
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct ForType {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for ForType {
type Repr = rowan::SyntaxNode;
}
impl AstNode for ForType {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
FOR_TYPE => Some(ForType::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for ForType {
type Owned = TreeArc<ForType>;
fn to_owned(&self) -> TreeArc<ForType> { TreeArc::cast(self.syntax.to_owned()) }
}
impl ForType {
pub fn type_ref(&self) -> Option<&TypeRef> {
super::child_opt(self)
}
}
// IfExpr
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct IfExpr {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for IfExpr {
type Repr = rowan::SyntaxNode;
}
impl AstNode for IfExpr {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
IF_EXPR => Some(IfExpr::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for IfExpr {
type Owned = TreeArc<IfExpr>;
fn to_owned(&self) -> TreeArc<IfExpr> { TreeArc::cast(self.syntax.to_owned()) }
}
impl IfExpr {
pub fn condition(&self) -> Option<&Condition> {
super::child_opt(self)
}
}
// ImplBlock
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct ImplBlock {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for ImplBlock {
type Repr = rowan::SyntaxNode;
}
impl AstNode for ImplBlock {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
IMPL_BLOCK => Some(ImplBlock::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for ImplBlock {
type Owned = TreeArc<ImplBlock>;
fn to_owned(&self) -> TreeArc<ImplBlock> { TreeArc::cast(self.syntax.to_owned()) }
}
impl ast::TypeParamsOwner for ImplBlock {}
impl ast::AttrsOwner for ImplBlock {}
impl ImplBlock {
pub fn item_list(&self) -> Option<&ItemList> {
super::child_opt(self)
}
}
// ImplItem
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct ImplItem {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for ImplItem {
type Repr = rowan::SyntaxNode;
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum ImplItemKind<'a> {
FnDef(&'a FnDef),
TypeAliasDef(&'a TypeAliasDef),
ConstDef(&'a ConstDef),
}
impl<'a> From<&'a FnDef> for &'a ImplItem {
fn from(n: &'a FnDef) -> &'a ImplItem {
ImplItem::cast(&n.syntax).unwrap()
}
}
impl<'a> From<&'a TypeAliasDef> for &'a ImplItem {
fn from(n: &'a TypeAliasDef) -> &'a ImplItem {
ImplItem::cast(&n.syntax).unwrap()
}
}
impl<'a> From<&'a ConstDef> for &'a ImplItem {
fn from(n: &'a ConstDef) -> &'a ImplItem {
ImplItem::cast(&n.syntax).unwrap()
}
}
impl AstNode for ImplItem {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
| FN_DEF
| TYPE_ALIAS_DEF
| CONST_DEF => Some(ImplItem::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for ImplItem {
type Owned = TreeArc<ImplItem>;
fn to_owned(&self) -> TreeArc<ImplItem> { TreeArc::cast(self.syntax.to_owned()) }
}
impl ImplItem {
pub fn kind(&self) -> ImplItemKind {
match self.syntax.kind() {
FN_DEF => ImplItemKind::FnDef(FnDef::cast(&self.syntax).unwrap()),
TYPE_ALIAS_DEF => ImplItemKind::TypeAliasDef(TypeAliasDef::cast(&self.syntax).unwrap()),
CONST_DEF => ImplItemKind::ConstDef(ConstDef::cast(&self.syntax).unwrap()),
_ => unreachable!(),
}
}
}
impl ImplItem {}
// ImplTraitType
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct ImplTraitType {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for ImplTraitType {
type Repr = rowan::SyntaxNode;
}
impl AstNode for ImplTraitType {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
IMPL_TRAIT_TYPE => Some(ImplTraitType::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for ImplTraitType {
type Owned = TreeArc<ImplTraitType>;
fn to_owned(&self) -> TreeArc<ImplTraitType> { TreeArc::cast(self.syntax.to_owned()) }
}
impl ast::TypeBoundsOwner for ImplTraitType {}
impl ImplTraitType {}
// IndexExpr
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct IndexExpr {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for IndexExpr {
type Repr = rowan::SyntaxNode;
}
impl AstNode for IndexExpr {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
INDEX_EXPR => Some(IndexExpr::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for IndexExpr {
type Owned = TreeArc<IndexExpr>;
fn to_owned(&self) -> TreeArc<IndexExpr> { TreeArc::cast(self.syntax.to_owned()) }
}
impl IndexExpr {}
// ItemList
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct ItemList {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for ItemList {
type Repr = rowan::SyntaxNode;
}
impl AstNode for ItemList {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
ITEM_LIST => Some(ItemList::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for ItemList {
type Owned = TreeArc<ItemList>;
fn to_owned(&self) -> TreeArc<ItemList> { TreeArc::cast(self.syntax.to_owned()) }
}
impl ast::FnDefOwner for ItemList {}
impl ast::ModuleItemOwner for ItemList {}
impl ItemList {
pub fn impl_items(&self) -> impl Iterator<Item = &ImplItem> {
super::children(self)
}
}
// Label
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct Label {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for Label {
type Repr = rowan::SyntaxNode;
}
impl AstNode for Label {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
LABEL => Some(Label::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for Label {
type Owned = TreeArc<Label>;
fn to_owned(&self) -> TreeArc<Label> { TreeArc::cast(self.syntax.to_owned()) }
}
impl Label {}
// LambdaExpr
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct LambdaExpr {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for LambdaExpr {
type Repr = rowan::SyntaxNode;
}
impl AstNode for LambdaExpr {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
LAMBDA_EXPR => Some(LambdaExpr::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for LambdaExpr {
type Owned = TreeArc<LambdaExpr>;
fn to_owned(&self) -> TreeArc<LambdaExpr> { TreeArc::cast(self.syntax.to_owned()) }
}
impl LambdaExpr {
pub fn param_list(&self) -> Option<&ParamList> {
super::child_opt(self)
}
pub fn body(&self) -> Option<&Expr> {
super::child_opt(self)
}
}
// LetStmt
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct LetStmt {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for LetStmt {
type Repr = rowan::SyntaxNode;
}
impl AstNode for LetStmt {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
LET_STMT => Some(LetStmt::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for LetStmt {
type Owned = TreeArc<LetStmt>;
fn to_owned(&self) -> TreeArc<LetStmt> { TreeArc::cast(self.syntax.to_owned()) }
}
impl ast::TypeAscriptionOwner for LetStmt {}
impl LetStmt {
pub fn pat(&self) -> Option<&Pat> {
super::child_opt(self)
}
pub fn initializer(&self) -> Option<&Expr> {
super::child_opt(self)
}
}
// LifetimeArg
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct LifetimeArg {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for LifetimeArg {
type Repr = rowan::SyntaxNode;
}
impl AstNode for LifetimeArg {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
LIFETIME_ARG => Some(LifetimeArg::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for LifetimeArg {
type Owned = TreeArc<LifetimeArg>;
fn to_owned(&self) -> TreeArc<LifetimeArg> { TreeArc::cast(self.syntax.to_owned()) }
}
impl LifetimeArg {}
// LifetimeParam
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct LifetimeParam {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for LifetimeParam {
type Repr = rowan::SyntaxNode;
}
impl AstNode for LifetimeParam {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
LIFETIME_PARAM => Some(LifetimeParam::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for LifetimeParam {
type Owned = TreeArc<LifetimeParam>;
fn to_owned(&self) -> TreeArc<LifetimeParam> { TreeArc::cast(self.syntax.to_owned()) }
}
impl ast::AttrsOwner for LifetimeParam {}
impl LifetimeParam {}
// Literal
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct Literal {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for Literal {
type Repr = rowan::SyntaxNode;
}
impl AstNode for Literal {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
LITERAL => Some(Literal::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for Literal {
type Owned = TreeArc<Literal>;
fn to_owned(&self) -> TreeArc<Literal> { TreeArc::cast(self.syntax.to_owned()) }
}
impl Literal {}
// LiteralPat
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct LiteralPat {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for LiteralPat {
type Repr = rowan::SyntaxNode;
}
impl AstNode for LiteralPat {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
LITERAL_PAT => Some(LiteralPat::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for LiteralPat {
type Owned = TreeArc<LiteralPat>;
fn to_owned(&self) -> TreeArc<LiteralPat> { TreeArc::cast(self.syntax.to_owned()) }
}
impl LiteralPat {
pub fn literal(&self) -> Option<&Literal> {
super::child_opt(self)
}
}
// LoopExpr
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct LoopExpr {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for LoopExpr {
type Repr = rowan::SyntaxNode;
}
impl AstNode for LoopExpr {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
LOOP_EXPR => Some(LoopExpr::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for LoopExpr {
type Owned = TreeArc<LoopExpr>;
fn to_owned(&self) -> TreeArc<LoopExpr> { TreeArc::cast(self.syntax.to_owned()) }
}
impl ast::LoopBodyOwner for LoopExpr {}
impl LoopExpr {}
// MacroCall
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct MacroCall {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for MacroCall {
type Repr = rowan::SyntaxNode;
}
impl AstNode for MacroCall {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
MACRO_CALL => Some(MacroCall::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for MacroCall {
type Owned = TreeArc<MacroCall>;
fn to_owned(&self) -> TreeArc<MacroCall> { TreeArc::cast(self.syntax.to_owned()) }
}
impl ast::NameOwner for MacroCall {}
impl ast::AttrsOwner for MacroCall {}
impl MacroCall {
pub fn token_tree(&self) -> Option<&TokenTree> {
super::child_opt(self)
}
pub fn path(&self) -> Option<&Path> {
super::child_opt(self)
}
}
// MacroItems
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct MacroItems {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for MacroItems {
type Repr = rowan::SyntaxNode;
}
impl AstNode for MacroItems {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
MACRO_ITEMS => Some(MacroItems::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for MacroItems {
type Owned = TreeArc<MacroItems>;
fn to_owned(&self) -> TreeArc<MacroItems> { TreeArc::cast(self.syntax.to_owned()) }
}
impl ast::ModuleItemOwner for MacroItems {}
impl ast::FnDefOwner for MacroItems {}
impl MacroItems {}
// MacroStmts
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct MacroStmts {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for MacroStmts {
type Repr = rowan::SyntaxNode;
}
impl AstNode for MacroStmts {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
MACRO_STMTS => Some(MacroStmts::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for MacroStmts {
type Owned = TreeArc<MacroStmts>;
fn to_owned(&self) -> TreeArc<MacroStmts> { TreeArc::cast(self.syntax.to_owned()) }
}
impl MacroStmts {
pub fn statements(&self) -> impl Iterator<Item = &Stmt> {
super::children(self)
}
pub fn expr(&self) -> Option<&Expr> {
super::child_opt(self)
}
}
// MatchArm
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct MatchArm {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for MatchArm {
type Repr = rowan::SyntaxNode;
}
impl AstNode for MatchArm {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
MATCH_ARM => Some(MatchArm::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for MatchArm {
type Owned = TreeArc<MatchArm>;
fn to_owned(&self) -> TreeArc<MatchArm> { TreeArc::cast(self.syntax.to_owned()) }
}
impl ast::AttrsOwner for MatchArm {}
impl MatchArm {
pub fn pats(&self) -> impl Iterator<Item = &Pat> {
super::children(self)
}
pub fn guard(&self) -> Option<&MatchGuard> {
super::child_opt(self)
}
pub fn expr(&self) -> Option<&Expr> {
super::child_opt(self)
}
}
// MatchArmList
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct MatchArmList {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for MatchArmList {
type Repr = rowan::SyntaxNode;
}
impl AstNode for MatchArmList {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
MATCH_ARM_LIST => Some(MatchArmList::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for MatchArmList {
type Owned = TreeArc<MatchArmList>;
fn to_owned(&self) -> TreeArc<MatchArmList> { TreeArc::cast(self.syntax.to_owned()) }
}
impl ast::AttrsOwner for MatchArmList {}
impl MatchArmList {
pub fn arms(&self) -> impl Iterator<Item = &MatchArm> {
super::children(self)
}
}
// MatchExpr
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct MatchExpr {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for MatchExpr {
type Repr = rowan::SyntaxNode;
}
impl AstNode for MatchExpr {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
MATCH_EXPR => Some(MatchExpr::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for MatchExpr {
type Owned = TreeArc<MatchExpr>;
fn to_owned(&self) -> TreeArc<MatchExpr> { TreeArc::cast(self.syntax.to_owned()) }
}
impl MatchExpr {
pub fn expr(&self) -> Option<&Expr> {
super::child_opt(self)
}
pub fn match_arm_list(&self) -> Option<&MatchArmList> {
super::child_opt(self)
}
}
// MatchGuard
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct MatchGuard {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for MatchGuard {
type Repr = rowan::SyntaxNode;
}
impl AstNode for MatchGuard {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
MATCH_GUARD => Some(MatchGuard::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for MatchGuard {
type Owned = TreeArc<MatchGuard>;
fn to_owned(&self) -> TreeArc<MatchGuard> { TreeArc::cast(self.syntax.to_owned()) }
}
impl MatchGuard {
pub fn expr(&self) -> Option<&Expr> {
super::child_opt(self)
}
}
// MethodCallExpr
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct MethodCallExpr {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for MethodCallExpr {
type Repr = rowan::SyntaxNode;
}
impl AstNode for MethodCallExpr {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
METHOD_CALL_EXPR => Some(MethodCallExpr::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for MethodCallExpr {
type Owned = TreeArc<MethodCallExpr>;
fn to_owned(&self) -> TreeArc<MethodCallExpr> { TreeArc::cast(self.syntax.to_owned()) }
}
impl ast::ArgListOwner for MethodCallExpr {}
impl MethodCallExpr {
pub fn expr(&self) -> Option<&Expr> {
super::child_opt(self)
}
pub fn name_ref(&self) -> Option<&NameRef> {
super::child_opt(self)
}
pub fn type_arg_list(&self) -> Option<&TypeArgList> {
super::child_opt(self)
}
}
// Module
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct Module {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for Module {
type Repr = rowan::SyntaxNode;
}
impl AstNode for Module {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
MODULE => Some(Module::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for Module {
type Owned = TreeArc<Module>;
fn to_owned(&self) -> TreeArc<Module> { TreeArc::cast(self.syntax.to_owned()) }
}
impl ast::VisibilityOwner for Module {}
impl ast::NameOwner for Module {}
impl ast::AttrsOwner for Module {}
impl ast::DocCommentsOwner for Module {}
impl Module {
pub fn item_list(&self) -> Option<&ItemList> {
super::child_opt(self)
}
}
// ModuleItem
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct ModuleItem {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for ModuleItem {
type Repr = rowan::SyntaxNode;
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum ModuleItemKind<'a> {
StructDef(&'a StructDef),
EnumDef(&'a EnumDef),
FnDef(&'a FnDef),
TraitDef(&'a TraitDef),
TypeAliasDef(&'a TypeAliasDef),
ImplBlock(&'a ImplBlock),
UseItem(&'a UseItem),
ExternCrateItem(&'a ExternCrateItem),
ConstDef(&'a ConstDef),
StaticDef(&'a StaticDef),
Module(&'a Module),
}
impl<'a> From<&'a StructDef> for &'a ModuleItem {
fn from(n: &'a StructDef) -> &'a ModuleItem {
ModuleItem::cast(&n.syntax).unwrap()
}
}
impl<'a> From<&'a EnumDef> for &'a ModuleItem {
fn from(n: &'a EnumDef) -> &'a ModuleItem {
ModuleItem::cast(&n.syntax).unwrap()
}
}
impl<'a> From<&'a FnDef> for &'a ModuleItem {
fn from(n: &'a FnDef) -> &'a ModuleItem {
ModuleItem::cast(&n.syntax).unwrap()
}
}
impl<'a> From<&'a TraitDef> for &'a ModuleItem {
fn from(n: &'a TraitDef) -> &'a ModuleItem {
ModuleItem::cast(&n.syntax).unwrap()
}
}
impl<'a> From<&'a TypeAliasDef> for &'a ModuleItem {
fn from(n: &'a TypeAliasDef) -> &'a ModuleItem {
ModuleItem::cast(&n.syntax).unwrap()
}
}
impl<'a> From<&'a ImplBlock> for &'a ModuleItem {
fn from(n: &'a ImplBlock) -> &'a ModuleItem {
ModuleItem::cast(&n.syntax).unwrap()
}
}
impl<'a> From<&'a UseItem> for &'a ModuleItem {
fn from(n: &'a UseItem) -> &'a ModuleItem {
ModuleItem::cast(&n.syntax).unwrap()
}
}
impl<'a> From<&'a ExternCrateItem> for &'a ModuleItem {
fn from(n: &'a ExternCrateItem) -> &'a ModuleItem {
ModuleItem::cast(&n.syntax).unwrap()
}
}
impl<'a> From<&'a ConstDef> for &'a ModuleItem {
fn from(n: &'a ConstDef) -> &'a ModuleItem {
ModuleItem::cast(&n.syntax).unwrap()
}
}
impl<'a> From<&'a StaticDef> for &'a ModuleItem {
fn from(n: &'a StaticDef) -> &'a ModuleItem {
ModuleItem::cast(&n.syntax).unwrap()
}
}
impl<'a> From<&'a Module> for &'a ModuleItem {
fn from(n: &'a Module) -> &'a ModuleItem {
ModuleItem::cast(&n.syntax).unwrap()
}
}
impl AstNode for ModuleItem {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
| STRUCT_DEF
| ENUM_DEF
| FN_DEF
| TRAIT_DEF
| TYPE_ALIAS_DEF
| IMPL_BLOCK
| USE_ITEM
| EXTERN_CRATE_ITEM
| CONST_DEF
| STATIC_DEF
| MODULE => Some(ModuleItem::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for ModuleItem {
type Owned = TreeArc<ModuleItem>;
fn to_owned(&self) -> TreeArc<ModuleItem> { TreeArc::cast(self.syntax.to_owned()) }
}
impl ModuleItem {
pub fn kind(&self) -> ModuleItemKind {
match self.syntax.kind() {
STRUCT_DEF => ModuleItemKind::StructDef(StructDef::cast(&self.syntax).unwrap()),
ENUM_DEF => ModuleItemKind::EnumDef(EnumDef::cast(&self.syntax).unwrap()),
FN_DEF => ModuleItemKind::FnDef(FnDef::cast(&self.syntax).unwrap()),
TRAIT_DEF => ModuleItemKind::TraitDef(TraitDef::cast(&self.syntax).unwrap()),
TYPE_ALIAS_DEF => ModuleItemKind::TypeAliasDef(TypeAliasDef::cast(&self.syntax).unwrap()),
IMPL_BLOCK => ModuleItemKind::ImplBlock(ImplBlock::cast(&self.syntax).unwrap()),
USE_ITEM => ModuleItemKind::UseItem(UseItem::cast(&self.syntax).unwrap()),
EXTERN_CRATE_ITEM => ModuleItemKind::ExternCrateItem(ExternCrateItem::cast(&self.syntax).unwrap()),
CONST_DEF => ModuleItemKind::ConstDef(ConstDef::cast(&self.syntax).unwrap()),
STATIC_DEF => ModuleItemKind::StaticDef(StaticDef::cast(&self.syntax).unwrap()),
MODULE => ModuleItemKind::Module(Module::cast(&self.syntax).unwrap()),
_ => unreachable!(),
}
}
}
impl ModuleItem {}
// Name
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct Name {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for Name {
type Repr = rowan::SyntaxNode;
}
impl AstNode for Name {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
NAME => Some(Name::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for Name {
type Owned = TreeArc<Name>;
fn to_owned(&self) -> TreeArc<Name> { TreeArc::cast(self.syntax.to_owned()) }
}
impl Name {}
// NameRef
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct NameRef {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for NameRef {
type Repr = rowan::SyntaxNode;
}
impl AstNode for NameRef {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
NAME_REF => Some(NameRef::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for NameRef {
type Owned = TreeArc<NameRef>;
fn to_owned(&self) -> TreeArc<NameRef> { TreeArc::cast(self.syntax.to_owned()) }
}
impl NameRef {}
// NamedField
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct NamedField {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for NamedField {
type Repr = rowan::SyntaxNode;
}
impl AstNode for NamedField {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
NAMED_FIELD => Some(NamedField::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for NamedField {
type Owned = TreeArc<NamedField>;
fn to_owned(&self) -> TreeArc<NamedField> { TreeArc::cast(self.syntax.to_owned()) }
}
impl NamedField {
pub fn name_ref(&self) -> Option<&NameRef> {
super::child_opt(self)
}
pub fn expr(&self) -> Option<&Expr> {
super::child_opt(self)
}
}
// NamedFieldDef
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct NamedFieldDef {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for NamedFieldDef {
type Repr = rowan::SyntaxNode;
}
impl AstNode for NamedFieldDef {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
NAMED_FIELD_DEF => Some(NamedFieldDef::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for NamedFieldDef {
type Owned = TreeArc<NamedFieldDef>;
fn to_owned(&self) -> TreeArc<NamedFieldDef> { TreeArc::cast(self.syntax.to_owned()) }
}
impl ast::VisibilityOwner for NamedFieldDef {}
impl ast::NameOwner for NamedFieldDef {}
impl ast::AttrsOwner for NamedFieldDef {}
impl ast::DocCommentsOwner for NamedFieldDef {}
impl ast::TypeAscriptionOwner for NamedFieldDef {}
impl NamedFieldDef {}
// NamedFieldDefList
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct NamedFieldDefList {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for NamedFieldDefList {
type Repr = rowan::SyntaxNode;
}
impl AstNode for NamedFieldDefList {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
NAMED_FIELD_DEF_LIST => Some(NamedFieldDefList::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for NamedFieldDefList {
type Owned = TreeArc<NamedFieldDefList>;
fn to_owned(&self) -> TreeArc<NamedFieldDefList> { TreeArc::cast(self.syntax.to_owned()) }
}
impl NamedFieldDefList {
pub fn fields(&self) -> impl Iterator<Item = &NamedFieldDef> {
super::children(self)
}
}
// NamedFieldList
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct NamedFieldList {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for NamedFieldList {
type Repr = rowan::SyntaxNode;
}
impl AstNode for NamedFieldList {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
NAMED_FIELD_LIST => Some(NamedFieldList::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for NamedFieldList {
type Owned = TreeArc<NamedFieldList>;
fn to_owned(&self) -> TreeArc<NamedFieldList> { TreeArc::cast(self.syntax.to_owned()) }
}
impl NamedFieldList {
pub fn fields(&self) -> impl Iterator<Item = &NamedField> {
super::children(self)
}
}
// NeverType
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct NeverType {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for NeverType {
type Repr = rowan::SyntaxNode;
}
impl AstNode for NeverType {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
NEVER_TYPE => Some(NeverType::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for NeverType {
type Owned = TreeArc<NeverType>;
fn to_owned(&self) -> TreeArc<NeverType> { TreeArc::cast(self.syntax.to_owned()) }
}
impl NeverType {}
// NominalDef
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct NominalDef {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for NominalDef {
type Repr = rowan::SyntaxNode;
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum NominalDefKind<'a> {
StructDef(&'a StructDef),
EnumDef(&'a EnumDef),
}
impl<'a> From<&'a StructDef> for &'a NominalDef {
fn from(n: &'a StructDef) -> &'a NominalDef {
NominalDef::cast(&n.syntax).unwrap()
}
}
impl<'a> From<&'a EnumDef> for &'a NominalDef {
fn from(n: &'a EnumDef) -> &'a NominalDef {
NominalDef::cast(&n.syntax).unwrap()
}
}
impl AstNode for NominalDef {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
| STRUCT_DEF
| ENUM_DEF => Some(NominalDef::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for NominalDef {
type Owned = TreeArc<NominalDef>;
fn to_owned(&self) -> TreeArc<NominalDef> { TreeArc::cast(self.syntax.to_owned()) }
}
impl NominalDef {
pub fn kind(&self) -> NominalDefKind {
match self.syntax.kind() {
STRUCT_DEF => NominalDefKind::StructDef(StructDef::cast(&self.syntax).unwrap()),
ENUM_DEF => NominalDefKind::EnumDef(EnumDef::cast(&self.syntax).unwrap()),
_ => unreachable!(),
}
}
}
impl ast::NameOwner for NominalDef {}
impl ast::TypeParamsOwner for NominalDef {}
impl ast::AttrsOwner for NominalDef {}
impl NominalDef {}
// Param
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct Param {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for Param {
type Repr = rowan::SyntaxNode;
}
impl AstNode for Param {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
PARAM => Some(Param::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for Param {
type Owned = TreeArc<Param>;
fn to_owned(&self) -> TreeArc<Param> { TreeArc::cast(self.syntax.to_owned()) }
}
impl ast::TypeAscriptionOwner for Param {}
impl Param {
pub fn pat(&self) -> Option<&Pat> {
super::child_opt(self)
}
}
// ParamList
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct ParamList {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for ParamList {
type Repr = rowan::SyntaxNode;
}
impl AstNode for ParamList {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
PARAM_LIST => Some(ParamList::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for ParamList {
type Owned = TreeArc<ParamList>;
fn to_owned(&self) -> TreeArc<ParamList> { TreeArc::cast(self.syntax.to_owned()) }
}
impl ParamList {
pub fn params(&self) -> impl Iterator<Item = &Param> {
super::children(self)
}
pub fn self_param(&self) -> Option<&SelfParam> {
super::child_opt(self)
}
}
// ParenExpr
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct ParenExpr {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for ParenExpr {
type Repr = rowan::SyntaxNode;
}
impl AstNode for ParenExpr {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
PAREN_EXPR => Some(ParenExpr::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for ParenExpr {
type Owned = TreeArc<ParenExpr>;
fn to_owned(&self) -> TreeArc<ParenExpr> { TreeArc::cast(self.syntax.to_owned()) }
}
impl ParenExpr {
pub fn expr(&self) -> Option<&Expr> {
super::child_opt(self)
}
}
// ParenType
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct ParenType {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for ParenType {
type Repr = rowan::SyntaxNode;
}
impl AstNode for ParenType {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
PAREN_TYPE => Some(ParenType::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for ParenType {
type Owned = TreeArc<ParenType>;
fn to_owned(&self) -> TreeArc<ParenType> { TreeArc::cast(self.syntax.to_owned()) }
}
impl ParenType {
pub fn type_ref(&self) -> Option<&TypeRef> {
super::child_opt(self)
}
}
// Pat
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct Pat {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for Pat {
type Repr = rowan::SyntaxNode;
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum PatKind<'a> {
RefPat(&'a RefPat),
BindPat(&'a BindPat),
PlaceholderPat(&'a PlaceholderPat),
PathPat(&'a PathPat),
StructPat(&'a StructPat),
TupleStructPat(&'a TupleStructPat),
TuplePat(&'a TuplePat),
SlicePat(&'a SlicePat),
RangePat(&'a RangePat),
LiteralPat(&'a LiteralPat),
}
impl<'a> From<&'a RefPat> for &'a Pat {
fn from(n: &'a RefPat) -> &'a Pat {
Pat::cast(&n.syntax).unwrap()
}
}
impl<'a> From<&'a BindPat> for &'a Pat {
fn from(n: &'a BindPat) -> &'a Pat {
Pat::cast(&n.syntax).unwrap()
}
}
impl<'a> From<&'a PlaceholderPat> for &'a Pat {
fn from(n: &'a PlaceholderPat) -> &'a Pat {
Pat::cast(&n.syntax).unwrap()
}
}
impl<'a> From<&'a PathPat> for &'a Pat {
fn from(n: &'a PathPat) -> &'a Pat {
Pat::cast(&n.syntax).unwrap()
}
}
impl<'a> From<&'a StructPat> for &'a Pat {
fn from(n: &'a StructPat) -> &'a Pat {
Pat::cast(&n.syntax).unwrap()
}
}
impl<'a> From<&'a TupleStructPat> for &'a Pat {
fn from(n: &'a TupleStructPat) -> &'a Pat {
Pat::cast(&n.syntax).unwrap()
}
}
impl<'a> From<&'a TuplePat> for &'a Pat {
fn from(n: &'a TuplePat) -> &'a Pat {
Pat::cast(&n.syntax).unwrap()
}
}
impl<'a> From<&'a SlicePat> for &'a Pat {
fn from(n: &'a SlicePat) -> &'a Pat {
Pat::cast(&n.syntax).unwrap()
}
}
impl<'a> From<&'a RangePat> for &'a Pat {
fn from(n: &'a RangePat) -> &'a Pat {
Pat::cast(&n.syntax).unwrap()
}
}
impl<'a> From<&'a LiteralPat> for &'a Pat {
fn from(n: &'a LiteralPat) -> &'a Pat {
Pat::cast(&n.syntax).unwrap()
}
}
impl AstNode for Pat {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
| REF_PAT
| BIND_PAT
| PLACEHOLDER_PAT
| PATH_PAT
| STRUCT_PAT
| TUPLE_STRUCT_PAT
| TUPLE_PAT
| SLICE_PAT
| RANGE_PAT
| LITERAL_PAT => Some(Pat::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for Pat {
type Owned = TreeArc<Pat>;
fn to_owned(&self) -> TreeArc<Pat> { TreeArc::cast(self.syntax.to_owned()) }
}
impl Pat {
pub fn kind(&self) -> PatKind {
match self.syntax.kind() {
REF_PAT => PatKind::RefPat(RefPat::cast(&self.syntax).unwrap()),
BIND_PAT => PatKind::BindPat(BindPat::cast(&self.syntax).unwrap()),
PLACEHOLDER_PAT => PatKind::PlaceholderPat(PlaceholderPat::cast(&self.syntax).unwrap()),
PATH_PAT => PatKind::PathPat(PathPat::cast(&self.syntax).unwrap()),
STRUCT_PAT => PatKind::StructPat(StructPat::cast(&self.syntax).unwrap()),
TUPLE_STRUCT_PAT => PatKind::TupleStructPat(TupleStructPat::cast(&self.syntax).unwrap()),
TUPLE_PAT => PatKind::TuplePat(TuplePat::cast(&self.syntax).unwrap()),
SLICE_PAT => PatKind::SlicePat(SlicePat::cast(&self.syntax).unwrap()),
RANGE_PAT => PatKind::RangePat(RangePat::cast(&self.syntax).unwrap()),
LITERAL_PAT => PatKind::LiteralPat(LiteralPat::cast(&self.syntax).unwrap()),
_ => unreachable!(),
}
}
}
impl Pat {}
// Path
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct Path {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for Path {
type Repr = rowan::SyntaxNode;
}
impl AstNode for Path {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
PATH => Some(Path::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for Path {
type Owned = TreeArc<Path>;
fn to_owned(&self) -> TreeArc<Path> { TreeArc::cast(self.syntax.to_owned()) }
}
impl Path {
pub fn segment(&self) -> Option<&PathSegment> {
super::child_opt(self)
}
pub fn qualifier(&self) -> Option<&Path> {
super::child_opt(self)
}
}
// PathExpr
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct PathExpr {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for PathExpr {
type Repr = rowan::SyntaxNode;
}
impl AstNode for PathExpr {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
PATH_EXPR => Some(PathExpr::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for PathExpr {
type Owned = TreeArc<PathExpr>;
fn to_owned(&self) -> TreeArc<PathExpr> { TreeArc::cast(self.syntax.to_owned()) }
}
impl PathExpr {
pub fn path(&self) -> Option<&Path> {
super::child_opt(self)
}
}
// PathPat
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct PathPat {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for PathPat {
type Repr = rowan::SyntaxNode;
}
impl AstNode for PathPat {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
PATH_PAT => Some(PathPat::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for PathPat {
type Owned = TreeArc<PathPat>;
fn to_owned(&self) -> TreeArc<PathPat> { TreeArc::cast(self.syntax.to_owned()) }
}
impl PathPat {
pub fn path(&self) -> Option<&Path> {
super::child_opt(self)
}
}
// PathSegment
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct PathSegment {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for PathSegment {
type Repr = rowan::SyntaxNode;
}
impl AstNode for PathSegment {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
PATH_SEGMENT => Some(PathSegment::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for PathSegment {
type Owned = TreeArc<PathSegment>;
fn to_owned(&self) -> TreeArc<PathSegment> { TreeArc::cast(self.syntax.to_owned()) }
}
impl PathSegment {
pub fn name_ref(&self) -> Option<&NameRef> {
super::child_opt(self)
}
pub fn type_arg_list(&self) -> Option<&TypeArgList> {
super::child_opt(self)
}
}
// PathType
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct PathType {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for PathType {
type Repr = rowan::SyntaxNode;
}
impl AstNode for PathType {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
PATH_TYPE => Some(PathType::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for PathType {
type Owned = TreeArc<PathType>;
fn to_owned(&self) -> TreeArc<PathType> { TreeArc::cast(self.syntax.to_owned()) }
}
impl PathType {
pub fn path(&self) -> Option<&Path> {
super::child_opt(self)
}
}
// PlaceholderPat
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct PlaceholderPat {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for PlaceholderPat {
type Repr = rowan::SyntaxNode;
}
impl AstNode for PlaceholderPat {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
PLACEHOLDER_PAT => Some(PlaceholderPat::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for PlaceholderPat {
type Owned = TreeArc<PlaceholderPat>;
fn to_owned(&self) -> TreeArc<PlaceholderPat> { TreeArc::cast(self.syntax.to_owned()) }
}
impl PlaceholderPat {}
// PlaceholderType
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct PlaceholderType {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for PlaceholderType {
type Repr = rowan::SyntaxNode;
}
impl AstNode for PlaceholderType {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
PLACEHOLDER_TYPE => Some(PlaceholderType::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for PlaceholderType {
type Owned = TreeArc<PlaceholderType>;
fn to_owned(&self) -> TreeArc<PlaceholderType> { TreeArc::cast(self.syntax.to_owned()) }
}
impl PlaceholderType {}
// PointerType
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct PointerType {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for PointerType {
type Repr = rowan::SyntaxNode;
}
impl AstNode for PointerType {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
POINTER_TYPE => Some(PointerType::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for PointerType {
type Owned = TreeArc<PointerType>;
fn to_owned(&self) -> TreeArc<PointerType> { TreeArc::cast(self.syntax.to_owned()) }
}
impl PointerType {
pub fn type_ref(&self) -> Option<&TypeRef> {
super::child_opt(self)
}
}
// PosFieldDef
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct PosFieldDef {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for PosFieldDef {
type Repr = rowan::SyntaxNode;
}
impl AstNode for PosFieldDef {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
POS_FIELD_DEF => Some(PosFieldDef::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for PosFieldDef {
type Owned = TreeArc<PosFieldDef>;
fn to_owned(&self) -> TreeArc<PosFieldDef> { TreeArc::cast(self.syntax.to_owned()) }
}
impl ast::VisibilityOwner for PosFieldDef {}
impl ast::AttrsOwner for PosFieldDef {}
impl PosFieldDef {
pub fn type_ref(&self) -> Option<&TypeRef> {
super::child_opt(self)
}
}
// PosFieldDefList
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct PosFieldDefList {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for PosFieldDefList {
type Repr = rowan::SyntaxNode;
}
impl AstNode for PosFieldDefList {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
POS_FIELD_DEF_LIST => Some(PosFieldDefList::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for PosFieldDefList {
type Owned = TreeArc<PosFieldDefList>;
fn to_owned(&self) -> TreeArc<PosFieldDefList> { TreeArc::cast(self.syntax.to_owned()) }
}
impl PosFieldDefList {
pub fn fields(&self) -> impl Iterator<Item = &PosFieldDef> {
super::children(self)
}
}
// PrefixExpr
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct PrefixExpr {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for PrefixExpr {
type Repr = rowan::SyntaxNode;
}
impl AstNode for PrefixExpr {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
PREFIX_EXPR => Some(PrefixExpr::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for PrefixExpr {
type Owned = TreeArc<PrefixExpr>;
fn to_owned(&self) -> TreeArc<PrefixExpr> { TreeArc::cast(self.syntax.to_owned()) }
}
impl PrefixExpr {
pub fn expr(&self) -> Option<&Expr> {
super::child_opt(self)
}
}
// RangeExpr
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct RangeExpr {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for RangeExpr {
type Repr = rowan::SyntaxNode;
}
impl AstNode for RangeExpr {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
RANGE_EXPR => Some(RangeExpr::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for RangeExpr {
type Owned = TreeArc<RangeExpr>;
fn to_owned(&self) -> TreeArc<RangeExpr> { TreeArc::cast(self.syntax.to_owned()) }
}
impl RangeExpr {}
// RangePat
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct RangePat {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for RangePat {
type Repr = rowan::SyntaxNode;
}
impl AstNode for RangePat {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
RANGE_PAT => Some(RangePat::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for RangePat {
type Owned = TreeArc<RangePat>;
fn to_owned(&self) -> TreeArc<RangePat> { TreeArc::cast(self.syntax.to_owned()) }
}
impl RangePat {}
// RefExpr
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct RefExpr {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for RefExpr {
type Repr = rowan::SyntaxNode;
}
impl AstNode for RefExpr {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
REF_EXPR => Some(RefExpr::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for RefExpr {
type Owned = TreeArc<RefExpr>;
fn to_owned(&self) -> TreeArc<RefExpr> { TreeArc::cast(self.syntax.to_owned()) }
}
impl RefExpr {
pub fn expr(&self) -> Option<&Expr> {
super::child_opt(self)
}
}
// RefPat
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct RefPat {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for RefPat {
type Repr = rowan::SyntaxNode;
}
impl AstNode for RefPat {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
REF_PAT => Some(RefPat::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for RefPat {
type Owned = TreeArc<RefPat>;
fn to_owned(&self) -> TreeArc<RefPat> { TreeArc::cast(self.syntax.to_owned()) }
}
impl RefPat {
pub fn pat(&self) -> Option<&Pat> {
super::child_opt(self)
}
}
// ReferenceType
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct ReferenceType {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for ReferenceType {
type Repr = rowan::SyntaxNode;
}
impl AstNode for ReferenceType {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
REFERENCE_TYPE => Some(ReferenceType::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for ReferenceType {
type Owned = TreeArc<ReferenceType>;
fn to_owned(&self) -> TreeArc<ReferenceType> { TreeArc::cast(self.syntax.to_owned()) }
}
impl ReferenceType {
pub fn type_ref(&self) -> Option<&TypeRef> {
super::child_opt(self)
}
}
// RetType
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct RetType {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for RetType {
type Repr = rowan::SyntaxNode;
}
impl AstNode for RetType {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
RET_TYPE => Some(RetType::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for RetType {
type Owned = TreeArc<RetType>;
fn to_owned(&self) -> TreeArc<RetType> { TreeArc::cast(self.syntax.to_owned()) }
}
impl RetType {
pub fn type_ref(&self) -> Option<&TypeRef> {
super::child_opt(self)
}
}
// ReturnExpr
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct ReturnExpr {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for ReturnExpr {
type Repr = rowan::SyntaxNode;
}
impl AstNode for ReturnExpr {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
RETURN_EXPR => Some(ReturnExpr::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for ReturnExpr {
type Owned = TreeArc<ReturnExpr>;
fn to_owned(&self) -> TreeArc<ReturnExpr> { TreeArc::cast(self.syntax.to_owned()) }
}
impl ReturnExpr {
pub fn expr(&self) -> Option<&Expr> {
super::child_opt(self)
}
}
// SelfParam
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct SelfParam {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for SelfParam {
type Repr = rowan::SyntaxNode;
}
impl AstNode for SelfParam {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
SELF_PARAM => Some(SelfParam::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for SelfParam {
type Owned = TreeArc<SelfParam>;
fn to_owned(&self) -> TreeArc<SelfParam> { TreeArc::cast(self.syntax.to_owned()) }
}
impl ast::TypeAscriptionOwner for SelfParam {}
impl SelfParam {}
// SlicePat
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct SlicePat {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for SlicePat {
type Repr = rowan::SyntaxNode;
}
impl AstNode for SlicePat {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
SLICE_PAT => Some(SlicePat::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for SlicePat {
type Owned = TreeArc<SlicePat>;
fn to_owned(&self) -> TreeArc<SlicePat> { TreeArc::cast(self.syntax.to_owned()) }
}
impl SlicePat {}
// SliceType
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct SliceType {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for SliceType {
type Repr = rowan::SyntaxNode;
}
impl AstNode for SliceType {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
SLICE_TYPE => Some(SliceType::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for SliceType {
type Owned = TreeArc<SliceType>;
fn to_owned(&self) -> TreeArc<SliceType> { TreeArc::cast(self.syntax.to_owned()) }
}
impl SliceType {
pub fn type_ref(&self) -> Option<&TypeRef> {
super::child_opt(self)
}
}
// SourceFile
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct SourceFile {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for SourceFile {
type Repr = rowan::SyntaxNode;
}
impl AstNode for SourceFile {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
SOURCE_FILE => Some(SourceFile::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for SourceFile {
type Owned = TreeArc<SourceFile>;
fn to_owned(&self) -> TreeArc<SourceFile> { TreeArc::cast(self.syntax.to_owned()) }
}
impl ast::ModuleItemOwner for SourceFile {}
impl ast::FnDefOwner for SourceFile {}
impl SourceFile {
pub fn modules(&self) -> impl Iterator<Item = &Module> {
super::children(self)
}
}
// StaticDef
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct StaticDef {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for StaticDef {
type Repr = rowan::SyntaxNode;
}
impl AstNode for StaticDef {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
STATIC_DEF => Some(StaticDef::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for StaticDef {
type Owned = TreeArc<StaticDef>;
fn to_owned(&self) -> TreeArc<StaticDef> { TreeArc::cast(self.syntax.to_owned()) }
}
impl ast::VisibilityOwner for StaticDef {}
impl ast::NameOwner for StaticDef {}
impl ast::TypeParamsOwner for StaticDef {}
impl ast::AttrsOwner for StaticDef {}
impl ast::DocCommentsOwner for StaticDef {}
impl ast::TypeAscriptionOwner for StaticDef {}
impl StaticDef {
pub fn body(&self) -> Option<&Expr> {
super::child_opt(self)
}
}
// Stmt
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct Stmt {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for Stmt {
type Repr = rowan::SyntaxNode;
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum StmtKind<'a> {
ExprStmt(&'a ExprStmt),
LetStmt(&'a LetStmt),
}
impl<'a> From<&'a ExprStmt> for &'a Stmt {
fn from(n: &'a ExprStmt) -> &'a Stmt {
Stmt::cast(&n.syntax).unwrap()
}
}
impl<'a> From<&'a LetStmt> for &'a Stmt {
fn from(n: &'a LetStmt) -> &'a Stmt {
Stmt::cast(&n.syntax).unwrap()
}
}
impl AstNode for Stmt {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
| EXPR_STMT
| LET_STMT => Some(Stmt::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for Stmt {
type Owned = TreeArc<Stmt>;
fn to_owned(&self) -> TreeArc<Stmt> { TreeArc::cast(self.syntax.to_owned()) }
}
impl Stmt {
pub fn kind(&self) -> StmtKind {
match self.syntax.kind() {
EXPR_STMT => StmtKind::ExprStmt(ExprStmt::cast(&self.syntax).unwrap()),
LET_STMT => StmtKind::LetStmt(LetStmt::cast(&self.syntax).unwrap()),
_ => unreachable!(),
}
}
}
impl Stmt {}
// StructDef
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct StructDef {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for StructDef {
type Repr = rowan::SyntaxNode;
}
impl AstNode for StructDef {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
STRUCT_DEF => Some(StructDef::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for StructDef {
type Owned = TreeArc<StructDef>;
fn to_owned(&self) -> TreeArc<StructDef> { TreeArc::cast(self.syntax.to_owned()) }
}
impl ast::VisibilityOwner for StructDef {}
impl ast::NameOwner for StructDef {}
impl ast::TypeParamsOwner for StructDef {}
impl ast::AttrsOwner for StructDef {}
impl ast::DocCommentsOwner for StructDef {}
impl StructDef {}
// StructLit
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct StructLit {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for StructLit {
type Repr = rowan::SyntaxNode;
}
impl AstNode for StructLit {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
STRUCT_LIT => Some(StructLit::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for StructLit {
type Owned = TreeArc<StructLit>;
fn to_owned(&self) -> TreeArc<StructLit> { TreeArc::cast(self.syntax.to_owned()) }
}
impl StructLit {
pub fn path(&self) -> Option<&Path> {
super::child_opt(self)
}
pub fn named_field_list(&self) -> Option<&NamedFieldList> {
super::child_opt(self)
}
pub fn spread(&self) -> Option<&Expr> {
super::child_opt(self)
}
}
// StructPat
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct StructPat {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for StructPat {
type Repr = rowan::SyntaxNode;
}
impl AstNode for StructPat {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
STRUCT_PAT => Some(StructPat::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for StructPat {
type Owned = TreeArc<StructPat>;
fn to_owned(&self) -> TreeArc<StructPat> { TreeArc::cast(self.syntax.to_owned()) }
}
impl StructPat {
pub fn field_pat_list(&self) -> Option<&FieldPatList> {
super::child_opt(self)
}
pub fn path(&self) -> Option<&Path> {
super::child_opt(self)
}
}
// TokenTree
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct TokenTree {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for TokenTree {
type Repr = rowan::SyntaxNode;
}
impl AstNode for TokenTree {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
TOKEN_TREE => Some(TokenTree::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for TokenTree {
type Owned = TreeArc<TokenTree>;
fn to_owned(&self) -> TreeArc<TokenTree> { TreeArc::cast(self.syntax.to_owned()) }
}
impl TokenTree {}
// TraitDef
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct TraitDef {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for TraitDef {
type Repr = rowan::SyntaxNode;
}
impl AstNode for TraitDef {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
TRAIT_DEF => Some(TraitDef::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for TraitDef {
type Owned = TreeArc<TraitDef>;
fn to_owned(&self) -> TreeArc<TraitDef> { TreeArc::cast(self.syntax.to_owned()) }
}
impl ast::VisibilityOwner for TraitDef {}
impl ast::NameOwner for TraitDef {}
impl ast::AttrsOwner for TraitDef {}
impl ast::DocCommentsOwner for TraitDef {}
impl ast::TypeParamsOwner for TraitDef {}
impl ast::TypeBoundsOwner for TraitDef {}
impl TraitDef {
pub fn item_list(&self) -> Option<&ItemList> {
super::child_opt(self)
}
}
// TryExpr
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct TryExpr {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for TryExpr {
type Repr = rowan::SyntaxNode;
}
impl AstNode for TryExpr {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
TRY_EXPR => Some(TryExpr::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for TryExpr {
type Owned = TreeArc<TryExpr>;
fn to_owned(&self) -> TreeArc<TryExpr> { TreeArc::cast(self.syntax.to_owned()) }
}
impl TryExpr {
pub fn expr(&self) -> Option<&Expr> {
super::child_opt(self)
}
}
// TupleExpr
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct TupleExpr {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for TupleExpr {
type Repr = rowan::SyntaxNode;
}
impl AstNode for TupleExpr {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
TUPLE_EXPR => Some(TupleExpr::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for TupleExpr {
type Owned = TreeArc<TupleExpr>;
fn to_owned(&self) -> TreeArc<TupleExpr> { TreeArc::cast(self.syntax.to_owned()) }
}
impl TupleExpr {
pub fn exprs(&self) -> impl Iterator<Item = &Expr> {
super::children(self)
}
}
// TuplePat
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct TuplePat {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for TuplePat {
type Repr = rowan::SyntaxNode;
}
impl AstNode for TuplePat {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
TUPLE_PAT => Some(TuplePat::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for TuplePat {
type Owned = TreeArc<TuplePat>;
fn to_owned(&self) -> TreeArc<TuplePat> { TreeArc::cast(self.syntax.to_owned()) }
}
impl TuplePat {
pub fn args(&self) -> impl Iterator<Item = &Pat> {
super::children(self)
}
}
// TupleStructPat
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct TupleStructPat {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for TupleStructPat {
type Repr = rowan::SyntaxNode;
}
impl AstNode for TupleStructPat {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
TUPLE_STRUCT_PAT => Some(TupleStructPat::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for TupleStructPat {
type Owned = TreeArc<TupleStructPat>;
fn to_owned(&self) -> TreeArc<TupleStructPat> { TreeArc::cast(self.syntax.to_owned()) }
}
impl TupleStructPat {
pub fn args(&self) -> impl Iterator<Item = &Pat> {
super::children(self)
}
pub fn path(&self) -> Option<&Path> {
super::child_opt(self)
}
}
// TupleType
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct TupleType {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for TupleType {
type Repr = rowan::SyntaxNode;
}
impl AstNode for TupleType {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
TUPLE_TYPE => Some(TupleType::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for TupleType {
type Owned = TreeArc<TupleType>;
fn to_owned(&self) -> TreeArc<TupleType> { TreeArc::cast(self.syntax.to_owned()) }
}
impl TupleType {
pub fn fields(&self) -> impl Iterator<Item = &TypeRef> {
super::children(self)
}
}
// TypeAliasDef
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct TypeAliasDef {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for TypeAliasDef {
type Repr = rowan::SyntaxNode;
}
impl AstNode for TypeAliasDef {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
TYPE_ALIAS_DEF => Some(TypeAliasDef::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for TypeAliasDef {
type Owned = TreeArc<TypeAliasDef>;
fn to_owned(&self) -> TreeArc<TypeAliasDef> { TreeArc::cast(self.syntax.to_owned()) }
}
impl ast::VisibilityOwner for TypeAliasDef {}
impl ast::NameOwner for TypeAliasDef {}
impl ast::TypeParamsOwner for TypeAliasDef {}
impl ast::AttrsOwner for TypeAliasDef {}
impl ast::DocCommentsOwner for TypeAliasDef {}
impl ast::TypeBoundsOwner for TypeAliasDef {}
impl TypeAliasDef {
pub fn type_ref(&self) -> Option<&TypeRef> {
super::child_opt(self)
}
}
// TypeArg
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct TypeArg {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for TypeArg {
type Repr = rowan::SyntaxNode;
}
impl AstNode for TypeArg {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
TYPE_ARG => Some(TypeArg::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for TypeArg {
type Owned = TreeArc<TypeArg>;
fn to_owned(&self) -> TreeArc<TypeArg> { TreeArc::cast(self.syntax.to_owned()) }
}
impl TypeArg {
pub fn type_ref(&self) -> Option<&TypeRef> {
super::child_opt(self)
}
}
// TypeArgList
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct TypeArgList {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for TypeArgList {
type Repr = rowan::SyntaxNode;
}
impl AstNode for TypeArgList {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
TYPE_ARG_LIST => Some(TypeArgList::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for TypeArgList {
type Owned = TreeArc<TypeArgList>;
fn to_owned(&self) -> TreeArc<TypeArgList> { TreeArc::cast(self.syntax.to_owned()) }
}
impl TypeArgList {
pub fn type_args(&self) -> impl Iterator<Item = &TypeArg> {
super::children(self)
}
pub fn lifetime_args(&self) -> impl Iterator<Item = &LifetimeArg> {
super::children(self)
}
pub fn assoc_type_args(&self) -> impl Iterator<Item = &AssocTypeArg> {
super::children(self)
}
}
// TypeBound
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct TypeBound {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for TypeBound {
type Repr = rowan::SyntaxNode;
}
impl AstNode for TypeBound {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
TYPE_BOUND => Some(TypeBound::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for TypeBound {
type Owned = TreeArc<TypeBound>;
fn to_owned(&self) -> TreeArc<TypeBound> { TreeArc::cast(self.syntax.to_owned()) }
}
impl TypeBound {
pub fn type_ref(&self) -> Option<&TypeRef> {
super::child_opt(self)
}
}
// TypeBoundList
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct TypeBoundList {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for TypeBoundList {
type Repr = rowan::SyntaxNode;
}
impl AstNode for TypeBoundList {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
TYPE_BOUND_LIST => Some(TypeBoundList::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for TypeBoundList {
type Owned = TreeArc<TypeBoundList>;
fn to_owned(&self) -> TreeArc<TypeBoundList> { TreeArc::cast(self.syntax.to_owned()) }
}
impl TypeBoundList {
pub fn bounds(&self) -> impl Iterator<Item = &TypeBound> {
super::children(self)
}
}
// TypeParam
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct TypeParam {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for TypeParam {
type Repr = rowan::SyntaxNode;
}
impl AstNode for TypeParam {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
TYPE_PARAM => Some(TypeParam::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for TypeParam {
type Owned = TreeArc<TypeParam>;
fn to_owned(&self) -> TreeArc<TypeParam> { TreeArc::cast(self.syntax.to_owned()) }
}
impl ast::NameOwner for TypeParam {}
impl ast::AttrsOwner for TypeParam {}
impl ast::TypeBoundsOwner for TypeParam {}
impl TypeParam {}
// TypeParamList
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct TypeParamList {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for TypeParamList {
type Repr = rowan::SyntaxNode;
}
impl AstNode for TypeParamList {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
TYPE_PARAM_LIST => Some(TypeParamList::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for TypeParamList {
type Owned = TreeArc<TypeParamList>;
fn to_owned(&self) -> TreeArc<TypeParamList> { TreeArc::cast(self.syntax.to_owned()) }
}
impl TypeParamList {
pub fn type_params(&self) -> impl Iterator<Item = &TypeParam> {
super::children(self)
}
pub fn lifetime_params(&self) -> impl Iterator<Item = &LifetimeParam> {
super::children(self)
}
}
// TypeRef
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct TypeRef {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for TypeRef {
type Repr = rowan::SyntaxNode;
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum TypeRefKind<'a> {
ParenType(&'a ParenType),
TupleType(&'a TupleType),
NeverType(&'a NeverType),
PathType(&'a PathType),
PointerType(&'a PointerType),
ArrayType(&'a ArrayType),
SliceType(&'a SliceType),
ReferenceType(&'a ReferenceType),
PlaceholderType(&'a PlaceholderType),
FnPointerType(&'a FnPointerType),
ForType(&'a ForType),
ImplTraitType(&'a ImplTraitType),
DynTraitType(&'a DynTraitType),
}
impl<'a> From<&'a ParenType> for &'a TypeRef {
fn from(n: &'a ParenType) -> &'a TypeRef {
TypeRef::cast(&n.syntax).unwrap()
}
}
impl<'a> From<&'a TupleType> for &'a TypeRef {
fn from(n: &'a TupleType) -> &'a TypeRef {
TypeRef::cast(&n.syntax).unwrap()
}
}
impl<'a> From<&'a NeverType> for &'a TypeRef {
fn from(n: &'a NeverType) -> &'a TypeRef {
TypeRef::cast(&n.syntax).unwrap()
}
}
impl<'a> From<&'a PathType> for &'a TypeRef {
fn from(n: &'a PathType) -> &'a TypeRef {
TypeRef::cast(&n.syntax).unwrap()
}
}
impl<'a> From<&'a PointerType> for &'a TypeRef {
fn from(n: &'a PointerType) -> &'a TypeRef {
TypeRef::cast(&n.syntax).unwrap()
}
}
impl<'a> From<&'a ArrayType> for &'a TypeRef {
fn from(n: &'a ArrayType) -> &'a TypeRef {
TypeRef::cast(&n.syntax).unwrap()
}
}
impl<'a> From<&'a SliceType> for &'a TypeRef {
fn from(n: &'a SliceType) -> &'a TypeRef {
TypeRef::cast(&n.syntax).unwrap()
}
}
impl<'a> From<&'a ReferenceType> for &'a TypeRef {
fn from(n: &'a ReferenceType) -> &'a TypeRef {
TypeRef::cast(&n.syntax).unwrap()
}
}
impl<'a> From<&'a PlaceholderType> for &'a TypeRef {
fn from(n: &'a PlaceholderType) -> &'a TypeRef {
TypeRef::cast(&n.syntax).unwrap()
}
}
impl<'a> From<&'a FnPointerType> for &'a TypeRef {
fn from(n: &'a FnPointerType) -> &'a TypeRef {
TypeRef::cast(&n.syntax).unwrap()
}
}
impl<'a> From<&'a ForType> for &'a TypeRef {
fn from(n: &'a ForType) -> &'a TypeRef {
TypeRef::cast(&n.syntax).unwrap()
}
}
impl<'a> From<&'a ImplTraitType> for &'a TypeRef {
fn from(n: &'a ImplTraitType) -> &'a TypeRef {
TypeRef::cast(&n.syntax).unwrap()
}
}
impl<'a> From<&'a DynTraitType> for &'a TypeRef {
fn from(n: &'a DynTraitType) -> &'a TypeRef {
TypeRef::cast(&n.syntax).unwrap()
}
}
impl AstNode for TypeRef {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
| PAREN_TYPE
| TUPLE_TYPE
| NEVER_TYPE
| PATH_TYPE
| POINTER_TYPE
| ARRAY_TYPE
| SLICE_TYPE
| REFERENCE_TYPE
| PLACEHOLDER_TYPE
| FN_POINTER_TYPE
| FOR_TYPE
| IMPL_TRAIT_TYPE
| DYN_TRAIT_TYPE => Some(TypeRef::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for TypeRef {
type Owned = TreeArc<TypeRef>;
fn to_owned(&self) -> TreeArc<TypeRef> { TreeArc::cast(self.syntax.to_owned()) }
}
impl TypeRef {
pub fn kind(&self) -> TypeRefKind {
match self.syntax.kind() {
PAREN_TYPE => TypeRefKind::ParenType(ParenType::cast(&self.syntax).unwrap()),
TUPLE_TYPE => TypeRefKind::TupleType(TupleType::cast(&self.syntax).unwrap()),
NEVER_TYPE => TypeRefKind::NeverType(NeverType::cast(&self.syntax).unwrap()),
PATH_TYPE => TypeRefKind::PathType(PathType::cast(&self.syntax).unwrap()),
POINTER_TYPE => TypeRefKind::PointerType(PointerType::cast(&self.syntax).unwrap()),
ARRAY_TYPE => TypeRefKind::ArrayType(ArrayType::cast(&self.syntax).unwrap()),
SLICE_TYPE => TypeRefKind::SliceType(SliceType::cast(&self.syntax).unwrap()),
REFERENCE_TYPE => TypeRefKind::ReferenceType(ReferenceType::cast(&self.syntax).unwrap()),
PLACEHOLDER_TYPE => TypeRefKind::PlaceholderType(PlaceholderType::cast(&self.syntax).unwrap()),
FN_POINTER_TYPE => TypeRefKind::FnPointerType(FnPointerType::cast(&self.syntax).unwrap()),
FOR_TYPE => TypeRefKind::ForType(ForType::cast(&self.syntax).unwrap()),
IMPL_TRAIT_TYPE => TypeRefKind::ImplTraitType(ImplTraitType::cast(&self.syntax).unwrap()),
DYN_TRAIT_TYPE => TypeRefKind::DynTraitType(DynTraitType::cast(&self.syntax).unwrap()),
_ => unreachable!(),
}
}
}
impl TypeRef {}
// UseItem
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct UseItem {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for UseItem {
type Repr = rowan::SyntaxNode;
}
impl AstNode for UseItem {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
USE_ITEM => Some(UseItem::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for UseItem {
type Owned = TreeArc<UseItem>;
fn to_owned(&self) -> TreeArc<UseItem> { TreeArc::cast(self.syntax.to_owned()) }
}
impl ast::AttrsOwner for UseItem {}
impl UseItem {
pub fn use_tree(&self) -> Option<&UseTree> {
super::child_opt(self)
}
}
// UseTree
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct UseTree {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for UseTree {
type Repr = rowan::SyntaxNode;
}
impl AstNode for UseTree {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
USE_TREE => Some(UseTree::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for UseTree {
type Owned = TreeArc<UseTree>;
fn to_owned(&self) -> TreeArc<UseTree> { TreeArc::cast(self.syntax.to_owned()) }
}
impl UseTree {
pub fn path(&self) -> Option<&Path> {
super::child_opt(self)
}
pub fn use_tree_list(&self) -> Option<&UseTreeList> {
super::child_opt(self)
}
pub fn alias(&self) -> Option<&Alias> {
super::child_opt(self)
}
}
// UseTreeList
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct UseTreeList {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for UseTreeList {
type Repr = rowan::SyntaxNode;
}
impl AstNode for UseTreeList {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
USE_TREE_LIST => Some(UseTreeList::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for UseTreeList {
type Owned = TreeArc<UseTreeList>;
fn to_owned(&self) -> TreeArc<UseTreeList> { TreeArc::cast(self.syntax.to_owned()) }
}
impl UseTreeList {
pub fn use_trees(&self) -> impl Iterator<Item = &UseTree> {
super::children(self)
}
}
// Visibility
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct Visibility {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for Visibility {
type Repr = rowan::SyntaxNode;
}
impl AstNode for Visibility {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
VISIBILITY => Some(Visibility::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for Visibility {
type Owned = TreeArc<Visibility>;
fn to_owned(&self) -> TreeArc<Visibility> { TreeArc::cast(self.syntax.to_owned()) }
}
impl Visibility {}
// WhereClause
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct WhereClause {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for WhereClause {
type Repr = rowan::SyntaxNode;
}
impl AstNode for WhereClause {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
WHERE_CLAUSE => Some(WhereClause::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for WhereClause {
type Owned = TreeArc<WhereClause>;
fn to_owned(&self) -> TreeArc<WhereClause> { TreeArc::cast(self.syntax.to_owned()) }
}
impl WhereClause {
pub fn predicates(&self) -> impl Iterator<Item = &WherePred> {
super::children(self)
}
}
// WherePred
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct WherePred {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for WherePred {
type Repr = rowan::SyntaxNode;
}
impl AstNode for WherePred {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
WHERE_PRED => Some(WherePred::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for WherePred {
type Owned = TreeArc<WherePred>;
fn to_owned(&self) -> TreeArc<WherePred> { TreeArc::cast(self.syntax.to_owned()) }
}
impl ast::TypeBoundsOwner for WherePred {}
impl WherePred {
pub fn type_ref(&self) -> Option<&TypeRef> {
super::child_opt(self)
}
}
// WhileExpr
#[derive(Debug, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct WhileExpr {
pub(crate) syntax: SyntaxNode,
}
unsafe impl TransparentNewType for WhileExpr {
type Repr = rowan::SyntaxNode;
}
impl AstNode for WhileExpr {
fn cast(syntax: &SyntaxNode) -> Option<&Self> {
match syntax.kind() {
WHILE_EXPR => Some(WhileExpr::from_repr(syntax.into_repr())),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode { &self.syntax }
}
impl ToOwned for WhileExpr {
type Owned = TreeArc<WhileExpr>;
fn to_owned(&self) -> TreeArc<WhileExpr> { TreeArc::cast(self.syntax.to_owned()) }
}
impl ast::LoopBodyOwner for WhileExpr {}
impl WhileExpr {
pub fn condition(&self) -> Option<&Condition> {
super::child_opt(self)
}
}