From 39f50e7bd7a7aa573e6777ca764c020f93aeb205 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Sun, 18 Aug 2019 23:36:22 +0300 Subject: use new quote-generated ast --- crates/ra_syntax/src/ast/generated.rs | 2596 ++++++++++++++++++--------------- 1 file changed, 1408 insertions(+), 1188 deletions(-) (limited to 'crates/ra_syntax/src/ast/generated.rs') diff --git a/crates/ra_syntax/src/ast/generated.rs b/crates/ra_syntax/src/ast/generated.rs index f322e1d84..016668380 100644 --- a/crates/ra_syntax/src/ast/generated.rs +++ b/crates/ra_syntax/src/ast/generated.rs @@ -1,25 +1,14 @@ -// 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)] +// Generated file, do not edit by hand, see `crate/ra_tools/src/codegen` use crate::{ - SyntaxNode, SyntaxKind::{self, *}, - ast::{self, AstNode}, + ast::{self, AstChildren, AstNode}, + SyntaxKind::{self, *}, + SyntaxNode, }; - -// Alias #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct Alias { pub(crate) syntax: SyntaxNode, } - impl AstNode for Alias { fn can_cast(kind: SyntaxKind) -> bool { match kind { @@ -28,21 +17,22 @@ impl AstNode for Alias { } } fn cast(syntax: SyntaxNode) -> Option { - if Self::can_cast(syntax.kind()) { Some(Alias { syntax }) } else { None } + if Self::can_cast(syntax.kind()) { + Some(Self { syntax }) + } else { + None + } + } + fn syntax(&self) -> &SyntaxNode { + &self.syntax } - fn syntax(&self) -> &SyntaxNode { &self.syntax } } - - impl ast::NameOwner for Alias {} impl Alias {} - -// ArgList #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct ArgList { pub(crate) syntax: SyntaxNode, } - impl AstNode for ArgList { fn can_cast(kind: SyntaxKind) -> bool { match kind { @@ -51,24 +41,25 @@ impl AstNode for ArgList { } } fn cast(syntax: SyntaxNode) -> Option { - if Self::can_cast(syntax.kind()) { Some(ArgList { syntax }) } else { None } + if Self::can_cast(syntax.kind()) { + Some(Self { syntax }) + } else { + None + } + } + fn syntax(&self) -> &SyntaxNode { + &self.syntax } - fn syntax(&self) -> &SyntaxNode { &self.syntax } } - - impl ArgList { - pub fn args(&self) -> impl Iterator { - super::children(self) + pub fn args(&self) -> AstChildren { + AstChildren::new(&self.syntax) } } - -// ArrayExpr #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct ArrayExpr { pub(crate) syntax: SyntaxNode, } - impl AstNode for ArrayExpr { fn can_cast(kind: SyntaxKind) -> bool { match kind { @@ -77,24 +68,25 @@ impl AstNode for ArrayExpr { } } fn cast(syntax: SyntaxNode) -> Option { - if Self::can_cast(syntax.kind()) { Some(ArrayExpr { syntax }) } else { None } + if Self::can_cast(syntax.kind()) { + Some(Self { syntax }) + } else { + None + } + } + fn syntax(&self) -> &SyntaxNode { + &self.syntax } - fn syntax(&self) -> &SyntaxNode { &self.syntax } } - - impl ArrayExpr { - pub fn exprs(&self) -> impl Iterator { - super::children(self) + pub fn exprs(&self) -> AstChildren { + AstChildren::new(&self.syntax) } } - -// ArrayType #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct ArrayType { pub(crate) syntax: SyntaxNode, } - impl AstNode for ArrayType { fn can_cast(kind: SyntaxKind) -> bool { match kind { @@ -103,28 +95,28 @@ impl AstNode for ArrayType { } } fn cast(syntax: SyntaxNode) -> Option { - if Self::can_cast(syntax.kind()) { Some(ArrayType { syntax }) } else { None } + if Self::can_cast(syntax.kind()) { + Some(Self { syntax }) + } else { + None + } + } + fn syntax(&self) -> &SyntaxNode { + &self.syntax } - fn syntax(&self) -> &SyntaxNode { &self.syntax } } - - impl ArrayType { pub fn type_ref(&self) -> Option { - super::child_opt(self) + AstChildren::new(&self.syntax).next() } - pub fn expr(&self) -> Option { - super::child_opt(self) + AstChildren::new(&self.syntax).next() } } - -// AssocTypeArg #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct AssocTypeArg { pub(crate) syntax: SyntaxNode, } - impl AstNode for AssocTypeArg { fn can_cast(kind: SyntaxKind) -> bool { match kind { @@ -133,28 +125,28 @@ impl AstNode for AssocTypeArg { } } fn cast(syntax: SyntaxNode) -> Option { - if Self::can_cast(syntax.kind()) { Some(AssocTypeArg { syntax }) } else { None } + if Self::can_cast(syntax.kind()) { + Some(Self { syntax }) + } else { + None + } + } + fn syntax(&self) -> &SyntaxNode { + &self.syntax } - fn syntax(&self) -> &SyntaxNode { &self.syntax } } - - impl AssocTypeArg { pub fn name_ref(&self) -> Option { - super::child_opt(self) + AstChildren::new(&self.syntax).next() } - pub fn type_ref(&self) -> Option { - super::child_opt(self) + AstChildren::new(&self.syntax).next() } } - -// Attr #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct Attr { pub(crate) syntax: SyntaxNode, } - impl AstNode for Attr { fn can_cast(kind: SyntaxKind) -> bool { match kind { @@ -163,24 +155,25 @@ impl AstNode for Attr { } } fn cast(syntax: SyntaxNode) -> Option { - if Self::can_cast(syntax.kind()) { Some(Attr { syntax }) } else { None } + if Self::can_cast(syntax.kind()) { + Some(Self { syntax }) + } else { + None + } + } + fn syntax(&self) -> &SyntaxNode { + &self.syntax } - fn syntax(&self) -> &SyntaxNode { &self.syntax } } - - impl Attr { pub fn value(&self) -> Option { - super::child_opt(self) + AstChildren::new(&self.syntax).next() } } - -// AwaitExpr #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct AwaitExpr { pub(crate) syntax: SyntaxNode, } - impl AstNode for AwaitExpr { fn can_cast(kind: SyntaxKind) -> bool { match kind { @@ -189,24 +182,25 @@ impl AstNode for AwaitExpr { } } fn cast(syntax: SyntaxNode) -> Option { - if Self::can_cast(syntax.kind()) { Some(AwaitExpr { syntax }) } else { None } + if Self::can_cast(syntax.kind()) { + Some(Self { syntax }) + } else { + None + } + } + fn syntax(&self) -> &SyntaxNode { + &self.syntax } - fn syntax(&self) -> &SyntaxNode { &self.syntax } } - - impl AwaitExpr { pub fn expr(&self) -> Option { - super::child_opt(self) + AstChildren::new(&self.syntax).next() } } - -// BinExpr #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct BinExpr { pub(crate) syntax: SyntaxNode, } - impl AstNode for BinExpr { fn can_cast(kind: SyntaxKind) -> bool { match kind { @@ -215,20 +209,21 @@ impl AstNode for BinExpr { } } fn cast(syntax: SyntaxNode) -> Option { - if Self::can_cast(syntax.kind()) { Some(BinExpr { syntax }) } else { None } + if Self::can_cast(syntax.kind()) { + Some(Self { syntax }) + } else { + None + } + } + fn syntax(&self) -> &SyntaxNode { + &self.syntax } - fn syntax(&self) -> &SyntaxNode { &self.syntax } } - - impl BinExpr {} - -// BindPat #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct BindPat { pub(crate) syntax: SyntaxNode, } - impl AstNode for BindPat { fn can_cast(kind: SyntaxKind) -> bool { match kind { @@ -237,25 +232,26 @@ impl AstNode for BindPat { } } fn cast(syntax: SyntaxNode) -> Option { - if Self::can_cast(syntax.kind()) { Some(BindPat { syntax }) } else { None } + if Self::can_cast(syntax.kind()) { + Some(Self { syntax }) + } else { + None + } + } + fn syntax(&self) -> &SyntaxNode { + &self.syntax } - fn syntax(&self) -> &SyntaxNode { &self.syntax } } - - impl ast::NameOwner for BindPat {} impl BindPat { pub fn pat(&self) -> Option { - super::child_opt(self) + AstChildren::new(&self.syntax).next() } } - -// Block #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct Block { pub(crate) syntax: SyntaxNode, } - impl AstNode for Block { fn can_cast(kind: SyntaxKind) -> bool { match kind { @@ -264,29 +260,29 @@ impl AstNode for Block { } } fn cast(syntax: SyntaxNode) -> Option { - if Self::can_cast(syntax.kind()) { Some(Block { syntax }) } else { None } + if Self::can_cast(syntax.kind()) { + Some(Self { syntax }) + } else { + None + } + } + fn syntax(&self) -> &SyntaxNode { + &self.syntax } - fn syntax(&self) -> &SyntaxNode { &self.syntax } } - - impl ast::AttrsOwner for Block {} impl Block { - pub fn statements(&self) -> impl Iterator { - super::children(self) + pub fn statements(&self) -> AstChildren { + AstChildren::new(&self.syntax) } - pub fn expr(&self) -> Option { - super::child_opt(self) + AstChildren::new(&self.syntax).next() } } - -// BlockExpr #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct BlockExpr { pub(crate) syntax: SyntaxNode, } - impl AstNode for BlockExpr { fn can_cast(kind: SyntaxKind) -> bool { match kind { @@ -295,24 +291,25 @@ impl AstNode for BlockExpr { } } fn cast(syntax: SyntaxNode) -> Option { - if Self::can_cast(syntax.kind()) { Some(BlockExpr { syntax }) } else { None } + if Self::can_cast(syntax.kind()) { + Some(Self { syntax }) + } else { + None + } + } + fn syntax(&self) -> &SyntaxNode { + &self.syntax } - fn syntax(&self) -> &SyntaxNode { &self.syntax } } - - impl BlockExpr { pub fn block(&self) -> Option { - super::child_opt(self) + AstChildren::new(&self.syntax).next() } } - -// BreakExpr #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct BreakExpr { pub(crate) syntax: SyntaxNode, } - impl AstNode for BreakExpr { fn can_cast(kind: SyntaxKind) -> bool { match kind { @@ -321,24 +318,25 @@ impl AstNode for BreakExpr { } } fn cast(syntax: SyntaxNode) -> Option { - if Self::can_cast(syntax.kind()) { Some(BreakExpr { syntax }) } else { None } + if Self::can_cast(syntax.kind()) { + Some(Self { syntax }) + } else { + None + } + } + fn syntax(&self) -> &SyntaxNode { + &self.syntax } - fn syntax(&self) -> &SyntaxNode { &self.syntax } } - - impl BreakExpr { pub fn expr(&self) -> Option { - super::child_opt(self) + AstChildren::new(&self.syntax).next() } } - -// CallExpr #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct CallExpr { pub(crate) syntax: SyntaxNode, } - impl AstNode for CallExpr { fn can_cast(kind: SyntaxKind) -> bool { match kind { @@ -347,25 +345,26 @@ impl AstNode for CallExpr { } } fn cast(syntax: SyntaxNode) -> Option { - if Self::can_cast(syntax.kind()) { Some(CallExpr { syntax }) } else { None } + if Self::can_cast(syntax.kind()) { + Some(Self { syntax }) + } else { + None + } + } + fn syntax(&self) -> &SyntaxNode { + &self.syntax } - fn syntax(&self) -> &SyntaxNode { &self.syntax } } - - impl ast::ArgListOwner for CallExpr {} impl CallExpr { pub fn expr(&self) -> Option { - super::child_opt(self) + AstChildren::new(&self.syntax).next() } } - -// CastExpr #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct CastExpr { pub(crate) syntax: SyntaxNode, } - impl AstNode for CastExpr { fn can_cast(kind: SyntaxKind) -> bool { match kind { @@ -374,28 +373,28 @@ impl AstNode for CastExpr { } } fn cast(syntax: SyntaxNode) -> Option { - if Self::can_cast(syntax.kind()) { Some(CastExpr { syntax }) } else { None } + if Self::can_cast(syntax.kind()) { + Some(Self { syntax }) + } else { + None + } + } + fn syntax(&self) -> &SyntaxNode { + &self.syntax } - fn syntax(&self) -> &SyntaxNode { &self.syntax } } - - impl CastExpr { pub fn expr(&self) -> Option { - super::child_opt(self) + AstChildren::new(&self.syntax).next() } - pub fn type_ref(&self) -> Option { - super::child_opt(self) + AstChildren::new(&self.syntax).next() } } - -// Condition #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct Condition { pub(crate) syntax: SyntaxNode, } - impl AstNode for Condition { fn can_cast(kind: SyntaxKind) -> bool { match kind { @@ -404,28 +403,28 @@ impl AstNode for Condition { } } fn cast(syntax: SyntaxNode) -> Option { - if Self::can_cast(syntax.kind()) { Some(Condition { syntax }) } else { None } + if Self::can_cast(syntax.kind()) { + Some(Self { syntax }) + } else { + None + } + } + fn syntax(&self) -> &SyntaxNode { + &self.syntax } - fn syntax(&self) -> &SyntaxNode { &self.syntax } } - - impl Condition { pub fn pat(&self) -> Option { - super::child_opt(self) + AstChildren::new(&self.syntax).next() } - pub fn expr(&self) -> Option { - super::child_opt(self) + AstChildren::new(&self.syntax).next() } } - -// ConstDef #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct ConstDef { pub(crate) syntax: SyntaxNode, } - impl AstNode for ConstDef { fn can_cast(kind: SyntaxKind) -> bool { match kind { @@ -434,12 +433,16 @@ impl AstNode for ConstDef { } } fn cast(syntax: SyntaxNode) -> Option { - if Self::can_cast(syntax.kind()) { Some(ConstDef { syntax }) } else { None } + if Self::can_cast(syntax.kind()) { + Some(Self { syntax }) + } else { + None + } + } + fn syntax(&self) -> &SyntaxNode { + &self.syntax } - fn syntax(&self) -> &SyntaxNode { &self.syntax } } - - impl ast::VisibilityOwner for ConstDef {} impl ast::NameOwner for ConstDef {} impl ast::TypeParamsOwner for ConstDef {} @@ -448,16 +451,13 @@ impl ast::DocCommentsOwner for ConstDef {} impl ast::TypeAscriptionOwner for ConstDef {} impl ConstDef { pub fn body(&self) -> Option { - super::child_opt(self) + AstChildren::new(&self.syntax).next() } } - -// ContinueExpr #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct ContinueExpr { pub(crate) syntax: SyntaxNode, } - impl AstNode for ContinueExpr { fn can_cast(kind: SyntaxKind) -> bool { match kind { @@ -466,20 +466,21 @@ impl AstNode for ContinueExpr { } } fn cast(syntax: SyntaxNode) -> Option { - if Self::can_cast(syntax.kind()) { Some(ContinueExpr { syntax }) } else { None } + if Self::can_cast(syntax.kind()) { + Some(Self { syntax }) + } else { + None + } + } + fn syntax(&self) -> &SyntaxNode { + &self.syntax } - fn syntax(&self) -> &SyntaxNode { &self.syntax } } - - impl ContinueExpr {} - -// DynTraitType #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct DynTraitType { pub(crate) syntax: SyntaxNode, } - impl AstNode for DynTraitType { fn can_cast(kind: SyntaxKind) -> bool { match kind { @@ -488,21 +489,22 @@ impl AstNode for DynTraitType { } } fn cast(syntax: SyntaxNode) -> Option { - if Self::can_cast(syntax.kind()) { Some(DynTraitType { syntax }) } else { None } + if Self::can_cast(syntax.kind()) { + Some(Self { syntax }) + } else { + None + } + } + fn syntax(&self) -> &SyntaxNode { + &self.syntax } - fn syntax(&self) -> &SyntaxNode { &self.syntax } } - - impl ast::TypeBoundsOwner for DynTraitType {} impl DynTraitType {} - -// EnumDef #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct EnumDef { pub(crate) syntax: SyntaxNode, } - impl AstNode for EnumDef { fn can_cast(kind: SyntaxKind) -> bool { match kind { @@ -511,12 +513,16 @@ impl AstNode for EnumDef { } } fn cast(syntax: SyntaxNode) -> Option { - if Self::can_cast(syntax.kind()) { Some(EnumDef { syntax }) } else { None } + if Self::can_cast(syntax.kind()) { + Some(Self { syntax }) + } else { + None + } + } + fn syntax(&self) -> &SyntaxNode { + &self.syntax } - fn syntax(&self) -> &SyntaxNode { &self.syntax } } - - impl ast::VisibilityOwner for EnumDef {} impl ast::NameOwner for EnumDef {} impl ast::TypeParamsOwner for EnumDef {} @@ -524,16 +530,13 @@ impl ast::AttrsOwner for EnumDef {} impl ast::DocCommentsOwner for EnumDef {} impl EnumDef { pub fn variant_list(&self) -> Option { - super::child_opt(self) + AstChildren::new(&self.syntax).next() } } - -// EnumVariant #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct EnumVariant { pub(crate) syntax: SyntaxNode, } - impl AstNode for EnumVariant { fn can_cast(kind: SyntaxKind) -> bool { match kind { @@ -542,27 +545,28 @@ impl AstNode for EnumVariant { } } fn cast(syntax: SyntaxNode) -> Option { - if Self::can_cast(syntax.kind()) { Some(EnumVariant { syntax }) } else { None } + if Self::can_cast(syntax.kind()) { + Some(Self { syntax }) + } else { + None + } + } + fn syntax(&self) -> &SyntaxNode { + &self.syntax } - fn syntax(&self) -> &SyntaxNode { &self.syntax } } - - impl ast::NameOwner for EnumVariant {} impl ast::DocCommentsOwner for EnumVariant {} impl ast::AttrsOwner for EnumVariant {} impl EnumVariant { pub fn expr(&self) -> Option { - super::child_opt(self) + AstChildren::new(&self.syntax).next() } } - -// EnumVariantList #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct EnumVariantList { pub(crate) syntax: SyntaxNode, } - impl AstNode for EnumVariantList { fn can_cast(kind: SyntaxKind) -> bool { match kind { @@ -571,39 +575,49 @@ impl AstNode for EnumVariantList { } } fn cast(syntax: SyntaxNode) -> Option { - if Self::can_cast(syntax.kind()) { Some(EnumVariantList { syntax }) } else { None } + if Self::can_cast(syntax.kind()) { + Some(Self { syntax }) + } else { + None + } + } + fn syntax(&self) -> &SyntaxNode { + &self.syntax } - fn syntax(&self) -> &SyntaxNode { &self.syntax } } - - impl EnumVariantList { - pub fn variants(&self) -> impl Iterator { - super::children(self) + pub fn variants(&self) -> AstChildren { + AstChildren::new(&self.syntax) } } - -// Expr #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct Expr { pub(crate) syntax: SyntaxNode, } - impl AstNode for Expr { fn can_cast(kind: SyntaxKind) -> bool { match kind { - | TUPLE_EXPR | ARRAY_EXPR | PAREN_EXPR | PATH_EXPR | LAMBDA_EXPR | IF_EXPR | LOOP_EXPR | FOR_EXPR | WHILE_EXPR | CONTINUE_EXPR | BREAK_EXPR | LABEL | BLOCK_EXPR | RETURN_EXPR | MATCH_EXPR | STRUCT_LIT | CALL_EXPR | INDEX_EXPR | METHOD_CALL_EXPR | FIELD_EXPR | AWAIT_EXPR | TRY_EXPR | TRY_BLOCK_EXPR | CAST_EXPR | REF_EXPR | PREFIX_EXPR | RANGE_EXPR | BIN_EXPR | LITERAL | MACRO_CALL => true, + 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 | AWAIT_EXPR | TRY_EXPR | TRY_BLOCK_EXPR + | CAST_EXPR | REF_EXPR | PREFIX_EXPR | RANGE_EXPR | BIN_EXPR | LITERAL | MACRO_CALL => { + true + } _ => false, } } fn cast(syntax: SyntaxNode) -> Option { - if Self::can_cast(syntax.kind()) { Some(Expr { syntax }) } else { None } + if Self::can_cast(syntax.kind()) { + Some(Self { syntax }) + } else { + None + } + } + fn syntax(&self) -> &SyntaxNode { + &self.syntax } - fn syntax(&self) -> &SyntaxNode { &self.syntax } } - - -#[derive(Debug, Clone, PartialEq, Eq)] pub enum ExprKind { TupleExpr(TupleExpr), ArrayExpr(ArrayExpr), @@ -637,141 +651,198 @@ pub enum ExprKind { MacroCall(MacroCall), } impl From for Expr { - fn from(n: TupleExpr) -> Expr { Expr { syntax: n.syntax } } + fn from(node: TupleExpr) -> Expr { + Expr { syntax: node.syntax } + } } impl From for Expr { - fn from(n: ArrayExpr) -> Expr { Expr { syntax: n.syntax } } + fn from(node: ArrayExpr) -> Expr { + Expr { syntax: node.syntax } + } } impl From for Expr { - fn from(n: ParenExpr) -> Expr { Expr { syntax: n.syntax } } + fn from(node: ParenExpr) -> Expr { + Expr { syntax: node.syntax } + } } impl From for Expr { - fn from(n: PathExpr) -> Expr { Expr { syntax: n.syntax } } + fn from(node: PathExpr) -> Expr { + Expr { syntax: node.syntax } + } } impl From for Expr { - fn from(n: LambdaExpr) -> Expr { Expr { syntax: n.syntax } } + fn from(node: LambdaExpr) -> Expr { + Expr { syntax: node.syntax } + } } impl From for Expr { - fn from(n: IfExpr) -> Expr { Expr { syntax: n.syntax } } + fn from(node: IfExpr) -> Expr { + Expr { syntax: node.syntax } + } } impl From for Expr { - fn from(n: LoopExpr) -> Expr { Expr { syntax: n.syntax } } + fn from(node: LoopExpr) -> Expr { + Expr { syntax: node.syntax } + } } impl From for Expr { - fn from(n: ForExpr) -> Expr { Expr { syntax: n.syntax } } + fn from(node: ForExpr) -> Expr { + Expr { syntax: node.syntax } + } } impl From for Expr { - fn from(n: WhileExpr) -> Expr { Expr { syntax: n.syntax } } + fn from(node: WhileExpr) -> Expr { + Expr { syntax: node.syntax } + } } impl From for Expr { - fn from(n: ContinueExpr) -> Expr { Expr { syntax: n.syntax } } + fn from(node: ContinueExpr) -> Expr { + Expr { syntax: node.syntax } + } } impl From for Expr { - fn from(n: BreakExpr) -> Expr { Expr { syntax: n.syntax } } + fn from(node: BreakExpr) -> Expr { + Expr { syntax: node.syntax } + } } impl From