difftreelog
fix(rowan) unary plus
in: master
5 files changed
crates/jrsonnet-rowan-parser/jsonnet.ungramdiffbeforeafterboth--- a/crates/jrsonnet-rowan-parser/jsonnet.ungram
+++ b/crates/jrsonnet-rowan-parser/jsonnet.ungram
@@ -131,7 +131,7 @@
| 'ERROR_NO_OPERATOR!'
UnaryOperator =
- '-' | '!' | '~'
+ '-' | '!' | '~' | '+'
SliceDescEnd=Expr
SliceDescStep=Expr
crates/jrsonnet-rowan-parser/src/generated/nodes.rsdiffbeforeafterboth1//! This is a generated file, please do not edit manually. Changes can be2//! made in codegeneration that lives in `xtask` top-level dir.34#![allow(non_snake_case, clippy::match_like_matches_macro)]5use crate::{6 SyntaxKind::{self, *},7 SyntaxNode, SyntaxToken, T,8 ast::{AstChildren, AstNode, AstToken, support},9};1011#[derive(Debug, Clone, PartialEq, Eq, Hash)]12pub struct SourceFile {13 pub(crate) syntax: SyntaxNode,14}15impl SourceFile {16 pub fn expr(&self) -> Option<Expr> {17 support::children(&self.syntax).next()18 }19}2021#[derive(Debug, Clone, PartialEq, Eq, Hash)]22pub struct Expr {23 pub(crate) syntax: SyntaxNode,24}25impl Expr {26 pub fn stmts(&self) -> AstChildren<Stmt> {27 support::children(&self.syntax)28 }29 pub fn expr_base(&self) -> Option<ExprBase> {30 support::children(&self.syntax).next()31 }32 pub fn suffixs(&self) -> AstChildren<Suffix> {33 support::children(&self.syntax)34 }35}3637#[derive(Debug, Clone, PartialEq, Eq, Hash)]38pub struct SuffixIndex {39 pub(crate) syntax: SyntaxNode,40}41impl SuffixIndex {42 pub fn question_mark_token(&self) -> Option<SyntaxToken> {43 support::token(&self.syntax, T![?])44 }45 pub fn dot_token(&self) -> Option<SyntaxToken> {46 support::token(&self.syntax, T![.])47 }48 pub fn index(&self) -> Option<Name> {49 support::children(&self.syntax).next()50 }51}5253#[derive(Debug, Clone, PartialEq, Eq, Hash)]54pub struct Name {55 pub(crate) syntax: SyntaxNode,56}57impl Name {58 pub fn ident_lit(&self) -> Option<SyntaxToken> {59 support::token(&self.syntax, IDENT)60 }61}6263#[derive(Debug, Clone, PartialEq, Eq, Hash)]64pub struct SuffixIndexExpr {65 pub(crate) syntax: SyntaxNode,66}67impl SuffixIndexExpr {68 pub fn question_mark_token(&self) -> Option<SyntaxToken> {69 support::token(&self.syntax, T![?])70 }71 pub fn dot_token(&self) -> Option<SyntaxToken> {72 support::token(&self.syntax, T![.])73 }74 pub fn l_brack_token(&self) -> Option<SyntaxToken> {75 support::token(&self.syntax, T!['['])76 }77 pub fn index(&self) -> Option<Expr> {78 support::children(&self.syntax).next()79 }80 pub fn r_brack_token(&self) -> Option<SyntaxToken> {81 support::token(&self.syntax, T![']'])82 }83}8485#[derive(Debug, Clone, PartialEq, Eq, Hash)]86pub struct SuffixSlice {87 pub(crate) syntax: SyntaxNode,88}89impl SuffixSlice {90 pub fn slice_desc(&self) -> Option<SliceDesc> {91 support::children(&self.syntax).next()92 }93}9495#[derive(Debug, Clone, PartialEq, Eq, Hash)]96pub struct SliceDesc {97 pub(crate) syntax: SyntaxNode,98}99impl SliceDesc {100 pub fn l_brack_token(&self) -> Option<SyntaxToken> {101 support::token(&self.syntax, T!['['])102 }103 pub fn from(&self) -> Option<Expr> {104 support::children(&self.syntax).next()105 }106 pub fn colon_token(&self) -> Option<SyntaxToken> {107 support::token(&self.syntax, T![:])108 }109 pub fn end(&self) -> Option<SliceDescEnd> {110 support::children(&self.syntax).next()111 }112 pub fn step(&self) -> Option<SliceDescStep> {113 support::children(&self.syntax).next()114 }115 pub fn r_brack_token(&self) -> Option<SyntaxToken> {116 support::token(&self.syntax, T![']'])117 }118}119120#[derive(Debug, Clone, PartialEq, Eq, Hash)]121pub struct SuffixApply {122 pub(crate) syntax: SyntaxNode,123}124impl SuffixApply {125 pub fn args_desc(&self) -> Option<ArgsDesc> {126 support::children(&self.syntax).next()127 }128 pub fn tailstrict_kw_token(&self) -> Option<SyntaxToken> {129 support::token(&self.syntax, T![tailstrict])130 }131}132133#[derive(Debug, Clone, PartialEq, Eq, Hash)]134pub struct ArgsDesc {135 pub(crate) syntax: SyntaxNode,136}137impl ArgsDesc {138 pub fn l_paren_token(&self) -> Option<SyntaxToken> {139 support::token(&self.syntax, T!['('])140 }141 pub fn args(&self) -> AstChildren<Arg> {142 support::children(&self.syntax)143 }144 pub fn r_paren_token(&self) -> Option<SyntaxToken> {145 support::token(&self.syntax, T![')'])146 }147}148149#[derive(Debug, Clone, PartialEq, Eq, Hash)]150pub struct StmtLocal {151 pub(crate) syntax: SyntaxNode,152}153impl StmtLocal {154 pub fn local_kw_token(&self) -> Option<SyntaxToken> {155 support::token(&self.syntax, T![local])156 }157 pub fn binds(&self) -> AstChildren<Bind> {158 support::children(&self.syntax)159 }160 pub fn semi_token(&self) -> Option<SyntaxToken> {161 support::token(&self.syntax, T![;])162 }163}164165#[derive(Debug, Clone, PartialEq, Eq, Hash)]166pub struct StmtAssert {167 pub(crate) syntax: SyntaxNode,168}169impl StmtAssert {170 pub fn assertion(&self) -> Option<Assertion> {171 support::children(&self.syntax).next()172 }173 pub fn semi_token(&self) -> Option<SyntaxToken> {174 support::token(&self.syntax, T![;])175 }176}177178#[derive(Debug, Clone, PartialEq, Eq, Hash)]179pub struct Assertion {180 pub(crate) syntax: SyntaxNode,181}182impl Assertion {183 pub fn assert_kw_token(&self) -> Option<SyntaxToken> {184 support::token(&self.syntax, T![assert])185 }186 pub fn condition(&self) -> Option<Expr> {187 support::children(&self.syntax).next()188 }189 pub fn colon_token(&self) -> Option<SyntaxToken> {190 support::token(&self.syntax, T![:])191 }192 pub fn message(&self) -> Option<Expr> {193 support::children(&self.syntax).nth(1usize)194 }195}196197#[derive(Debug, Clone, PartialEq, Eq, Hash)]198pub struct ExprBinary {199 pub(crate) syntax: SyntaxNode,200}201impl ExprBinary {202 pub fn lhs(&self) -> Option<Expr> {203 support::children(&self.syntax).next()204 }205 pub fn binary_operator(&self) -> Option<BinaryOperator> {206 support::token_child(&self.syntax)207 }208 pub fn rhs(&self) -> Option<Expr> {209 support::children(&self.syntax).nth(1usize)210 }211}212213#[derive(Debug, Clone, PartialEq, Eq, Hash)]214pub struct ExprUnary {215 pub(crate) syntax: SyntaxNode,216}217impl ExprUnary {218 pub fn unary_operator(&self) -> Option<UnaryOperator> {219 support::token_child(&self.syntax)220 }221 pub fn rhs(&self) -> Option<Expr> {222 support::children(&self.syntax).next()223 }224}225226#[derive(Debug, Clone, PartialEq, Eq, Hash)]227pub struct ExprObjExtend {228 pub(crate) syntax: SyntaxNode,229}230impl ExprObjExtend {231 pub fn lhs(&self) -> Option<Expr> {232 support::children(&self.syntax).next()233 }234 pub fn rhs(&self) -> Option<Expr> {235 support::children(&self.syntax).nth(1usize)236 }237}238239#[derive(Debug, Clone, PartialEq, Eq, Hash)]240pub struct ExprParened {241 pub(crate) syntax: SyntaxNode,242}243impl ExprParened {244 pub fn l_paren_token(&self) -> Option<SyntaxToken> {245 support::token(&self.syntax, T!['('])246 }247 pub fn expr(&self) -> Option<Expr> {248 support::children(&self.syntax).next()249 }250 pub fn r_paren_token(&self) -> Option<SyntaxToken> {251 support::token(&self.syntax, T![')'])252 }253}254255#[derive(Debug, Clone, PartialEq, Eq, Hash)]256pub struct ExprLiteral {257 pub(crate) syntax: SyntaxNode,258}259impl ExprLiteral {260 pub fn literal(&self) -> Option<Literal> {261 support::token_child(&self.syntax)262 }263}264265#[derive(Debug, Clone, PartialEq, Eq, Hash)]266pub struct ExprString {267 pub(crate) syntax: SyntaxNode,268}269impl ExprString {270 pub fn text(&self) -> Option<Text> {271 support::token_child(&self.syntax)272 }273}274275#[derive(Debug, Clone, PartialEq, Eq, Hash)]276pub struct ExprNumber {277 pub(crate) syntax: SyntaxNode,278}279impl ExprNumber {280 pub fn number(&self) -> Option<Number> {281 support::token_child(&self.syntax)282 }283}284285#[derive(Debug, Clone, PartialEq, Eq, Hash)]286pub struct ExprArray {287 pub(crate) syntax: SyntaxNode,288}289impl ExprArray {290 pub fn l_brack_token(&self) -> Option<SyntaxToken> {291 support::token(&self.syntax, T!['['])292 }293 pub fn exprs(&self) -> AstChildren<Expr> {294 support::children(&self.syntax)295 }296 pub fn r_brack_token(&self) -> Option<SyntaxToken> {297 support::token(&self.syntax, T![']'])298 }299}300301#[derive(Debug, Clone, PartialEq, Eq, Hash)]302pub struct ExprObject {303 pub(crate) syntax: SyntaxNode,304}305impl ExprObject {306 pub fn obj_body(&self) -> Option<ObjBody> {307 support::children(&self.syntax).next()308 }309}310311#[derive(Debug, Clone, PartialEq, Eq, Hash)]312pub struct ExprArrayComp {313 pub(crate) syntax: SyntaxNode,314}315impl ExprArrayComp {316 pub fn l_brack_token(&self) -> Option<SyntaxToken> {317 support::token(&self.syntax, T!['['])318 }319 pub fn expr(&self) -> Option<Expr> {320 support::children(&self.syntax).next()321 }322 pub fn comma_token(&self) -> Option<SyntaxToken> {323 support::token(&self.syntax, T![,])324 }325 pub fn comp_specs(&self) -> AstChildren<CompSpec> {326 support::children(&self.syntax)327 }328 pub fn r_brack_token(&self) -> Option<SyntaxToken> {329 support::token(&self.syntax, T![']'])330 }331}332333#[derive(Debug, Clone, PartialEq, Eq, Hash)]334pub struct ExprImport {335 pub(crate) syntax: SyntaxNode,336}337impl ExprImport {338 pub fn import_kind(&self) -> Option<ImportKind> {339 support::token_child(&self.syntax)340 }341 pub fn text(&self) -> Option<Text> {342 support::token_child(&self.syntax)343 }344}345346#[derive(Debug, Clone, PartialEq, Eq, Hash)]347pub struct ExprVar {348 pub(crate) syntax: SyntaxNode,349}350impl ExprVar {351 pub fn name(&self) -> Option<Name> {352 support::children(&self.syntax).next()353 }354}355356#[derive(Debug, Clone, PartialEq, Eq, Hash)]357pub struct ExprIfThenElse {358 pub(crate) syntax: SyntaxNode,359}360impl ExprIfThenElse {361 pub fn if_kw_token(&self) -> Option<SyntaxToken> {362 support::token(&self.syntax, T![if])363 }364 pub fn cond(&self) -> Option<Expr> {365 support::children(&self.syntax).next()366 }367 pub fn then_kw_token(&self) -> Option<SyntaxToken> {368 support::token(&self.syntax, T![then])369 }370 pub fn then(&self) -> Option<TrueExpr> {371 support::children(&self.syntax).next()372 }373 pub fn else_kw_token(&self) -> Option<SyntaxToken> {374 support::token(&self.syntax, T![else])375 }376 pub fn else_(&self) -> Option<FalseExpr> {377 support::children(&self.syntax).next()378 }379}380381#[derive(Debug, Clone, PartialEq, Eq, Hash)]382pub struct TrueExpr {383 pub(crate) syntax: SyntaxNode,384}385impl TrueExpr {386 pub fn expr(&self) -> Option<Expr> {387 support::children(&self.syntax).next()388 }389}390391#[derive(Debug, Clone, PartialEq, Eq, Hash)]392pub struct FalseExpr {393 pub(crate) syntax: SyntaxNode,394}395impl FalseExpr {396 pub fn expr(&self) -> Option<Expr> {397 support::children(&self.syntax).next()398 }399}400401#[derive(Debug, Clone, PartialEq, Eq, Hash)]402pub struct ExprFunction {403 pub(crate) syntax: SyntaxNode,404}405impl ExprFunction {406 pub fn function_kw_token(&self) -> Option<SyntaxToken> {407 support::token(&self.syntax, T![function])408 }409 pub fn l_paren_token(&self) -> Option<SyntaxToken> {410 support::token(&self.syntax, T!['('])411 }412 pub fn params_desc(&self) -> Option<ParamsDesc> {413 support::children(&self.syntax).next()414 }415 pub fn r_paren_token(&self) -> Option<SyntaxToken> {416 support::token(&self.syntax, T![')'])417 }418 pub fn expr(&self) -> Option<Expr> {419 support::children(&self.syntax).next()420 }421}422423#[derive(Debug, Clone, PartialEq, Eq, Hash)]424pub struct ParamsDesc {425 pub(crate) syntax: SyntaxNode,426}427impl ParamsDesc {428 pub fn l_paren_token(&self) -> Option<SyntaxToken> {429 support::token(&self.syntax, T!['('])430 }431 pub fn params(&self) -> AstChildren<Param> {432 support::children(&self.syntax)433 }434 pub fn r_paren_token(&self) -> Option<SyntaxToken> {435 support::token(&self.syntax, T![')'])436 }437}438439#[derive(Debug, Clone, PartialEq, Eq, Hash)]440pub struct ExprError {441 pub(crate) syntax: SyntaxNode,442}443impl ExprError {444 pub fn error_kw_token(&self) -> Option<SyntaxToken> {445 support::token(&self.syntax, T![error])446 }447 pub fn expr(&self) -> Option<Expr> {448 support::children(&self.syntax).next()449 }450}451452#[derive(Debug, Clone, PartialEq, Eq, Hash)]453pub struct SliceDescEnd {454 pub(crate) syntax: SyntaxNode,455}456impl SliceDescEnd {457 pub fn expr(&self) -> Option<Expr> {458 support::children(&self.syntax).next()459 }460}461462#[derive(Debug, Clone, PartialEq, Eq, Hash)]463pub struct SliceDescStep {464 pub(crate) syntax: SyntaxNode,465}466impl SliceDescStep {467 pub fn expr(&self) -> Option<Expr> {468 support::children(&self.syntax).next()469 }470}471472#[derive(Debug, Clone, PartialEq, Eq, Hash)]473pub struct Arg {474 pub(crate) syntax: SyntaxNode,475}476impl Arg {477 pub fn name(&self) -> Option<Name> {478 support::children(&self.syntax).next()479 }480 pub fn assign_token(&self) -> Option<SyntaxToken> {481 support::token(&self.syntax, T![=])482 }483 pub fn expr(&self) -> Option<Expr> {484 support::children(&self.syntax).next()485 }486}487488#[derive(Debug, Clone, PartialEq, Eq, Hash)]489pub struct ObjBodyComp {490 pub(crate) syntax: SyntaxNode,491}492impl ObjBodyComp {493 pub fn l_brace_token(&self) -> Option<SyntaxToken> {494 support::token(&self.syntax, T!['{'])495 }496 pub fn member_comps(&self) -> AstChildren<MemberComp> {497 support::children(&self.syntax)498 }499 pub fn comp_specs(&self) -> AstChildren<CompSpec> {500 support::children(&self.syntax)501 }502 pub fn r_brace_token(&self) -> Option<SyntaxToken> {503 support::token(&self.syntax, T!['}'])504 }505}506507#[derive(Debug, Clone, PartialEq, Eq, Hash)]508pub struct ObjBodyMemberList {509 pub(crate) syntax: SyntaxNode,510}511impl ObjBodyMemberList {512 pub fn l_brace_token(&self) -> Option<SyntaxToken> {513 support::token(&self.syntax, T!['{'])514 }515 pub fn members(&self) -> AstChildren<Member> {516 support::children(&self.syntax)517 }518 pub fn r_brace_token(&self) -> Option<SyntaxToken> {519 support::token(&self.syntax, T!['}'])520 }521}522523#[derive(Debug, Clone, PartialEq, Eq, Hash)]524pub struct MemberBindStmt {525 pub(crate) syntax: SyntaxNode,526}527impl MemberBindStmt {528 pub fn obj_local(&self) -> Option<ObjLocal> {529 support::children(&self.syntax).next()530 }531}532533#[derive(Debug, Clone, PartialEq, Eq, Hash)]534pub struct ObjLocal {535 pub(crate) syntax: SyntaxNode,536}537impl ObjLocal {538 pub fn local_kw_token(&self) -> Option<SyntaxToken> {539 support::token(&self.syntax, T![local])540 }541 pub fn bind(&self) -> Option<Bind> {542 support::children(&self.syntax).next()543 }544}545546#[derive(Debug, Clone, PartialEq, Eq, Hash)]547pub struct MemberAssertStmt {548 pub(crate) syntax: SyntaxNode,549}550impl MemberAssertStmt {551 pub fn assertion(&self) -> Option<Assertion> {552 support::children(&self.syntax).next()553 }554}555556#[derive(Debug, Clone, PartialEq, Eq, Hash)]557pub struct MemberFieldNormal {558 pub(crate) syntax: SyntaxNode,559}560impl MemberFieldNormal {561 pub fn field_name(&self) -> Option<FieldName> {562 support::children(&self.syntax).next()563 }564 pub fn plus_token(&self) -> Option<SyntaxToken> {565 support::token(&self.syntax, T![+])566 }567 pub fn visibility(&self) -> Option<Visibility> {568 support::children(&self.syntax).next()569 }570 pub fn expr(&self) -> Option<Expr> {571 support::children(&self.syntax).next()572 }573}574575#[derive(Debug, Clone, PartialEq, Eq, Hash)]576pub struct Visibility {577 pub(crate) syntax: SyntaxNode,578}579impl Visibility {580 pub fn colon_token(&self) -> Option<SyntaxToken> {581 support::token(&self.syntax, T![:])582 }583}584585#[derive(Debug, Clone, PartialEq, Eq, Hash)]586pub struct MemberFieldMethod {587 pub(crate) syntax: SyntaxNode,588}589impl MemberFieldMethod {590 pub fn field_name(&self) -> Option<FieldName> {591 support::children(&self.syntax).next()592 }593 pub fn params_desc(&self) -> Option<ParamsDesc> {594 support::children(&self.syntax).next()595 }596 pub fn visibility(&self) -> Option<Visibility> {597 support::children(&self.syntax).next()598 }599 pub fn expr(&self) -> Option<Expr> {600 support::children(&self.syntax).next()601 }602}603604#[derive(Debug, Clone, PartialEq, Eq, Hash)]605pub struct FieldNameFixed {606 pub(crate) syntax: SyntaxNode,607}608impl FieldNameFixed {609 pub fn id(&self) -> Option<Name> {610 support::children(&self.syntax).next()611 }612 pub fn text(&self) -> Option<Text> {613 support::token_child(&self.syntax)614 }615}616617#[derive(Debug, Clone, PartialEq, Eq, Hash)]618pub struct FieldNameDynamic {619 pub(crate) syntax: SyntaxNode,620}621impl FieldNameDynamic {622 pub fn l_brack_token(&self) -> Option<SyntaxToken> {623 support::token(&self.syntax, T!['['])624 }625 pub fn expr(&self) -> Option<Expr> {626 support::children(&self.syntax).next()627 }628 pub fn r_brack_token(&self) -> Option<SyntaxToken> {629 support::token(&self.syntax, T![']'])630 }631}632633#[derive(Debug, Clone, PartialEq, Eq, Hash)]634pub struct ForSpec {635 pub(crate) syntax: SyntaxNode,636}637impl ForSpec {638 pub fn for_kw_token(&self) -> Option<SyntaxToken> {639 support::token(&self.syntax, T![for])640 }641 pub fn bind(&self) -> Option<Destruct> {642 support::children(&self.syntax).next()643 }644 pub fn in_kw_token(&self) -> Option<SyntaxToken> {645 support::token(&self.syntax, T![in])646 }647 pub fn expr(&self) -> Option<Expr> {648 support::children(&self.syntax).next()649 }650}651652#[derive(Debug, Clone, PartialEq, Eq, Hash)]653pub struct ForObjSpec {654 pub(crate) syntax: SyntaxNode,655}656impl ForObjSpec {657 pub fn for_kw_token(&self) -> Option<SyntaxToken> {658 support::token(&self.syntax, T![for])659 }660 pub fn l_brack_token(&self) -> Option<SyntaxToken> {661 support::token(&self.syntax, T!['['])662 }663 pub fn key(&self) -> Option<Name> {664 support::children(&self.syntax).next()665 }666 pub fn r_brack_token(&self) -> Option<SyntaxToken> {667 support::token(&self.syntax, T![']'])668 }669 pub fn visibility(&self) -> Option<Visibility> {670 support::children(&self.syntax).next()671 }672 pub fn value(&self) -> Option<Destruct> {673 support::children(&self.syntax).next()674 }675 pub fn in_kw_token(&self) -> Option<SyntaxToken> {676 support::token(&self.syntax, T![in])677 }678 pub fn expr(&self) -> Option<Expr> {679 support::children(&self.syntax).next()680 }681}682683#[derive(Debug, Clone, PartialEq, Eq, Hash)]684pub struct IfSpec {685 pub(crate) syntax: SyntaxNode,686}687impl IfSpec {688 pub fn if_kw_token(&self) -> Option<SyntaxToken> {689 support::token(&self.syntax, T![if])690 }691 pub fn expr(&self) -> Option<Expr> {692 support::children(&self.syntax).next()693 }694}695696#[derive(Debug, Clone, PartialEq, Eq, Hash)]697pub struct BindDestruct {698 pub(crate) syntax: SyntaxNode,699}700impl BindDestruct {701 pub fn into(&self) -> Option<Destruct> {702 support::children(&self.syntax).next()703 }704 pub fn assign_token(&self) -> Option<SyntaxToken> {705 support::token(&self.syntax, T![=])706 }707 pub fn value(&self) -> Option<Expr> {708 support::children(&self.syntax).next()709 }710}711712#[derive(Debug, Clone, PartialEq, Eq, Hash)]713pub struct BindFunction {714 pub(crate) syntax: SyntaxNode,715}716impl BindFunction {717 pub fn name(&self) -> Option<Name> {718 support::children(&self.syntax).next()719 }720 pub fn params(&self) -> Option<ParamsDesc> {721 support::children(&self.syntax).next()722 }723 pub fn assign_token(&self) -> Option<SyntaxToken> {724 support::token(&self.syntax, T![=])725 }726 pub fn value(&self) -> Option<Expr> {727 support::children(&self.syntax).next()728 }729}730731#[derive(Debug, Clone, PartialEq, Eq, Hash)]732pub struct Param {733 pub(crate) syntax: SyntaxNode,734}735impl Param {736 pub fn destruct(&self) -> Option<Destruct> {737 support::children(&self.syntax).next()738 }739 pub fn assign_token(&self) -> Option<SyntaxToken> {740 support::token(&self.syntax, T![=])741 }742 pub fn expr(&self) -> Option<Expr> {743 support::children(&self.syntax).next()744 }745}746747#[derive(Debug, Clone, PartialEq, Eq, Hash)]748pub struct DestructFull {749 pub(crate) syntax: SyntaxNode,750}751impl DestructFull {752 pub fn name(&self) -> Option<Name> {753 support::children(&self.syntax).next()754 }755}756757#[derive(Debug, Clone, PartialEq, Eq, Hash)]758pub struct DestructSkip {759 pub(crate) syntax: SyntaxNode,760}761impl DestructSkip {762 pub fn question_mark_token(&self) -> Option<SyntaxToken> {763 support::token(&self.syntax, T![?])764 }765}766767#[derive(Debug, Clone, PartialEq, Eq, Hash)]768pub struct DestructArray {769 pub(crate) syntax: SyntaxNode,770}771impl DestructArray {772 pub fn l_brack_token(&self) -> Option<SyntaxToken> {773 support::token(&self.syntax, T!['['])774 }775 pub fn destruct_array_parts(&self) -> AstChildren<DestructArrayPart> {776 support::children(&self.syntax)777 }778 pub fn r_brack_token(&self) -> Option<SyntaxToken> {779 support::token(&self.syntax, T![']'])780 }781}782783#[derive(Debug, Clone, PartialEq, Eq, Hash)]784pub struct DestructObject {785 pub(crate) syntax: SyntaxNode,786}787impl DestructObject {788 pub fn l_brace_token(&self) -> Option<SyntaxToken> {789 support::token(&self.syntax, T!['{'])790 }791 pub fn destruct_object_fields(&self) -> AstChildren<DestructObjectField> {792 support::children(&self.syntax)793 }794 pub fn destruct_rest(&self) -> Option<DestructRest> {795 support::children(&self.syntax).next()796 }797 pub fn comma_token(&self) -> Option<SyntaxToken> {798 support::token(&self.syntax, T![,])799 }800 pub fn r_brace_token(&self) -> Option<SyntaxToken> {801 support::token(&self.syntax, T!['}'])802 }803}804805#[derive(Debug, Clone, PartialEq, Eq, Hash)]806pub struct DestructObjectField {807 pub(crate) syntax: SyntaxNode,808}809impl DestructObjectField {810 pub fn field(&self) -> Option<Name> {811 support::children(&self.syntax).next()812 }813 pub fn colon_token(&self) -> Option<SyntaxToken> {814 support::token(&self.syntax, T![:])815 }816 pub fn destruct(&self) -> Option<Destruct> {817 support::children(&self.syntax).next()818 }819 pub fn assign_token(&self) -> Option<SyntaxToken> {820 support::token(&self.syntax, T![=])821 }822 pub fn expr(&self) -> Option<Expr> {823 support::children(&self.syntax).next()824 }825}826827#[derive(Debug, Clone, PartialEq, Eq, Hash)]828pub struct DestructRest {829 pub(crate) syntax: SyntaxNode,830}831impl DestructRest {832 pub fn dotdotdot_token(&self) -> Option<SyntaxToken> {833 support::token(&self.syntax, T![...])834 }835 pub fn into(&self) -> Option<Name> {836 support::children(&self.syntax).next()837 }838}839840#[derive(Debug, Clone, PartialEq, Eq, Hash)]841pub struct DestructArrayElement {842 pub(crate) syntax: SyntaxNode,843}844impl DestructArrayElement {845 pub fn destruct(&self) -> Option<Destruct> {846 support::children(&self.syntax).next()847 }848}849850#[derive(Debug, Clone, PartialEq, Eq, Hash)]851pub enum Suffix {852 SuffixIndex(SuffixIndex),853 SuffixIndexExpr(SuffixIndexExpr),854 SuffixSlice(SuffixSlice),855 SuffixApply(SuffixApply),856}857858#[derive(Debug, Clone, PartialEq, Eq, Hash)]859pub enum Bind {860 BindDestruct(BindDestruct),861 BindFunction(BindFunction),862}863864#[derive(Debug, Clone, PartialEq, Eq, Hash)]865pub enum Stmt {866 StmtLocal(StmtLocal),867 StmtAssert(StmtAssert),868}869870#[derive(Debug, Clone, PartialEq, Eq, Hash)]871pub enum ObjBody {872 ObjBodyComp(ObjBodyComp),873 ObjBodyMemberList(ObjBodyMemberList),874}875876#[derive(Debug, Clone, PartialEq, Eq, Hash)]877pub enum CompSpec {878 ForSpec(ForSpec),879 ForObjSpec(ForObjSpec),880 IfSpec(IfSpec),881}882883#[derive(Debug, Clone, PartialEq, Eq, Hash)]884pub enum ExprBase {885 ExprBinary(ExprBinary),886 ExprUnary(ExprUnary),887 ExprObjExtend(ExprObjExtend),888 ExprParened(ExprParened),889 ExprString(ExprString),890 ExprNumber(ExprNumber),891 ExprLiteral(ExprLiteral),892 ExprArray(ExprArray),893 ExprObject(ExprObject),894 ExprArrayComp(ExprArrayComp),895 ExprImport(ExprImport),896 ExprVar(ExprVar),897 ExprIfThenElse(ExprIfThenElse),898 ExprFunction(ExprFunction),899 ExprError(ExprError),900}901902#[derive(Debug, Clone, PartialEq, Eq, Hash)]903pub enum MemberComp {904 MemberBindStmt(MemberBindStmt),905 MemberFieldNormal(MemberFieldNormal),906 MemberFieldMethod(MemberFieldMethod),907}908909#[derive(Debug, Clone, PartialEq, Eq, Hash)]910pub enum Member {911 MemberBindStmt(MemberBindStmt),912 MemberAssertStmt(MemberAssertStmt),913 MemberFieldNormal(MemberFieldNormal),914 MemberFieldMethod(MemberFieldMethod),915}916917#[derive(Debug, Clone, PartialEq, Eq, Hash)]918pub enum FieldName {919 FieldNameFixed(FieldNameFixed),920 FieldNameDynamic(FieldNameDynamic),921}922923#[derive(Debug, Clone, PartialEq, Eq, Hash)]924pub enum Destruct {925 DestructFull(DestructFull),926 DestructSkip(DestructSkip),927 DestructArray(DestructArray),928 DestructObject(DestructObject),929}930931#[derive(Debug, Clone, PartialEq, Eq, Hash)]932pub enum DestructArrayPart {933 DestructArrayElement(DestructArrayElement),934 DestructRest(DestructRest),935}936937#[derive(Debug, Clone, PartialEq, Eq, Hash)]938pub struct BinaryOperator {939 syntax: SyntaxToken,940 kind: BinaryOperatorKind,941}942943#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]944pub enum BinaryOperatorKind {945 Or,946 NullCoaelse,947 And,948 BitOr,949 BitXor,950 BitAnd,951 Eq,952 Ne,953 Lt,954 Gt,955 Le,956 Ge,957 InKw,958 Lhs,959 Rhs,960 Plus,961 Minus,962 Mul,963 Div,964 Modulo,965 MetaObjectApply,966 ErrorNoOperator,967}968969#[derive(Debug, Clone, PartialEq, Eq, Hash)]970pub struct UnaryOperator {971 syntax: SyntaxToken,972 kind: UnaryOperatorKind,973}974975#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]976pub enum UnaryOperatorKind {977 Minus,978 Not,979 BitNot,980}981982#[derive(Debug, Clone, PartialEq, Eq, Hash)]983pub struct Literal {984 syntax: SyntaxToken,985 kind: LiteralKind,986}987988#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]989pub enum LiteralKind {990 NullKw,991 TrueKw,992 FalseKw,993 SelfKw,994 Dollar,995 SuperKw,996}997998#[derive(Debug, Clone, PartialEq, Eq, Hash)]999pub struct Text {1000 syntax: SyntaxToken,1001 kind: TextKind,1002}10031004#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]1005pub enum TextKind {1006 StringDouble,1007 ErrorStringDoubleUnterminated,1008 StringSingle,1009 ErrorStringSingleUnterminated,1010 StringDoubleVerbatim,1011 ErrorStringDoubleVerbatimUnterminated,1012 StringSingleVerbatim,1013 ErrorStringSingleVerbatimUnterminated,1014 ErrorStringVerbatimMissingQuotes,1015 StringBlock,1016 ErrorStringBlockUnexpectedEnd,1017 ErrorStringBlockMissingNewLine,1018 ErrorStringBlockMissingTermination,1019 ErrorStringBlockMissingIndent,1020}10211022#[derive(Debug, Clone, PartialEq, Eq, Hash)]1023pub struct Number {1024 syntax: SyntaxToken,1025 kind: NumberKind,1026}10271028#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]1029pub enum NumberKind {1030 Float,1031 ErrorFloatJunkAfterPoint,1032 ErrorFloatJunkAfterExponent,1033 ErrorFloatJunkAfterExponentSign,1034}10351036#[derive(Debug, Clone, PartialEq, Eq, Hash)]1037pub struct ImportKind {1038 syntax: SyntaxToken,1039 kind: ImportKindKind,1040}10411042#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]1043pub enum ImportKindKind {1044 ImportstrKw,1045 ImportbinKw,1046 ImportKw,1047}10481049#[derive(Debug, Clone, PartialEq, Eq, Hash)]1050pub struct Trivia {1051 syntax: SyntaxToken,1052 kind: TriviaKind,1053}10541055#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]1056pub enum TriviaKind {1057 Whitespace,1058 MultiLineComment,1059 ErrorCommentTooShort,1060 ErrorCommentUnterminated,1061 SingleLineHashComment,1062 SingleLineSlashComment,1063}10641065#[derive(Debug, Clone, PartialEq, Eq, Hash)]1066pub struct CustomError {1067 syntax: SyntaxToken,1068 kind: CustomErrorKind,1069}10701071#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]1072pub enum CustomErrorKind {1073 ErrorMissingToken,1074 ErrorUnexpectedToken,1075 ErrorCustom,1076}1077impl AstNode for SourceFile {1078 fn can_cast(kind: SyntaxKind) -> bool {1079 kind == SOURCE_FILE1080 }1081 fn cast(syntax: SyntaxNode) -> Option<Self> {1082 if Self::can_cast(syntax.kind()) {1083 Some(Self { syntax })1084 } else {1085 None1086 }1087 }1088 fn syntax(&self) -> &SyntaxNode {1089 &self.syntax1090 }1091}1092impl AstNode for Expr {1093 fn can_cast(kind: SyntaxKind) -> bool {1094 kind == EXPR1095 }1096 fn cast(syntax: SyntaxNode) -> Option<Self> {1097 if Self::can_cast(syntax.kind()) {1098 Some(Self { syntax })1099 } else {1100 None1101 }1102 }1103 fn syntax(&self) -> &SyntaxNode {1104 &self.syntax1105 }1106}1107impl AstNode for SuffixIndex {1108 fn can_cast(kind: SyntaxKind) -> bool {1109 kind == SUFFIX_INDEX1110 }1111 fn cast(syntax: SyntaxNode) -> Option<Self> {1112 if Self::can_cast(syntax.kind()) {1113 Some(Self { syntax })1114 } else {1115 None1116 }1117 }1118 fn syntax(&self) -> &SyntaxNode {1119 &self.syntax1120 }1121}1122impl AstNode for Name {1123 fn can_cast(kind: SyntaxKind) -> bool {1124 kind == NAME1125 }1126 fn cast(syntax: SyntaxNode) -> Option<Self> {1127 if Self::can_cast(syntax.kind()) {1128 Some(Self { syntax })1129 } else {1130 None1131 }1132 }1133 fn syntax(&self) -> &SyntaxNode {1134 &self.syntax1135 }1136}1137impl AstNode for SuffixIndexExpr {1138 fn can_cast(kind: SyntaxKind) -> bool {1139 kind == SUFFIX_INDEX_EXPR1140 }1141 fn cast(syntax: SyntaxNode) -> Option<Self> {1142 if Self::can_cast(syntax.kind()) {1143 Some(Self { syntax })1144 } else {1145 None1146 }1147 }1148 fn syntax(&self) -> &SyntaxNode {1149 &self.syntax1150 }1151}1152impl AstNode for SuffixSlice {1153 fn can_cast(kind: SyntaxKind) -> bool {1154 kind == SUFFIX_SLICE1155 }1156 fn cast(syntax: SyntaxNode) -> Option<Self> {1157 if Self::can_cast(syntax.kind()) {1158 Some(Self { syntax })1159 } else {1160 None1161 }1162 }1163 fn syntax(&self) -> &SyntaxNode {1164 &self.syntax1165 }1166}1167impl AstNode for SliceDesc {1168 fn can_cast(kind: SyntaxKind) -> bool {1169 kind == SLICE_DESC1170 }1171 fn cast(syntax: SyntaxNode) -> Option<Self> {1172 if Self::can_cast(syntax.kind()) {1173 Some(Self { syntax })1174 } else {1175 None1176 }1177 }1178 fn syntax(&self) -> &SyntaxNode {1179 &self.syntax1180 }1181}1182impl AstNode for SuffixApply {1183 fn can_cast(kind: SyntaxKind) -> bool {1184 kind == SUFFIX_APPLY1185 }1186 fn cast(syntax: SyntaxNode) -> Option<Self> {1187 if Self::can_cast(syntax.kind()) {1188 Some(Self { syntax })1189 } else {1190 None1191 }1192 }1193 fn syntax(&self) -> &SyntaxNode {1194 &self.syntax1195 }1196}1197impl AstNode for ArgsDesc {1198 fn can_cast(kind: SyntaxKind) -> bool {1199 kind == ARGS_DESC1200 }1201 fn cast(syntax: SyntaxNode) -> Option<Self> {1202 if Self::can_cast(syntax.kind()) {1203 Some(Self { syntax })1204 } else {1205 None1206 }1207 }1208 fn syntax(&self) -> &SyntaxNode {1209 &self.syntax1210 }1211}1212impl AstNode for StmtLocal {1213 fn can_cast(kind: SyntaxKind) -> bool {1214 kind == STMT_LOCAL1215 }1216 fn cast(syntax: SyntaxNode) -> Option<Self> {1217 if Self::can_cast(syntax.kind()) {1218 Some(Self { syntax })1219 } else {1220 None1221 }1222 }1223 fn syntax(&self) -> &SyntaxNode {1224 &self.syntax1225 }1226}1227impl AstNode for StmtAssert {1228 fn can_cast(kind: SyntaxKind) -> bool {1229 kind == STMT_ASSERT1230 }1231 fn cast(syntax: SyntaxNode) -> Option<Self> {1232 if Self::can_cast(syntax.kind()) {1233 Some(Self { syntax })1234 } else {1235 None1236 }1237 }1238 fn syntax(&self) -> &SyntaxNode {1239 &self.syntax1240 }1241}1242impl AstNode for Assertion {1243 fn can_cast(kind: SyntaxKind) -> bool {1244 kind == ASSERTION1245 }1246 fn cast(syntax: SyntaxNode) -> Option<Self> {1247 if Self::can_cast(syntax.kind()) {1248 Some(Self { syntax })1249 } else {1250 None1251 }1252 }1253 fn syntax(&self) -> &SyntaxNode {1254 &self.syntax1255 }1256}1257impl AstNode for ExprBinary {1258 fn can_cast(kind: SyntaxKind) -> bool {1259 kind == EXPR_BINARY1260 }1261 fn cast(syntax: SyntaxNode) -> Option<Self> {1262 if Self::can_cast(syntax.kind()) {1263 Some(Self { syntax })1264 } else {1265 None1266 }1267 }1268 fn syntax(&self) -> &SyntaxNode {1269 &self.syntax1270 }1271}1272impl AstNode for ExprUnary {1273 fn can_cast(kind: SyntaxKind) -> bool {1274 kind == EXPR_UNARY1275 }1276 fn cast(syntax: SyntaxNode) -> Option<Self> {1277 if Self::can_cast(syntax.kind()) {1278 Some(Self { syntax })1279 } else {1280 None1281 }1282 }1283 fn syntax(&self) -> &SyntaxNode {1284 &self.syntax1285 }1286}1287impl AstNode for ExprObjExtend {1288 fn can_cast(kind: SyntaxKind) -> bool {1289 kind == EXPR_OBJ_EXTEND1290 }1291 fn cast(syntax: SyntaxNode) -> Option<Self> {1292 if Self::can_cast(syntax.kind()) {1293 Some(Self { syntax })1294 } else {1295 None1296 }1297 }1298 fn syntax(&self) -> &SyntaxNode {1299 &self.syntax1300 }1301}1302impl AstNode for ExprParened {1303 fn can_cast(kind: SyntaxKind) -> bool {1304 kind == EXPR_PARENED1305 }1306 fn cast(syntax: SyntaxNode) -> Option<Self> {1307 if Self::can_cast(syntax.kind()) {1308 Some(Self { syntax })1309 } else {1310 None1311 }1312 }1313 fn syntax(&self) -> &SyntaxNode {1314 &self.syntax1315 }1316}1317impl AstNode for ExprLiteral {1318 fn can_cast(kind: SyntaxKind) -> bool {1319 kind == EXPR_LITERAL1320 }1321 fn cast(syntax: SyntaxNode) -> Option<Self> {1322 if Self::can_cast(syntax.kind()) {1323 Some(Self { syntax })1324 } else {1325 None1326 }1327 }1328 fn syntax(&self) -> &SyntaxNode {1329 &self.syntax1330 }1331}1332impl AstNode for ExprString {1333 fn can_cast(kind: SyntaxKind) -> bool {1334 kind == EXPR_STRING1335 }1336 fn cast(syntax: SyntaxNode) -> Option<Self> {1337 if Self::can_cast(syntax.kind()) {1338 Some(Self { syntax })1339 } else {1340 None1341 }1342 }1343 fn syntax(&self) -> &SyntaxNode {1344 &self.syntax1345 }1346}1347impl AstNode for ExprNumber {1348 fn can_cast(kind: SyntaxKind) -> bool {1349 kind == EXPR_NUMBER1350 }1351 fn cast(syntax: SyntaxNode) -> Option<Self> {1352 if Self::can_cast(syntax.kind()) {1353 Some(Self { syntax })1354 } else {1355 None1356 }1357 }1358 fn syntax(&self) -> &SyntaxNode {1359 &self.syntax1360 }1361}1362impl AstNode for ExprArray {1363 fn can_cast(kind: SyntaxKind) -> bool {1364 kind == EXPR_ARRAY1365 }1366 fn cast(syntax: SyntaxNode) -> Option<Self> {1367 if Self::can_cast(syntax.kind()) {1368 Some(Self { syntax })1369 } else {1370 None1371 }1372 }1373 fn syntax(&self) -> &SyntaxNode {1374 &self.syntax1375 }1376}1377impl AstNode for ExprObject {1378 fn can_cast(kind: SyntaxKind) -> bool {1379 kind == EXPR_OBJECT1380 }1381 fn cast(syntax: SyntaxNode) -> Option<Self> {1382 if Self::can_cast(syntax.kind()) {1383 Some(Self { syntax })1384 } else {1385 None1386 }1387 }1388 fn syntax(&self) -> &SyntaxNode {1389 &self.syntax1390 }1391}1392impl AstNode for ExprArrayComp {1393 fn can_cast(kind: SyntaxKind) -> bool {1394 kind == EXPR_ARRAY_COMP1395 }1396 fn cast(syntax: SyntaxNode) -> Option<Self> {1397 if Self::can_cast(syntax.kind()) {1398 Some(Self { syntax })1399 } else {1400 None1401 }1402 }1403 fn syntax(&self) -> &SyntaxNode {1404 &self.syntax1405 }1406}1407impl AstNode for ExprImport {1408 fn can_cast(kind: SyntaxKind) -> bool {1409 kind == EXPR_IMPORT1410 }1411 fn cast(syntax: SyntaxNode) -> Option<Self> {1412 if Self::can_cast(syntax.kind()) {1413 Some(Self { syntax })1414 } else {1415 None1416 }1417 }1418 fn syntax(&self) -> &SyntaxNode {1419 &self.syntax1420 }1421}1422impl AstNode for ExprVar {1423 fn can_cast(kind: SyntaxKind) -> bool {1424 kind == EXPR_VAR1425 }1426 fn cast(syntax: SyntaxNode) -> Option<Self> {1427 if Self::can_cast(syntax.kind()) {1428 Some(Self { syntax })1429 } else {1430 None1431 }1432 }1433 fn syntax(&self) -> &SyntaxNode {1434 &self.syntax1435 }1436}1437impl AstNode for ExprIfThenElse {1438 fn can_cast(kind: SyntaxKind) -> bool {1439 kind == EXPR_IF_THEN_ELSE1440 }1441 fn cast(syntax: SyntaxNode) -> Option<Self> {1442 if Self::can_cast(syntax.kind()) {1443 Some(Self { syntax })1444 } else {1445 None1446 }1447 }1448 fn syntax(&self) -> &SyntaxNode {1449 &self.syntax1450 }1451}1452impl AstNode for TrueExpr {1453 fn can_cast(kind: SyntaxKind) -> bool {1454 kind == TRUE_EXPR1455 }1456 fn cast(syntax: SyntaxNode) -> Option<Self> {1457 if Self::can_cast(syntax.kind()) {1458 Some(Self { syntax })1459 } else {1460 None1461 }1462 }1463 fn syntax(&self) -> &SyntaxNode {1464 &self.syntax1465 }1466}1467impl AstNode for FalseExpr {1468 fn can_cast(kind: SyntaxKind) -> bool {1469 kind == FALSE_EXPR1470 }1471 fn cast(syntax: SyntaxNode) -> Option<Self> {1472 if Self::can_cast(syntax.kind()) {1473 Some(Self { syntax })1474 } else {1475 None1476 }1477 }1478 fn syntax(&self) -> &SyntaxNode {1479 &self.syntax1480 }1481}1482impl AstNode for ExprFunction {1483 fn can_cast(kind: SyntaxKind) -> bool {1484 kind == EXPR_FUNCTION1485 }1486 fn cast(syntax: SyntaxNode) -> Option<Self> {1487 if Self::can_cast(syntax.kind()) {1488 Some(Self { syntax })1489 } else {1490 None1491 }1492 }1493 fn syntax(&self) -> &SyntaxNode {1494 &self.syntax1495 }1496}1497impl AstNode for ParamsDesc {1498 fn can_cast(kind: SyntaxKind) -> bool {1499 kind == PARAMS_DESC1500 }1501 fn cast(syntax: SyntaxNode) -> Option<Self> {1502 if Self::can_cast(syntax.kind()) {1503 Some(Self { syntax })1504 } else {1505 None1506 }1507 }1508 fn syntax(&self) -> &SyntaxNode {1509 &self.syntax1510 }1511}1512impl AstNode for ExprError {1513 fn can_cast(kind: SyntaxKind) -> bool {1514 kind == EXPR_ERROR1515 }1516 fn cast(syntax: SyntaxNode) -> Option<Self> {1517 if Self::can_cast(syntax.kind()) {1518 Some(Self { syntax })1519 } else {1520 None1521 }1522 }1523 fn syntax(&self) -> &SyntaxNode {1524 &self.syntax1525 }1526}1527impl AstNode for SliceDescEnd {1528 fn can_cast(kind: SyntaxKind) -> bool {1529 kind == SLICE_DESC_END1530 }1531 fn cast(syntax: SyntaxNode) -> Option<Self> {1532 if Self::can_cast(syntax.kind()) {1533 Some(Self { syntax })1534 } else {1535 None1536 }1537 }1538 fn syntax(&self) -> &SyntaxNode {1539 &self.syntax1540 }1541}1542impl AstNode for SliceDescStep {1543 fn can_cast(kind: SyntaxKind) -> bool {1544 kind == SLICE_DESC_STEP1545 }1546 fn cast(syntax: SyntaxNode) -> Option<Self> {1547 if Self::can_cast(syntax.kind()) {1548 Some(Self { syntax })1549 } else {1550 None1551 }1552 }1553 fn syntax(&self) -> &SyntaxNode {1554 &self.syntax1555 }1556}1557impl AstNode for Arg {1558 fn can_cast(kind: SyntaxKind) -> bool {1559 kind == ARG1560 }1561 fn cast(syntax: SyntaxNode) -> Option<Self> {1562 if Self::can_cast(syntax.kind()) {1563 Some(Self { syntax })1564 } else {1565 None1566 }1567 }1568 fn syntax(&self) -> &SyntaxNode {1569 &self.syntax1570 }1571}1572impl AstNode for ObjBodyComp {1573 fn can_cast(kind: SyntaxKind) -> bool {1574 kind == OBJ_BODY_COMP1575 }1576 fn cast(syntax: SyntaxNode) -> Option<Self> {1577 if Self::can_cast(syntax.kind()) {1578 Some(Self { syntax })1579 } else {1580 None1581 }1582 }1583 fn syntax(&self) -> &SyntaxNode {1584 &self.syntax1585 }1586}1587impl AstNode for ObjBodyMemberList {1588 fn can_cast(kind: SyntaxKind) -> bool {1589 kind == OBJ_BODY_MEMBER_LIST1590 }1591 fn cast(syntax: SyntaxNode) -> Option<Self> {1592 if Self::can_cast(syntax.kind()) {1593 Some(Self { syntax })1594 } else {1595 None1596 }1597 }1598 fn syntax(&self) -> &SyntaxNode {1599 &self.syntax1600 }1601}1602impl AstNode for MemberBindStmt {1603 fn can_cast(kind: SyntaxKind) -> bool {1604 kind == MEMBER_BIND_STMT1605 }1606 fn cast(syntax: SyntaxNode) -> Option<Self> {1607 if Self::can_cast(syntax.kind()) {1608 Some(Self { syntax })1609 } else {1610 None1611 }1612 }1613 fn syntax(&self) -> &SyntaxNode {1614 &self.syntax1615 }1616}1617impl AstNode for ObjLocal {1618 fn can_cast(kind: SyntaxKind) -> bool {1619 kind == OBJ_LOCAL1620 }1621 fn cast(syntax: SyntaxNode) -> Option<Self> {1622 if Self::can_cast(syntax.kind()) {1623 Some(Self { syntax })1624 } else {1625 None1626 }1627 }1628 fn syntax(&self) -> &SyntaxNode {1629 &self.syntax1630 }1631}1632impl AstNode for MemberAssertStmt {1633 fn can_cast(kind: SyntaxKind) -> bool {1634 kind == MEMBER_ASSERT_STMT1635 }1636 fn cast(syntax: SyntaxNode) -> Option<Self> {1637 if Self::can_cast(syntax.kind()) {1638 Some(Self { syntax })1639 } else {1640 None1641 }1642 }1643 fn syntax(&self) -> &SyntaxNode {1644 &self.syntax1645 }1646}1647impl AstNode for MemberFieldNormal {1648 fn can_cast(kind: SyntaxKind) -> bool {1649 kind == MEMBER_FIELD_NORMAL1650 }1651 fn cast(syntax: SyntaxNode) -> Option<Self> {1652 if Self::can_cast(syntax.kind()) {1653 Some(Self { syntax })1654 } else {1655 None1656 }1657 }1658 fn syntax(&self) -> &SyntaxNode {1659 &self.syntax1660 }1661}1662impl AstNode for Visibility {1663 fn can_cast(kind: SyntaxKind) -> bool {1664 kind == VISIBILITY1665 }1666 fn cast(syntax: SyntaxNode) -> Option<Self> {1667 if Self::can_cast(syntax.kind()) {1668 Some(Self { syntax })1669 } else {1670 None1671 }1672 }1673 fn syntax(&self) -> &SyntaxNode {1674 &self.syntax1675 }1676}1677impl AstNode for MemberFieldMethod {1678 fn can_cast(kind: SyntaxKind) -> bool {1679 kind == MEMBER_FIELD_METHOD1680 }1681 fn cast(syntax: SyntaxNode) -> Option<Self> {1682 if Self::can_cast(syntax.kind()) {1683 Some(Self { syntax })1684 } else {1685 None1686 }1687 }1688 fn syntax(&self) -> &SyntaxNode {1689 &self.syntax1690 }1691}1692impl AstNode for FieldNameFixed {1693 fn can_cast(kind: SyntaxKind) -> bool {1694 kind == FIELD_NAME_FIXED1695 }1696 fn cast(syntax: SyntaxNode) -> Option<Self> {1697 if Self::can_cast(syntax.kind()) {1698 Some(Self { syntax })1699 } else {1700 None1701 }1702 }1703 fn syntax(&self) -> &SyntaxNode {1704 &self.syntax1705 }1706}1707impl AstNode for FieldNameDynamic {1708 fn can_cast(kind: SyntaxKind) -> bool {1709 kind == FIELD_NAME_DYNAMIC1710 }1711 fn cast(syntax: SyntaxNode) -> Option<Self> {1712 if Self::can_cast(syntax.kind()) {1713 Some(Self { syntax })1714 } else {1715 None1716 }1717 }1718 fn syntax(&self) -> &SyntaxNode {1719 &self.syntax1720 }1721}1722impl AstNode for ForSpec {1723 fn can_cast(kind: SyntaxKind) -> bool {1724 kind == FOR_SPEC1725 }1726 fn cast(syntax: SyntaxNode) -> Option<Self> {1727 if Self::can_cast(syntax.kind()) {1728 Some(Self { syntax })1729 } else {1730 None1731 }1732 }1733 fn syntax(&self) -> &SyntaxNode {1734 &self.syntax1735 }1736}1737impl AstNode for ForObjSpec {1738 fn can_cast(kind: SyntaxKind) -> bool {1739 kind == FOR_OBJ_SPEC1740 }1741 fn cast(syntax: SyntaxNode) -> Option<Self> {1742 if Self::can_cast(syntax.kind()) {1743 Some(Self { syntax })1744 } else {1745 None1746 }1747 }1748 fn syntax(&self) -> &SyntaxNode {1749 &self.syntax1750 }1751}1752impl AstNode for IfSpec {1753 fn can_cast(kind: SyntaxKind) -> bool {1754 kind == IF_SPEC1755 }1756 fn cast(syntax: SyntaxNode) -> Option<Self> {1757 if Self::can_cast(syntax.kind()) {1758 Some(Self { syntax })1759 } else {1760 None1761 }1762 }1763 fn syntax(&self) -> &SyntaxNode {1764 &self.syntax1765 }1766}1767impl AstNode for BindDestruct {1768 fn can_cast(kind: SyntaxKind) -> bool {1769 kind == BIND_DESTRUCT1770 }1771 fn cast(syntax: SyntaxNode) -> Option<Self> {1772 if Self::can_cast(syntax.kind()) {1773 Some(Self { syntax })1774 } else {1775 None1776 }1777 }1778 fn syntax(&self) -> &SyntaxNode {1779 &self.syntax1780 }1781}1782impl AstNode for BindFunction {1783 fn can_cast(kind: SyntaxKind) -> bool {1784 kind == BIND_FUNCTION1785 }1786 fn cast(syntax: SyntaxNode) -> Option<Self> {1787 if Self::can_cast(syntax.kind()) {1788 Some(Self { syntax })1789 } else {1790 None1791 }1792 }1793 fn syntax(&self) -> &SyntaxNode {1794 &self.syntax1795 }1796}1797impl AstNode for Param {1798 fn can_cast(kind: SyntaxKind) -> bool {1799 kind == PARAM1800 }1801 fn cast(syntax: SyntaxNode) -> Option<Self> {1802 if Self::can_cast(syntax.kind()) {1803 Some(Self { syntax })1804 } else {1805 None1806 }1807 }1808 fn syntax(&self) -> &SyntaxNode {1809 &self.syntax1810 }1811}1812impl AstNode for DestructFull {1813 fn can_cast(kind: SyntaxKind) -> bool {1814 kind == DESTRUCT_FULL1815 }1816 fn cast(syntax: SyntaxNode) -> Option<Self> {1817 if Self::can_cast(syntax.kind()) {1818 Some(Self { syntax })1819 } else {1820 None1821 }1822 }1823 fn syntax(&self) -> &SyntaxNode {1824 &self.syntax1825 }1826}1827impl AstNode for DestructSkip {1828 fn can_cast(kind: SyntaxKind) -> bool {1829 kind == DESTRUCT_SKIP1830 }1831 fn cast(syntax: SyntaxNode) -> Option<Self> {1832 if Self::can_cast(syntax.kind()) {1833 Some(Self { syntax })1834 } else {1835 None1836 }1837 }1838 fn syntax(&self) -> &SyntaxNode {1839 &self.syntax1840 }1841}1842impl AstNode for DestructArray {1843 fn can_cast(kind: SyntaxKind) -> bool {1844 kind == DESTRUCT_ARRAY1845 }1846 fn cast(syntax: SyntaxNode) -> Option<Self> {1847 if Self::can_cast(syntax.kind()) {1848 Some(Self { syntax })1849 } else {1850 None1851 }1852 }1853 fn syntax(&self) -> &SyntaxNode {1854 &self.syntax1855 }1856}1857impl AstNode for DestructObject {1858 fn can_cast(kind: SyntaxKind) -> bool {1859 kind == DESTRUCT_OBJECT1860 }1861 fn cast(syntax: SyntaxNode) -> Option<Self> {1862 if Self::can_cast(syntax.kind()) {1863 Some(Self { syntax })1864 } else {1865 None1866 }1867 }1868 fn syntax(&self) -> &SyntaxNode {1869 &self.syntax1870 }1871}1872impl AstNode for DestructObjectField {1873 fn can_cast(kind: SyntaxKind) -> bool {1874 kind == DESTRUCT_OBJECT_FIELD1875 }1876 fn cast(syntax: SyntaxNode) -> Option<Self> {1877 if Self::can_cast(syntax.kind()) {1878 Some(Self { syntax })1879 } else {1880 None1881 }1882 }1883 fn syntax(&self) -> &SyntaxNode {1884 &self.syntax1885 }1886}1887impl AstNode for DestructRest {1888 fn can_cast(kind: SyntaxKind) -> bool {1889 kind == DESTRUCT_REST1890 }1891 fn cast(syntax: SyntaxNode) -> Option<Self> {1892 if Self::can_cast(syntax.kind()) {1893 Some(Self { syntax })1894 } else {1895 None1896 }1897 }1898 fn syntax(&self) -> &SyntaxNode {1899 &self.syntax1900 }1901}1902impl AstNode for DestructArrayElement {1903 fn can_cast(kind: SyntaxKind) -> bool {1904 kind == DESTRUCT_ARRAY_ELEMENT1905 }1906 fn cast(syntax: SyntaxNode) -> Option<Self> {1907 if Self::can_cast(syntax.kind()) {1908 Some(Self { syntax })1909 } else {1910 None1911 }1912 }1913 fn syntax(&self) -> &SyntaxNode {1914 &self.syntax1915 }1916}1917impl From<SuffixIndex> for Suffix {1918 fn from(node: SuffixIndex) -> Suffix {1919 Suffix::SuffixIndex(node)1920 }1921}1922impl From<SuffixIndexExpr> for Suffix {1923 fn from(node: SuffixIndexExpr) -> Suffix {1924 Suffix::SuffixIndexExpr(node)1925 }1926}1927impl From<SuffixSlice> for Suffix {1928 fn from(node: SuffixSlice) -> Suffix {1929 Suffix::SuffixSlice(node)1930 }1931}1932impl From<SuffixApply> for Suffix {1933 fn from(node: SuffixApply) -> Suffix {1934 Suffix::SuffixApply(node)1935 }1936}1937impl AstNode for Suffix {1938 fn can_cast(kind: SyntaxKind) -> bool {1939 match kind {1940 SUFFIX_INDEX | SUFFIX_INDEX_EXPR | SUFFIX_SLICE | SUFFIX_APPLY => true,1941 _ => false,1942 }1943 }1944 fn cast(syntax: SyntaxNode) -> Option<Self> {1945 let res = match syntax.kind() {1946 SUFFIX_INDEX => Suffix::SuffixIndex(SuffixIndex { syntax }),1947 SUFFIX_INDEX_EXPR => Suffix::SuffixIndexExpr(SuffixIndexExpr { syntax }),1948 SUFFIX_SLICE => Suffix::SuffixSlice(SuffixSlice { syntax }),1949 SUFFIX_APPLY => Suffix::SuffixApply(SuffixApply { syntax }),1950 _ => return None,1951 };1952 Some(res)1953 }1954 fn syntax(&self) -> &SyntaxNode {1955 match self {1956 Suffix::SuffixIndex(it) => &it.syntax,1957 Suffix::SuffixIndexExpr(it) => &it.syntax,1958 Suffix::SuffixSlice(it) => &it.syntax,1959 Suffix::SuffixApply(it) => &it.syntax,1960 }1961 }1962}1963impl From<BindDestruct> for Bind {1964 fn from(node: BindDestruct) -> Bind {1965 Bind::BindDestruct(node)1966 }1967}1968impl From<BindFunction> for Bind {1969 fn from(node: BindFunction) -> Bind {1970 Bind::BindFunction(node)1971 }1972}1973impl AstNode for Bind {1974 fn can_cast(kind: SyntaxKind) -> bool {1975 match kind {1976 BIND_DESTRUCT | BIND_FUNCTION => true,1977 _ => false,1978 }1979 }1980 fn cast(syntax: SyntaxNode) -> Option<Self> {1981 let res = match syntax.kind() {1982 BIND_DESTRUCT => Bind::BindDestruct(BindDestruct { syntax }),1983 BIND_FUNCTION => Bind::BindFunction(BindFunction { syntax }),1984 _ => return None,1985 };1986 Some(res)1987 }1988 fn syntax(&self) -> &SyntaxNode {1989 match self {1990 Bind::BindDestruct(it) => &it.syntax,1991 Bind::BindFunction(it) => &it.syntax,1992 }1993 }1994}1995impl From<StmtLocal> for Stmt {1996 fn from(node: StmtLocal) -> Stmt {1997 Stmt::StmtLocal(node)1998 }1999}2000impl From<StmtAssert> for Stmt {2001 fn from(node: StmtAssert) -> Stmt {2002 Stmt::StmtAssert(node)2003 }2004}2005impl AstNode for Stmt {2006 fn can_cast(kind: SyntaxKind) -> bool {2007 match kind {2008 STMT_LOCAL | STMT_ASSERT => true,2009 _ => false,2010 }2011 }2012 fn cast(syntax: SyntaxNode) -> Option<Self> {2013 let res = match syntax.kind() {2014 STMT_LOCAL => Stmt::StmtLocal(StmtLocal { syntax }),2015 STMT_ASSERT => Stmt::StmtAssert(StmtAssert { syntax }),2016 _ => return None,2017 };2018 Some(res)2019 }2020 fn syntax(&self) -> &SyntaxNode {2021 match self {2022 Stmt::StmtLocal(it) => &it.syntax,2023 Stmt::StmtAssert(it) => &it.syntax,2024 }2025 }2026}2027impl From<ObjBodyComp> for ObjBody {2028 fn from(node: ObjBodyComp) -> ObjBody {2029 ObjBody::ObjBodyComp(node)2030 }2031}2032impl From<ObjBodyMemberList> for ObjBody {2033 fn from(node: ObjBodyMemberList) -> ObjBody {2034 ObjBody::ObjBodyMemberList(node)2035 }2036}2037impl AstNode for ObjBody {2038 fn can_cast(kind: SyntaxKind) -> bool {2039 match kind {2040 OBJ_BODY_COMP | OBJ_BODY_MEMBER_LIST => true,2041 _ => false,2042 }2043 }2044 fn cast(syntax: SyntaxNode) -> Option<Self> {2045 let res = match syntax.kind() {2046 OBJ_BODY_COMP => ObjBody::ObjBodyComp(ObjBodyComp { syntax }),2047 OBJ_BODY_MEMBER_LIST => ObjBody::ObjBodyMemberList(ObjBodyMemberList { syntax }),2048 _ => return None,2049 };2050 Some(res)2051 }2052 fn syntax(&self) -> &SyntaxNode {2053 match self {2054 ObjBody::ObjBodyComp(it) => &it.syntax,2055 ObjBody::ObjBodyMemberList(it) => &it.syntax,2056 }2057 }2058}2059impl From<ForSpec> for CompSpec {2060 fn from(node: ForSpec) -> CompSpec {2061 CompSpec::ForSpec(node)2062 }2063}2064impl From<ForObjSpec> for CompSpec {2065 fn from(node: ForObjSpec) -> CompSpec {2066 CompSpec::ForObjSpec(node)2067 }2068}2069impl From<IfSpec> for CompSpec {2070 fn from(node: IfSpec) -> CompSpec {2071 CompSpec::IfSpec(node)2072 }2073}2074impl AstNode for CompSpec {2075 fn can_cast(kind: SyntaxKind) -> bool {2076 match kind {2077 FOR_SPEC | FOR_OBJ_SPEC | IF_SPEC => true,2078 _ => false,2079 }2080 }2081 fn cast(syntax: SyntaxNode) -> Option<Self> {2082 let res = match syntax.kind() {2083 FOR_SPEC => CompSpec::ForSpec(ForSpec { syntax }),2084 FOR_OBJ_SPEC => CompSpec::ForObjSpec(ForObjSpec { syntax }),2085 IF_SPEC => CompSpec::IfSpec(IfSpec { syntax }),2086 _ => return None,2087 };2088 Some(res)2089 }2090 fn syntax(&self) -> &SyntaxNode {2091 match self {2092 CompSpec::ForSpec(it) => &it.syntax,2093 CompSpec::ForObjSpec(it) => &it.syntax,2094 CompSpec::IfSpec(it) => &it.syntax,2095 }2096 }2097}2098impl From<ExprBinary> for ExprBase {2099 fn from(node: ExprBinary) -> ExprBase {2100 ExprBase::ExprBinary(node)2101 }2102}2103impl From<ExprUnary> for ExprBase {2104 fn from(node: ExprUnary) -> ExprBase {2105 ExprBase::ExprUnary(node)2106 }2107}2108impl From<ExprObjExtend> for ExprBase {2109 fn from(node: ExprObjExtend) -> ExprBase {2110 ExprBase::ExprObjExtend(node)2111 }2112}2113impl From<ExprParened> for ExprBase {2114 fn from(node: ExprParened) -> ExprBase {2115 ExprBase::ExprParened(node)2116 }2117}2118impl From<ExprString> for ExprBase {2119 fn from(node: ExprString) -> ExprBase {2120 ExprBase::ExprString(node)2121 }2122}2123impl From<ExprNumber> for ExprBase {2124 fn from(node: ExprNumber) -> ExprBase {2125 ExprBase::ExprNumber(node)2126 }2127}2128impl From<ExprLiteral> for ExprBase {2129 fn from(node: ExprLiteral) -> ExprBase {2130 ExprBase::ExprLiteral(node)2131 }2132}2133impl From<ExprArray> for ExprBase {2134 fn from(node: ExprArray) -> ExprBase {2135 ExprBase::ExprArray(node)2136 }2137}2138impl From<ExprObject> for ExprBase {2139 fn from(node: ExprObject) -> ExprBase {2140 ExprBase::ExprObject(node)2141 }2142}2143impl From<ExprArrayComp> for ExprBase {2144 fn from(node: ExprArrayComp) -> ExprBase {2145 ExprBase::ExprArrayComp(node)2146 }2147}2148impl From<ExprImport> for ExprBase {2149 fn from(node: ExprImport) -> ExprBase {2150 ExprBase::ExprImport(node)2151 }2152}2153impl From<ExprVar> for ExprBase {2154 fn from(node: ExprVar) -> ExprBase {2155 ExprBase::ExprVar(node)2156 }2157}2158impl From<ExprIfThenElse> for ExprBase {2159 fn from(node: ExprIfThenElse) -> ExprBase {2160 ExprBase::ExprIfThenElse(node)2161 }2162}2163impl From<ExprFunction> for ExprBase {2164 fn from(node: ExprFunction) -> ExprBase {2165 ExprBase::ExprFunction(node)2166 }2167}2168impl From<ExprError> for ExprBase {2169 fn from(node: ExprError) -> ExprBase {2170 ExprBase::ExprError(node)2171 }2172}2173impl AstNode for ExprBase {2174 fn can_cast(kind: SyntaxKind) -> bool {2175 match kind {2176 EXPR_BINARY | EXPR_UNARY | EXPR_OBJ_EXTEND | EXPR_PARENED | EXPR_STRING2177 | EXPR_NUMBER | EXPR_LITERAL | EXPR_ARRAY | EXPR_OBJECT | EXPR_ARRAY_COMP2178 | EXPR_IMPORT | EXPR_VAR | EXPR_IF_THEN_ELSE | EXPR_FUNCTION | EXPR_ERROR => true,2179 _ => false,2180 }2181 }2182 fn cast(syntax: SyntaxNode) -> Option<Self> {2183 let res = match syntax.kind() {2184 EXPR_BINARY => ExprBase::ExprBinary(ExprBinary { syntax }),2185 EXPR_UNARY => ExprBase::ExprUnary(ExprUnary { syntax }),2186 EXPR_OBJ_EXTEND => ExprBase::ExprObjExtend(ExprObjExtend { syntax }),2187 EXPR_PARENED => ExprBase::ExprParened(ExprParened { syntax }),2188 EXPR_STRING => ExprBase::ExprString(ExprString { syntax }),2189 EXPR_NUMBER => ExprBase::ExprNumber(ExprNumber { syntax }),2190 EXPR_LITERAL => ExprBase::ExprLiteral(ExprLiteral { syntax }),2191 EXPR_ARRAY => ExprBase::ExprArray(ExprArray { syntax }),2192 EXPR_OBJECT => ExprBase::ExprObject(ExprObject { syntax }),2193 EXPR_ARRAY_COMP => ExprBase::ExprArrayComp(ExprArrayComp { syntax }),2194 EXPR_IMPORT => ExprBase::ExprImport(ExprImport { syntax }),2195 EXPR_VAR => ExprBase::ExprVar(ExprVar { syntax }),2196 EXPR_IF_THEN_ELSE => ExprBase::ExprIfThenElse(ExprIfThenElse { syntax }),2197 EXPR_FUNCTION => ExprBase::ExprFunction(ExprFunction { syntax }),2198 EXPR_ERROR => ExprBase::ExprError(ExprError { syntax }),2199 _ => return None,2200 };2201 Some(res)2202 }2203 fn syntax(&self) -> &SyntaxNode {2204 match self {2205 ExprBase::ExprBinary(it) => &it.syntax,2206 ExprBase::ExprUnary(it) => &it.syntax,2207 ExprBase::ExprObjExtend(it) => &it.syntax,2208 ExprBase::ExprParened(it) => &it.syntax,2209 ExprBase::ExprString(it) => &it.syntax,2210 ExprBase::ExprNumber(it) => &it.syntax,2211 ExprBase::ExprLiteral(it) => &it.syntax,2212 ExprBase::ExprArray(it) => &it.syntax,2213 ExprBase::ExprObject(it) => &it.syntax,2214 ExprBase::ExprArrayComp(it) => &it.syntax,2215 ExprBase::ExprImport(it) => &it.syntax,2216 ExprBase::ExprVar(it) => &it.syntax,2217 ExprBase::ExprIfThenElse(it) => &it.syntax,2218 ExprBase::ExprFunction(it) => &it.syntax,2219 ExprBase::ExprError(it) => &it.syntax,2220 }2221 }2222}2223impl From<MemberBindStmt> for MemberComp {2224 fn from(node: MemberBindStmt) -> MemberComp {2225 MemberComp::MemberBindStmt(node)2226 }2227}2228impl From<MemberFieldNormal> for MemberComp {2229 fn from(node: MemberFieldNormal) -> MemberComp {2230 MemberComp::MemberFieldNormal(node)2231 }2232}2233impl From<MemberFieldMethod> for MemberComp {2234 fn from(node: MemberFieldMethod) -> MemberComp {2235 MemberComp::MemberFieldMethod(node)2236 }2237}2238impl AstNode for MemberComp {2239 fn can_cast(kind: SyntaxKind) -> bool {2240 match kind {2241 MEMBER_BIND_STMT | MEMBER_FIELD_NORMAL | MEMBER_FIELD_METHOD => true,2242 _ => false,2243 }2244 }2245 fn cast(syntax: SyntaxNode) -> Option<Self> {2246 let res = match syntax.kind() {2247 MEMBER_BIND_STMT => MemberComp::MemberBindStmt(MemberBindStmt { syntax }),2248 MEMBER_FIELD_NORMAL => MemberComp::MemberFieldNormal(MemberFieldNormal { syntax }),2249 MEMBER_FIELD_METHOD => MemberComp::MemberFieldMethod(MemberFieldMethod { syntax }),2250 _ => return None,2251 };2252 Some(res)2253 }2254 fn syntax(&self) -> &SyntaxNode {2255 match self {2256 MemberComp::MemberBindStmt(it) => &it.syntax,2257 MemberComp::MemberFieldNormal(it) => &it.syntax,2258 MemberComp::MemberFieldMethod(it) => &it.syntax,2259 }2260 }2261}2262impl From<MemberBindStmt> for Member {2263 fn from(node: MemberBindStmt) -> Member {2264 Member::MemberBindStmt(node)2265 }2266}2267impl From<MemberAssertStmt> for Member {2268 fn from(node: MemberAssertStmt) -> Member {2269 Member::MemberAssertStmt(node)2270 }2271}2272impl From<MemberFieldNormal> for Member {2273 fn from(node: MemberFieldNormal) -> Member {2274 Member::MemberFieldNormal(node)2275 }2276}2277impl From<MemberFieldMethod> for Member {2278 fn from(node: MemberFieldMethod) -> Member {2279 Member::MemberFieldMethod(node)2280 }2281}2282impl AstNode for Member {2283 fn can_cast(kind: SyntaxKind) -> bool {2284 match kind {2285 MEMBER_BIND_STMT | MEMBER_ASSERT_STMT | MEMBER_FIELD_NORMAL | MEMBER_FIELD_METHOD => {2286 true2287 }2288 _ => false,2289 }2290 }2291 fn cast(syntax: SyntaxNode) -> Option<Self> {2292 let res = match syntax.kind() {2293 MEMBER_BIND_STMT => Member::MemberBindStmt(MemberBindStmt { syntax }),2294 MEMBER_ASSERT_STMT => Member::MemberAssertStmt(MemberAssertStmt { syntax }),2295 MEMBER_FIELD_NORMAL => Member::MemberFieldNormal(MemberFieldNormal { syntax }),2296 MEMBER_FIELD_METHOD => Member::MemberFieldMethod(MemberFieldMethod { syntax }),2297 _ => return None,2298 };2299 Some(res)2300 }2301 fn syntax(&self) -> &SyntaxNode {2302 match self {2303 Member::MemberBindStmt(it) => &it.syntax,2304 Member::MemberAssertStmt(it) => &it.syntax,2305 Member::MemberFieldNormal(it) => &it.syntax,2306 Member::MemberFieldMethod(it) => &it.syntax,2307 }2308 }2309}2310impl From<FieldNameFixed> for FieldName {2311 fn from(node: FieldNameFixed) -> FieldName {2312 FieldName::FieldNameFixed(node)2313 }2314}2315impl From<FieldNameDynamic> for FieldName {2316 fn from(node: FieldNameDynamic) -> FieldName {2317 FieldName::FieldNameDynamic(node)2318 }2319}2320impl AstNode for FieldName {2321 fn can_cast(kind: SyntaxKind) -> bool {2322 match kind {2323 FIELD_NAME_FIXED | FIELD_NAME_DYNAMIC => true,2324 _ => false,2325 }2326 }2327 fn cast(syntax: SyntaxNode) -> Option<Self> {2328 let res = match syntax.kind() {2329 FIELD_NAME_FIXED => FieldName::FieldNameFixed(FieldNameFixed { syntax }),2330 FIELD_NAME_DYNAMIC => FieldName::FieldNameDynamic(FieldNameDynamic { syntax }),2331 _ => return None,2332 };2333 Some(res)2334 }2335 fn syntax(&self) -> &SyntaxNode {2336 match self {2337 FieldName::FieldNameFixed(it) => &it.syntax,2338 FieldName::FieldNameDynamic(it) => &it.syntax,2339 }2340 }2341}2342impl From<DestructFull> for Destruct {2343 fn from(node: DestructFull) -> Destruct {2344 Destruct::DestructFull(node)2345 }2346}2347impl From<DestructSkip> for Destruct {2348 fn from(node: DestructSkip) -> Destruct {2349 Destruct::DestructSkip(node)2350 }2351}2352impl From<DestructArray> for Destruct {2353 fn from(node: DestructArray) -> Destruct {2354 Destruct::DestructArray(node)2355 }2356}2357impl From<DestructObject> for Destruct {2358 fn from(node: DestructObject) -> Destruct {2359 Destruct::DestructObject(node)2360 }2361}2362impl AstNode for Destruct {2363 fn can_cast(kind: SyntaxKind) -> bool {2364 match kind {2365 DESTRUCT_FULL | DESTRUCT_SKIP | DESTRUCT_ARRAY | DESTRUCT_OBJECT => true,2366 _ => false,2367 }2368 }2369 fn cast(syntax: SyntaxNode) -> Option<Self> {2370 let res = match syntax.kind() {2371 DESTRUCT_FULL => Destruct::DestructFull(DestructFull { syntax }),2372 DESTRUCT_SKIP => Destruct::DestructSkip(DestructSkip { syntax }),2373 DESTRUCT_ARRAY => Destruct::DestructArray(DestructArray { syntax }),2374 DESTRUCT_OBJECT => Destruct::DestructObject(DestructObject { syntax }),2375 _ => return None,2376 };2377 Some(res)2378 }2379 fn syntax(&self) -> &SyntaxNode {2380 match self {2381 Destruct::DestructFull(it) => &it.syntax,2382 Destruct::DestructSkip(it) => &it.syntax,2383 Destruct::DestructArray(it) => &it.syntax,2384 Destruct::DestructObject(it) => &it.syntax,2385 }2386 }2387}2388impl From<DestructArrayElement> for DestructArrayPart {2389 fn from(node: DestructArrayElement) -> DestructArrayPart {2390 DestructArrayPart::DestructArrayElement(node)2391 }2392}2393impl From<DestructRest> for DestructArrayPart {2394 fn from(node: DestructRest) -> DestructArrayPart {2395 DestructArrayPart::DestructRest(node)2396 }2397}2398impl AstNode for DestructArrayPart {2399 fn can_cast(kind: SyntaxKind) -> bool {2400 match kind {2401 DESTRUCT_ARRAY_ELEMENT | DESTRUCT_REST => true,2402 _ => false,2403 }2404 }2405 fn cast(syntax: SyntaxNode) -> Option<Self> {2406 let res = match syntax.kind() {2407 DESTRUCT_ARRAY_ELEMENT => {2408 DestructArrayPart::DestructArrayElement(DestructArrayElement { syntax })2409 }2410 DESTRUCT_REST => DestructArrayPart::DestructRest(DestructRest { syntax }),2411 _ => return None,2412 };2413 Some(res)2414 }2415 fn syntax(&self) -> &SyntaxNode {2416 match self {2417 DestructArrayPart::DestructArrayElement(it) => &it.syntax,2418 DestructArrayPart::DestructRest(it) => &it.syntax,2419 }2420 }2421}2422impl AstToken for BinaryOperator {2423 fn can_cast(kind: SyntaxKind) -> bool {2424 BinaryOperatorKind::can_cast(kind)2425 }2426 fn cast(syntax: SyntaxToken) -> Option<Self> {2427 let kind = BinaryOperatorKind::cast(syntax.kind())?;2428 Some(BinaryOperator { syntax, kind })2429 }2430 fn syntax(&self) -> &SyntaxToken {2431 &self.syntax2432 }2433}2434impl BinaryOperatorKind {2435 fn can_cast(kind: SyntaxKind) -> bool {2436 match kind {2437 OR | NULL_COAELSE | AND | BIT_OR | BIT_XOR | BIT_AND | EQ | NE | LT | GT | LE | GE2438 | IN_KW | LHS | RHS | PLUS | MINUS | MUL | DIV | MODULO | META_OBJECT_APPLY2439 | ERROR_NO_OPERATOR => true,2440 _ => false,2441 }2442 }2443 pub fn cast(kind: SyntaxKind) -> Option<Self> {2444 let res = match kind {2445 OR => Self::Or,2446 NULL_COAELSE => Self::NullCoaelse,2447 AND => Self::And,2448 BIT_OR => Self::BitOr,2449 BIT_XOR => Self::BitXor,2450 BIT_AND => Self::BitAnd,2451 EQ => Self::Eq,2452 NE => Self::Ne,2453 LT => Self::Lt,2454 GT => Self::Gt,2455 LE => Self::Le,2456 GE => Self::Ge,2457 IN_KW => Self::InKw,2458 LHS => Self::Lhs,2459 RHS => Self::Rhs,2460 PLUS => Self::Plus,2461 MINUS => Self::Minus,2462 MUL => Self::Mul,2463 DIV => Self::Div,2464 MODULO => Self::Modulo,2465 META_OBJECT_APPLY => Self::MetaObjectApply,2466 ERROR_NO_OPERATOR => Self::ErrorNoOperator,2467 _ => return None,2468 };2469 Some(res)2470 }2471}2472impl BinaryOperator {2473 pub fn kind(&self) -> BinaryOperatorKind {2474 self.kind2475 }2476}2477impl std::fmt::Display for BinaryOperator {2478 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2479 std::fmt::Display::fmt(self.syntax(), f)2480 }2481}2482impl AstToken for UnaryOperator {2483 fn can_cast(kind: SyntaxKind) -> bool {2484 UnaryOperatorKind::can_cast(kind)2485 }2486 fn cast(syntax: SyntaxToken) -> Option<Self> {2487 let kind = UnaryOperatorKind::cast(syntax.kind())?;2488 Some(UnaryOperator { syntax, kind })2489 }2490 fn syntax(&self) -> &SyntaxToken {2491 &self.syntax2492 }2493}2494impl UnaryOperatorKind {2495 fn can_cast(kind: SyntaxKind) -> bool {2496 match kind {2497 MINUS | NOT | BIT_NOT => true,2498 _ => false,2499 }2500 }2501 pub fn cast(kind: SyntaxKind) -> Option<Self> {2502 let res = match kind {2503 MINUS => Self::Minus,2504 NOT => Self::Not,2505 BIT_NOT => Self::BitNot,2506 _ => return None,2507 };2508 Some(res)2509 }2510}2511impl UnaryOperator {2512 pub fn kind(&self) -> UnaryOperatorKind {2513 self.kind2514 }2515}2516impl std::fmt::Display for UnaryOperator {2517 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2518 std::fmt::Display::fmt(self.syntax(), f)2519 }2520}2521impl AstToken for Literal {2522 fn can_cast(kind: SyntaxKind) -> bool {2523 LiteralKind::can_cast(kind)2524 }2525 fn cast(syntax: SyntaxToken) -> Option<Self> {2526 let kind = LiteralKind::cast(syntax.kind())?;2527 Some(Literal { syntax, kind })2528 }2529 fn syntax(&self) -> &SyntaxToken {2530 &self.syntax2531 }2532}2533impl LiteralKind {2534 fn can_cast(kind: SyntaxKind) -> bool {2535 match kind {2536 NULL_KW | TRUE_KW | FALSE_KW | SELF_KW | DOLLAR | SUPER_KW => true,2537 _ => false,2538 }2539 }2540 pub fn cast(kind: SyntaxKind) -> Option<Self> {2541 let res = match kind {2542 NULL_KW => Self::NullKw,2543 TRUE_KW => Self::TrueKw,2544 FALSE_KW => Self::FalseKw,2545 SELF_KW => Self::SelfKw,2546 DOLLAR => Self::Dollar,2547 SUPER_KW => Self::SuperKw,2548 _ => return None,2549 };2550 Some(res)2551 }2552}2553impl Literal {2554 pub fn kind(&self) -> LiteralKind {2555 self.kind2556 }2557}2558impl std::fmt::Display for Literal {2559 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2560 std::fmt::Display::fmt(self.syntax(), f)2561 }2562}2563impl AstToken for Text {2564 fn can_cast(kind: SyntaxKind) -> bool {2565 TextKind::can_cast(kind)2566 }2567 fn cast(syntax: SyntaxToken) -> Option<Self> {2568 let kind = TextKind::cast(syntax.kind())?;2569 Some(Text { syntax, kind })2570 }2571 fn syntax(&self) -> &SyntaxToken {2572 &self.syntax2573 }2574}2575impl TextKind {2576 fn can_cast(kind: SyntaxKind) -> bool {2577 match kind {2578 STRING_DOUBLE2579 | ERROR_STRING_DOUBLE_UNTERMINATED2580 | STRING_SINGLE2581 | ERROR_STRING_SINGLE_UNTERMINATED2582 | STRING_DOUBLE_VERBATIM2583 | ERROR_STRING_DOUBLE_VERBATIM_UNTERMINATED2584 | STRING_SINGLE_VERBATIM2585 | ERROR_STRING_SINGLE_VERBATIM_UNTERMINATED2586 | ERROR_STRING_VERBATIM_MISSING_QUOTES2587 | STRING_BLOCK2588 | ERROR_STRING_BLOCK_UNEXPECTED_END2589 | ERROR_STRING_BLOCK_MISSING_NEW_LINE2590 | ERROR_STRING_BLOCK_MISSING_TERMINATION2591 | ERROR_STRING_BLOCK_MISSING_INDENT => true,2592 _ => false,2593 }2594 }2595 pub fn cast(kind: SyntaxKind) -> Option<Self> {2596 let res = match kind {2597 STRING_DOUBLE => Self::StringDouble,2598 ERROR_STRING_DOUBLE_UNTERMINATED => Self::ErrorStringDoubleUnterminated,2599 STRING_SINGLE => Self::StringSingle,2600 ERROR_STRING_SINGLE_UNTERMINATED => Self::ErrorStringSingleUnterminated,2601 STRING_DOUBLE_VERBATIM => Self::StringDoubleVerbatim,2602 ERROR_STRING_DOUBLE_VERBATIM_UNTERMINATED => {2603 Self::ErrorStringDoubleVerbatimUnterminated2604 }2605 STRING_SINGLE_VERBATIM => Self::StringSingleVerbatim,2606 ERROR_STRING_SINGLE_VERBATIM_UNTERMINATED => {2607 Self::ErrorStringSingleVerbatimUnterminated2608 }2609 ERROR_STRING_VERBATIM_MISSING_QUOTES => Self::ErrorStringVerbatimMissingQuotes,2610 STRING_BLOCK => Self::StringBlock,2611 ERROR_STRING_BLOCK_UNEXPECTED_END => Self::ErrorStringBlockUnexpectedEnd,2612 ERROR_STRING_BLOCK_MISSING_NEW_LINE => Self::ErrorStringBlockMissingNewLine,2613 ERROR_STRING_BLOCK_MISSING_TERMINATION => Self::ErrorStringBlockMissingTermination,2614 ERROR_STRING_BLOCK_MISSING_INDENT => Self::ErrorStringBlockMissingIndent,2615 _ => return None,2616 };2617 Some(res)2618 }2619}2620impl Text {2621 pub fn kind(&self) -> TextKind {2622 self.kind2623 }2624}2625impl std::fmt::Display for Text {2626 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2627 std::fmt::Display::fmt(self.syntax(), f)2628 }2629}2630impl AstToken for Number {2631 fn can_cast(kind: SyntaxKind) -> bool {2632 NumberKind::can_cast(kind)2633 }2634 fn cast(syntax: SyntaxToken) -> Option<Self> {2635 let kind = NumberKind::cast(syntax.kind())?;2636 Some(Number { syntax, kind })2637 }2638 fn syntax(&self) -> &SyntaxToken {2639 &self.syntax2640 }2641}2642impl NumberKind {2643 fn can_cast(kind: SyntaxKind) -> bool {2644 match kind {2645 FLOAT2646 | ERROR_FLOAT_JUNK_AFTER_POINT2647 | ERROR_FLOAT_JUNK_AFTER_EXPONENT2648 | ERROR_FLOAT_JUNK_AFTER_EXPONENT_SIGN => true,2649 _ => false,2650 }2651 }2652 pub fn cast(kind: SyntaxKind) -> Option<Self> {2653 let res = match kind {2654 FLOAT => Self::Float,2655 ERROR_FLOAT_JUNK_AFTER_POINT => Self::ErrorFloatJunkAfterPoint,2656 ERROR_FLOAT_JUNK_AFTER_EXPONENT => Self::ErrorFloatJunkAfterExponent,2657 ERROR_FLOAT_JUNK_AFTER_EXPONENT_SIGN => Self::ErrorFloatJunkAfterExponentSign,2658 _ => return None,2659 };2660 Some(res)2661 }2662}2663impl Number {2664 pub fn kind(&self) -> NumberKind {2665 self.kind2666 }2667}2668impl std::fmt::Display for Number {2669 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2670 std::fmt::Display::fmt(self.syntax(), f)2671 }2672}2673impl AstToken for ImportKind {2674 fn can_cast(kind: SyntaxKind) -> bool {2675 ImportKindKind::can_cast(kind)2676 }2677 fn cast(syntax: SyntaxToken) -> Option<Self> {2678 let kind = ImportKindKind::cast(syntax.kind())?;2679 Some(ImportKind { syntax, kind })2680 }2681 fn syntax(&self) -> &SyntaxToken {2682 &self.syntax2683 }2684}2685impl ImportKindKind {2686 fn can_cast(kind: SyntaxKind) -> bool {2687 match kind {2688 IMPORTSTR_KW | IMPORTBIN_KW | IMPORT_KW => true,2689 _ => false,2690 }2691 }2692 pub fn cast(kind: SyntaxKind) -> Option<Self> {2693 let res = match kind {2694 IMPORTSTR_KW => Self::ImportstrKw,2695 IMPORTBIN_KW => Self::ImportbinKw,2696 IMPORT_KW => Self::ImportKw,2697 _ => return None,2698 };2699 Some(res)2700 }2701}2702impl ImportKind {2703 pub fn kind(&self) -> ImportKindKind {2704 self.kind2705 }2706}2707impl std::fmt::Display for ImportKind {2708 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2709 std::fmt::Display::fmt(self.syntax(), f)2710 }2711}2712impl AstToken for Trivia {2713 fn can_cast(kind: SyntaxKind) -> bool {2714 TriviaKind::can_cast(kind)2715 }2716 fn cast(syntax: SyntaxToken) -> Option<Self> {2717 let kind = TriviaKind::cast(syntax.kind())?;2718 Some(Trivia { syntax, kind })2719 }2720 fn syntax(&self) -> &SyntaxToken {2721 &self.syntax2722 }2723}2724impl TriviaKind {2725 fn can_cast(kind: SyntaxKind) -> bool {2726 match kind {2727 WHITESPACE2728 | MULTI_LINE_COMMENT2729 | ERROR_COMMENT_TOO_SHORT2730 | ERROR_COMMENT_UNTERMINATED2731 | SINGLE_LINE_HASH_COMMENT2732 | SINGLE_LINE_SLASH_COMMENT => true,2733 _ => false,2734 }2735 }2736 pub fn cast(kind: SyntaxKind) -> Option<Self> {2737 let res = match kind {2738 WHITESPACE => Self::Whitespace,2739 MULTI_LINE_COMMENT => Self::MultiLineComment,2740 ERROR_COMMENT_TOO_SHORT => Self::ErrorCommentTooShort,2741 ERROR_COMMENT_UNTERMINATED => Self::ErrorCommentUnterminated,2742 SINGLE_LINE_HASH_COMMENT => Self::SingleLineHashComment,2743 SINGLE_LINE_SLASH_COMMENT => Self::SingleLineSlashComment,2744 _ => return None,2745 };2746 Some(res)2747 }2748}2749impl Trivia {2750 pub fn kind(&self) -> TriviaKind {2751 self.kind2752 }2753}2754impl std::fmt::Display for Trivia {2755 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2756 std::fmt::Display::fmt(self.syntax(), f)2757 }2758}2759impl AstToken for CustomError {2760 fn can_cast(kind: SyntaxKind) -> bool {2761 CustomErrorKind::can_cast(kind)2762 }2763 fn cast(syntax: SyntaxToken) -> Option<Self> {2764 let kind = CustomErrorKind::cast(syntax.kind())?;2765 Some(CustomError { syntax, kind })2766 }2767 fn syntax(&self) -> &SyntaxToken {2768 &self.syntax2769 }2770}2771impl CustomErrorKind {2772 fn can_cast(kind: SyntaxKind) -> bool {2773 match kind {2774 ERROR_MISSING_TOKEN | ERROR_UNEXPECTED_TOKEN | ERROR_CUSTOM => true,2775 _ => false,2776 }2777 }2778 pub fn cast(kind: SyntaxKind) -> Option<Self> {2779 let res = match kind {2780 ERROR_MISSING_TOKEN => Self::ErrorMissingToken,2781 ERROR_UNEXPECTED_TOKEN => Self::ErrorUnexpectedToken,2782 ERROR_CUSTOM => Self::ErrorCustom,2783 _ => return None,2784 };2785 Some(res)2786 }2787}2788impl CustomError {2789 pub fn kind(&self) -> CustomErrorKind {2790 self.kind2791 }2792}2793impl std::fmt::Display for CustomError {2794 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2795 std::fmt::Display::fmt(self.syntax(), f)2796 }2797}2798impl std::fmt::Display for Suffix {2799 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2800 std::fmt::Display::fmt(self.syntax(), f)2801 }2802}2803impl std::fmt::Display for Bind {2804 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2805 std::fmt::Display::fmt(self.syntax(), f)2806 }2807}2808impl std::fmt::Display for Stmt {2809 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2810 std::fmt::Display::fmt(self.syntax(), f)2811 }2812}2813impl std::fmt::Display for ObjBody {2814 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2815 std::fmt::Display::fmt(self.syntax(), f)2816 }2817}2818impl std::fmt::Display for CompSpec {2819 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2820 std::fmt::Display::fmt(self.syntax(), f)2821 }2822}2823impl std::fmt::Display for ExprBase {2824 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2825 std::fmt::Display::fmt(self.syntax(), f)2826 }2827}2828impl std::fmt::Display for MemberComp {2829 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2830 std::fmt::Display::fmt(self.syntax(), f)2831 }2832}2833impl std::fmt::Display for Member {2834 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2835 std::fmt::Display::fmt(self.syntax(), f)2836 }2837}2838impl std::fmt::Display for FieldName {2839 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2840 std::fmt::Display::fmt(self.syntax(), f)2841 }2842}2843impl std::fmt::Display for Destruct {2844 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2845 std::fmt::Display::fmt(self.syntax(), f)2846 }2847}2848impl std::fmt::Display for DestructArrayPart {2849 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2850 std::fmt::Display::fmt(self.syntax(), f)2851 }2852}2853impl std::fmt::Display for SourceFile {2854 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2855 std::fmt::Display::fmt(self.syntax(), f)2856 }2857}2858impl std::fmt::Display for Expr {2859 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2860 std::fmt::Display::fmt(self.syntax(), f)2861 }2862}2863impl std::fmt::Display for SuffixIndex {2864 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2865 std::fmt::Display::fmt(self.syntax(), f)2866 }2867}2868impl std::fmt::Display for Name {2869 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2870 std::fmt::Display::fmt(self.syntax(), f)2871 }2872}2873impl std::fmt::Display for SuffixIndexExpr {2874 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2875 std::fmt::Display::fmt(self.syntax(), f)2876 }2877}2878impl std::fmt::Display for SuffixSlice {2879 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2880 std::fmt::Display::fmt(self.syntax(), f)2881 }2882}2883impl std::fmt::Display for SliceDesc {2884 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2885 std::fmt::Display::fmt(self.syntax(), f)2886 }2887}2888impl std::fmt::Display for SuffixApply {2889 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2890 std::fmt::Display::fmt(self.syntax(), f)2891 }2892}2893impl std::fmt::Display for ArgsDesc {2894 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2895 std::fmt::Display::fmt(self.syntax(), f)2896 }2897}2898impl std::fmt::Display for StmtLocal {2899 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2900 std::fmt::Display::fmt(self.syntax(), f)2901 }2902}2903impl std::fmt::Display for StmtAssert {2904 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2905 std::fmt::Display::fmt(self.syntax(), f)2906 }2907}2908impl std::fmt::Display for Assertion {2909 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2910 std::fmt::Display::fmt(self.syntax(), f)2911 }2912}2913impl std::fmt::Display for ExprBinary {2914 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2915 std::fmt::Display::fmt(self.syntax(), f)2916 }2917}2918impl std::fmt::Display for ExprUnary {2919 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2920 std::fmt::Display::fmt(self.syntax(), f)2921 }2922}2923impl std::fmt::Display for ExprObjExtend {2924 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2925 std::fmt::Display::fmt(self.syntax(), f)2926 }2927}2928impl std::fmt::Display for ExprParened {2929 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2930 std::fmt::Display::fmt(self.syntax(), f)2931 }2932}2933impl std::fmt::Display for ExprLiteral {2934 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2935 std::fmt::Display::fmt(self.syntax(), f)2936 }2937}2938impl std::fmt::Display for ExprString {2939 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2940 std::fmt::Display::fmt(self.syntax(), f)2941 }2942}2943impl std::fmt::Display for ExprNumber {2944 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2945 std::fmt::Display::fmt(self.syntax(), f)2946 }2947}2948impl std::fmt::Display for ExprArray {2949 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2950 std::fmt::Display::fmt(self.syntax(), f)2951 }2952}2953impl std::fmt::Display for ExprObject {2954 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2955 std::fmt::Display::fmt(self.syntax(), f)2956 }2957}2958impl std::fmt::Display for ExprArrayComp {2959 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2960 std::fmt::Display::fmt(self.syntax(), f)2961 }2962}2963impl std::fmt::Display for ExprImport {2964 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2965 std::fmt::Display::fmt(self.syntax(), f)2966 }2967}2968impl std::fmt::Display for ExprVar {2969 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2970 std::fmt::Display::fmt(self.syntax(), f)2971 }2972}2973impl std::fmt::Display for ExprIfThenElse {2974 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2975 std::fmt::Display::fmt(self.syntax(), f)2976 }2977}2978impl std::fmt::Display for TrueExpr {2979 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2980 std::fmt::Display::fmt(self.syntax(), f)2981 }2982}2983impl std::fmt::Display for FalseExpr {2984 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2985 std::fmt::Display::fmt(self.syntax(), f)2986 }2987}2988impl std::fmt::Display for ExprFunction {2989 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2990 std::fmt::Display::fmt(self.syntax(), f)2991 }2992}2993impl std::fmt::Display for ParamsDesc {2994 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2995 std::fmt::Display::fmt(self.syntax(), f)2996 }2997}2998impl std::fmt::Display for ExprError {2999 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3000 std::fmt::Display::fmt(self.syntax(), f)3001 }3002}3003impl std::fmt::Display for SliceDescEnd {3004 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3005 std::fmt::Display::fmt(self.syntax(), f)3006 }3007}3008impl std::fmt::Display for SliceDescStep {3009 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3010 std::fmt::Display::fmt(self.syntax(), f)3011 }3012}3013impl std::fmt::Display for Arg {3014 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3015 std::fmt::Display::fmt(self.syntax(), f)3016 }3017}3018impl std::fmt::Display for ObjBodyComp {3019 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3020 std::fmt::Display::fmt(self.syntax(), f)3021 }3022}3023impl std::fmt::Display for ObjBodyMemberList {3024 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3025 std::fmt::Display::fmt(self.syntax(), f)3026 }3027}3028impl std::fmt::Display for MemberBindStmt {3029 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3030 std::fmt::Display::fmt(self.syntax(), f)3031 }3032}3033impl std::fmt::Display for ObjLocal {3034 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3035 std::fmt::Display::fmt(self.syntax(), f)3036 }3037}3038impl std::fmt::Display for MemberAssertStmt {3039 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3040 std::fmt::Display::fmt(self.syntax(), f)3041 }3042}3043impl std::fmt::Display for MemberFieldNormal {3044 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3045 std::fmt::Display::fmt(self.syntax(), f)3046 }3047}3048impl std::fmt::Display for Visibility {3049 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3050 std::fmt::Display::fmt(self.syntax(), f)3051 }3052}3053impl std::fmt::Display for MemberFieldMethod {3054 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3055 std::fmt::Display::fmt(self.syntax(), f)3056 }3057}3058impl std::fmt::Display for FieldNameFixed {3059 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3060 std::fmt::Display::fmt(self.syntax(), f)3061 }3062}3063impl std::fmt::Display for FieldNameDynamic {3064 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3065 std::fmt::Display::fmt(self.syntax(), f)3066 }3067}3068impl std::fmt::Display for ForSpec {3069 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3070 std::fmt::Display::fmt(self.syntax(), f)3071 }3072}3073impl std::fmt::Display for ForObjSpec {3074 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3075 std::fmt::Display::fmt(self.syntax(), f)3076 }3077}3078impl std::fmt::Display for IfSpec {3079 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3080 std::fmt::Display::fmt(self.syntax(), f)3081 }3082}3083impl std::fmt::Display for BindDestruct {3084 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3085 std::fmt::Display::fmt(self.syntax(), f)3086 }3087}3088impl std::fmt::Display for BindFunction {3089 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3090 std::fmt::Display::fmt(self.syntax(), f)3091 }3092}3093impl std::fmt::Display for Param {3094 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3095 std::fmt::Display::fmt(self.syntax(), f)3096 }3097}3098impl std::fmt::Display for DestructFull {3099 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3100 std::fmt::Display::fmt(self.syntax(), f)3101 }3102}3103impl std::fmt::Display for DestructSkip {3104 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3105 std::fmt::Display::fmt(self.syntax(), f)3106 }3107}3108impl std::fmt::Display for DestructArray {3109 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3110 std::fmt::Display::fmt(self.syntax(), f)3111 }3112}3113impl std::fmt::Display for DestructObject {3114 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3115 std::fmt::Display::fmt(self.syntax(), f)3116 }3117}3118impl std::fmt::Display for DestructObjectField {3119 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3120 std::fmt::Display::fmt(self.syntax(), f)3121 }3122}3123impl std::fmt::Display for DestructRest {3124 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3125 std::fmt::Display::fmt(self.syntax(), f)3126 }3127}3128impl std::fmt::Display for DestructArrayElement {3129 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3130 std::fmt::Display::fmt(self.syntax(), f)3131 }3132}1//! This is a generated file, please do not edit manually. Changes can be2//! made in codegeneration that lives in `xtask` top-level dir.34#![allow(non_snake_case, clippy::match_like_matches_macro)]5use crate::{6 SyntaxKind::{self, *},7 SyntaxNode, SyntaxToken, T,8 ast::{AstChildren, AstNode, AstToken, support},9};1011#[derive(Debug, Clone, PartialEq, Eq, Hash)]12pub struct SourceFile {13 pub(crate) syntax: SyntaxNode,14}15impl SourceFile {16 pub fn expr(&self) -> Option<Expr> {17 support::children(&self.syntax).next()18 }19}2021#[derive(Debug, Clone, PartialEq, Eq, Hash)]22pub struct Expr {23 pub(crate) syntax: SyntaxNode,24}25impl Expr {26 pub fn stmts(&self) -> AstChildren<Stmt> {27 support::children(&self.syntax)28 }29 pub fn expr_base(&self) -> Option<ExprBase> {30 support::children(&self.syntax).next()31 }32 pub fn suffixs(&self) -> AstChildren<Suffix> {33 support::children(&self.syntax)34 }35}3637#[derive(Debug, Clone, PartialEq, Eq, Hash)]38pub struct SuffixIndex {39 pub(crate) syntax: SyntaxNode,40}41impl SuffixIndex {42 pub fn question_mark_token(&self) -> Option<SyntaxToken> {43 support::token(&self.syntax, T![?])44 }45 pub fn dot_token(&self) -> Option<SyntaxToken> {46 support::token(&self.syntax, T![.])47 }48 pub fn index(&self) -> Option<Name> {49 support::children(&self.syntax).next()50 }51}5253#[derive(Debug, Clone, PartialEq, Eq, Hash)]54pub struct Name {55 pub(crate) syntax: SyntaxNode,56}57impl Name {58 pub fn ident_lit(&self) -> Option<SyntaxToken> {59 support::token(&self.syntax, IDENT)60 }61}6263#[derive(Debug, Clone, PartialEq, Eq, Hash)]64pub struct SuffixIndexExpr {65 pub(crate) syntax: SyntaxNode,66}67impl SuffixIndexExpr {68 pub fn question_mark_token(&self) -> Option<SyntaxToken> {69 support::token(&self.syntax, T![?])70 }71 pub fn dot_token(&self) -> Option<SyntaxToken> {72 support::token(&self.syntax, T![.])73 }74 pub fn l_brack_token(&self) -> Option<SyntaxToken> {75 support::token(&self.syntax, T!['['])76 }77 pub fn index(&self) -> Option<Expr> {78 support::children(&self.syntax).next()79 }80 pub fn r_brack_token(&self) -> Option<SyntaxToken> {81 support::token(&self.syntax, T![']'])82 }83}8485#[derive(Debug, Clone, PartialEq, Eq, Hash)]86pub struct SuffixSlice {87 pub(crate) syntax: SyntaxNode,88}89impl SuffixSlice {90 pub fn slice_desc(&self) -> Option<SliceDesc> {91 support::children(&self.syntax).next()92 }93}9495#[derive(Debug, Clone, PartialEq, Eq, Hash)]96pub struct SliceDesc {97 pub(crate) syntax: SyntaxNode,98}99impl SliceDesc {100 pub fn l_brack_token(&self) -> Option<SyntaxToken> {101 support::token(&self.syntax, T!['['])102 }103 pub fn from(&self) -> Option<Expr> {104 support::children(&self.syntax).next()105 }106 pub fn colon_token(&self) -> Option<SyntaxToken> {107 support::token(&self.syntax, T![:])108 }109 pub fn end(&self) -> Option<SliceDescEnd> {110 support::children(&self.syntax).next()111 }112 pub fn step(&self) -> Option<SliceDescStep> {113 support::children(&self.syntax).next()114 }115 pub fn r_brack_token(&self) -> Option<SyntaxToken> {116 support::token(&self.syntax, T![']'])117 }118}119120#[derive(Debug, Clone, PartialEq, Eq, Hash)]121pub struct SuffixApply {122 pub(crate) syntax: SyntaxNode,123}124impl SuffixApply {125 pub fn args_desc(&self) -> Option<ArgsDesc> {126 support::children(&self.syntax).next()127 }128 pub fn tailstrict_kw_token(&self) -> Option<SyntaxToken> {129 support::token(&self.syntax, T![tailstrict])130 }131}132133#[derive(Debug, Clone, PartialEq, Eq, Hash)]134pub struct ArgsDesc {135 pub(crate) syntax: SyntaxNode,136}137impl ArgsDesc {138 pub fn l_paren_token(&self) -> Option<SyntaxToken> {139 support::token(&self.syntax, T!['('])140 }141 pub fn args(&self) -> AstChildren<Arg> {142 support::children(&self.syntax)143 }144 pub fn r_paren_token(&self) -> Option<SyntaxToken> {145 support::token(&self.syntax, T![')'])146 }147}148149#[derive(Debug, Clone, PartialEq, Eq, Hash)]150pub struct StmtLocal {151 pub(crate) syntax: SyntaxNode,152}153impl StmtLocal {154 pub fn local_kw_token(&self) -> Option<SyntaxToken> {155 support::token(&self.syntax, T![local])156 }157 pub fn binds(&self) -> AstChildren<Bind> {158 support::children(&self.syntax)159 }160 pub fn semi_token(&self) -> Option<SyntaxToken> {161 support::token(&self.syntax, T![;])162 }163}164165#[derive(Debug, Clone, PartialEq, Eq, Hash)]166pub struct StmtAssert {167 pub(crate) syntax: SyntaxNode,168}169impl StmtAssert {170 pub fn assertion(&self) -> Option<Assertion> {171 support::children(&self.syntax).next()172 }173 pub fn semi_token(&self) -> Option<SyntaxToken> {174 support::token(&self.syntax, T![;])175 }176}177178#[derive(Debug, Clone, PartialEq, Eq, Hash)]179pub struct Assertion {180 pub(crate) syntax: SyntaxNode,181}182impl Assertion {183 pub fn assert_kw_token(&self) -> Option<SyntaxToken> {184 support::token(&self.syntax, T![assert])185 }186 pub fn condition(&self) -> Option<Expr> {187 support::children(&self.syntax).next()188 }189 pub fn colon_token(&self) -> Option<SyntaxToken> {190 support::token(&self.syntax, T![:])191 }192 pub fn message(&self) -> Option<Expr> {193 support::children(&self.syntax).nth(1usize)194 }195}196197#[derive(Debug, Clone, PartialEq, Eq, Hash)]198pub struct ExprBinary {199 pub(crate) syntax: SyntaxNode,200}201impl ExprBinary {202 pub fn lhs(&self) -> Option<Expr> {203 support::children(&self.syntax).next()204 }205 pub fn binary_operator(&self) -> Option<BinaryOperator> {206 support::token_child(&self.syntax)207 }208 pub fn rhs(&self) -> Option<Expr> {209 support::children(&self.syntax).nth(1usize)210 }211}212213#[derive(Debug, Clone, PartialEq, Eq, Hash)]214pub struct ExprUnary {215 pub(crate) syntax: SyntaxNode,216}217impl ExprUnary {218 pub fn unary_operator(&self) -> Option<UnaryOperator> {219 support::token_child(&self.syntax)220 }221 pub fn rhs(&self) -> Option<Expr> {222 support::children(&self.syntax).next()223 }224}225226#[derive(Debug, Clone, PartialEq, Eq, Hash)]227pub struct ExprObjExtend {228 pub(crate) syntax: SyntaxNode,229}230impl ExprObjExtend {231 pub fn lhs(&self) -> Option<Expr> {232 support::children(&self.syntax).next()233 }234 pub fn rhs(&self) -> Option<Expr> {235 support::children(&self.syntax).nth(1usize)236 }237}238239#[derive(Debug, Clone, PartialEq, Eq, Hash)]240pub struct ExprParened {241 pub(crate) syntax: SyntaxNode,242}243impl ExprParened {244 pub fn l_paren_token(&self) -> Option<SyntaxToken> {245 support::token(&self.syntax, T!['('])246 }247 pub fn expr(&self) -> Option<Expr> {248 support::children(&self.syntax).next()249 }250 pub fn r_paren_token(&self) -> Option<SyntaxToken> {251 support::token(&self.syntax, T![')'])252 }253}254255#[derive(Debug, Clone, PartialEq, Eq, Hash)]256pub struct ExprLiteral {257 pub(crate) syntax: SyntaxNode,258}259impl ExprLiteral {260 pub fn literal(&self) -> Option<Literal> {261 support::token_child(&self.syntax)262 }263}264265#[derive(Debug, Clone, PartialEq, Eq, Hash)]266pub struct ExprString {267 pub(crate) syntax: SyntaxNode,268}269impl ExprString {270 pub fn text(&self) -> Option<Text> {271 support::token_child(&self.syntax)272 }273}274275#[derive(Debug, Clone, PartialEq, Eq, Hash)]276pub struct ExprNumber {277 pub(crate) syntax: SyntaxNode,278}279impl ExprNumber {280 pub fn number(&self) -> Option<Number> {281 support::token_child(&self.syntax)282 }283}284285#[derive(Debug, Clone, PartialEq, Eq, Hash)]286pub struct ExprArray {287 pub(crate) syntax: SyntaxNode,288}289impl ExprArray {290 pub fn l_brack_token(&self) -> Option<SyntaxToken> {291 support::token(&self.syntax, T!['['])292 }293 pub fn exprs(&self) -> AstChildren<Expr> {294 support::children(&self.syntax)295 }296 pub fn r_brack_token(&self) -> Option<SyntaxToken> {297 support::token(&self.syntax, T![']'])298 }299}300301#[derive(Debug, Clone, PartialEq, Eq, Hash)]302pub struct ExprObject {303 pub(crate) syntax: SyntaxNode,304}305impl ExprObject {306 pub fn obj_body(&self) -> Option<ObjBody> {307 support::children(&self.syntax).next()308 }309}310311#[derive(Debug, Clone, PartialEq, Eq, Hash)]312pub struct ExprArrayComp {313 pub(crate) syntax: SyntaxNode,314}315impl ExprArrayComp {316 pub fn l_brack_token(&self) -> Option<SyntaxToken> {317 support::token(&self.syntax, T!['['])318 }319 pub fn expr(&self) -> Option<Expr> {320 support::children(&self.syntax).next()321 }322 pub fn comma_token(&self) -> Option<SyntaxToken> {323 support::token(&self.syntax, T![,])324 }325 pub fn comp_specs(&self) -> AstChildren<CompSpec> {326 support::children(&self.syntax)327 }328 pub fn r_brack_token(&self) -> Option<SyntaxToken> {329 support::token(&self.syntax, T![']'])330 }331}332333#[derive(Debug, Clone, PartialEq, Eq, Hash)]334pub struct ExprImport {335 pub(crate) syntax: SyntaxNode,336}337impl ExprImport {338 pub fn import_kind(&self) -> Option<ImportKind> {339 support::token_child(&self.syntax)340 }341 pub fn text(&self) -> Option<Text> {342 support::token_child(&self.syntax)343 }344}345346#[derive(Debug, Clone, PartialEq, Eq, Hash)]347pub struct ExprVar {348 pub(crate) syntax: SyntaxNode,349}350impl ExprVar {351 pub fn name(&self) -> Option<Name> {352 support::children(&self.syntax).next()353 }354}355356#[derive(Debug, Clone, PartialEq, Eq, Hash)]357pub struct ExprIfThenElse {358 pub(crate) syntax: SyntaxNode,359}360impl ExprIfThenElse {361 pub fn if_kw_token(&self) -> Option<SyntaxToken> {362 support::token(&self.syntax, T![if])363 }364 pub fn cond(&self) -> Option<Expr> {365 support::children(&self.syntax).next()366 }367 pub fn then_kw_token(&self) -> Option<SyntaxToken> {368 support::token(&self.syntax, T![then])369 }370 pub fn then(&self) -> Option<TrueExpr> {371 support::children(&self.syntax).next()372 }373 pub fn else_kw_token(&self) -> Option<SyntaxToken> {374 support::token(&self.syntax, T![else])375 }376 pub fn else_(&self) -> Option<FalseExpr> {377 support::children(&self.syntax).next()378 }379}380381#[derive(Debug, Clone, PartialEq, Eq, Hash)]382pub struct TrueExpr {383 pub(crate) syntax: SyntaxNode,384}385impl TrueExpr {386 pub fn expr(&self) -> Option<Expr> {387 support::children(&self.syntax).next()388 }389}390391#[derive(Debug, Clone, PartialEq, Eq, Hash)]392pub struct FalseExpr {393 pub(crate) syntax: SyntaxNode,394}395impl FalseExpr {396 pub fn expr(&self) -> Option<Expr> {397 support::children(&self.syntax).next()398 }399}400401#[derive(Debug, Clone, PartialEq, Eq, Hash)]402pub struct ExprFunction {403 pub(crate) syntax: SyntaxNode,404}405impl ExprFunction {406 pub fn function_kw_token(&self) -> Option<SyntaxToken> {407 support::token(&self.syntax, T![function])408 }409 pub fn l_paren_token(&self) -> Option<SyntaxToken> {410 support::token(&self.syntax, T!['('])411 }412 pub fn params_desc(&self) -> Option<ParamsDesc> {413 support::children(&self.syntax).next()414 }415 pub fn r_paren_token(&self) -> Option<SyntaxToken> {416 support::token(&self.syntax, T![')'])417 }418 pub fn expr(&self) -> Option<Expr> {419 support::children(&self.syntax).next()420 }421}422423#[derive(Debug, Clone, PartialEq, Eq, Hash)]424pub struct ParamsDesc {425 pub(crate) syntax: SyntaxNode,426}427impl ParamsDesc {428 pub fn l_paren_token(&self) -> Option<SyntaxToken> {429 support::token(&self.syntax, T!['('])430 }431 pub fn params(&self) -> AstChildren<Param> {432 support::children(&self.syntax)433 }434 pub fn r_paren_token(&self) -> Option<SyntaxToken> {435 support::token(&self.syntax, T![')'])436 }437}438439#[derive(Debug, Clone, PartialEq, Eq, Hash)]440pub struct ExprError {441 pub(crate) syntax: SyntaxNode,442}443impl ExprError {444 pub fn error_kw_token(&self) -> Option<SyntaxToken> {445 support::token(&self.syntax, T![error])446 }447 pub fn expr(&self) -> Option<Expr> {448 support::children(&self.syntax).next()449 }450}451452#[derive(Debug, Clone, PartialEq, Eq, Hash)]453pub struct SliceDescEnd {454 pub(crate) syntax: SyntaxNode,455}456impl SliceDescEnd {457 pub fn expr(&self) -> Option<Expr> {458 support::children(&self.syntax).next()459 }460}461462#[derive(Debug, Clone, PartialEq, Eq, Hash)]463pub struct SliceDescStep {464 pub(crate) syntax: SyntaxNode,465}466impl SliceDescStep {467 pub fn expr(&self) -> Option<Expr> {468 support::children(&self.syntax).next()469 }470}471472#[derive(Debug, Clone, PartialEq, Eq, Hash)]473pub struct Arg {474 pub(crate) syntax: SyntaxNode,475}476impl Arg {477 pub fn name(&self) -> Option<Name> {478 support::children(&self.syntax).next()479 }480 pub fn assign_token(&self) -> Option<SyntaxToken> {481 support::token(&self.syntax, T![=])482 }483 pub fn expr(&self) -> Option<Expr> {484 support::children(&self.syntax).next()485 }486}487488#[derive(Debug, Clone, PartialEq, Eq, Hash)]489pub struct ObjBodyComp {490 pub(crate) syntax: SyntaxNode,491}492impl ObjBodyComp {493 pub fn l_brace_token(&self) -> Option<SyntaxToken> {494 support::token(&self.syntax, T!['{'])495 }496 pub fn member_comps(&self) -> AstChildren<MemberComp> {497 support::children(&self.syntax)498 }499 pub fn comp_specs(&self) -> AstChildren<CompSpec> {500 support::children(&self.syntax)501 }502 pub fn r_brace_token(&self) -> Option<SyntaxToken> {503 support::token(&self.syntax, T!['}'])504 }505}506507#[derive(Debug, Clone, PartialEq, Eq, Hash)]508pub struct ObjBodyMemberList {509 pub(crate) syntax: SyntaxNode,510}511impl ObjBodyMemberList {512 pub fn l_brace_token(&self) -> Option<SyntaxToken> {513 support::token(&self.syntax, T!['{'])514 }515 pub fn members(&self) -> AstChildren<Member> {516 support::children(&self.syntax)517 }518 pub fn r_brace_token(&self) -> Option<SyntaxToken> {519 support::token(&self.syntax, T!['}'])520 }521}522523#[derive(Debug, Clone, PartialEq, Eq, Hash)]524pub struct MemberBindStmt {525 pub(crate) syntax: SyntaxNode,526}527impl MemberBindStmt {528 pub fn obj_local(&self) -> Option<ObjLocal> {529 support::children(&self.syntax).next()530 }531}532533#[derive(Debug, Clone, PartialEq, Eq, Hash)]534pub struct ObjLocal {535 pub(crate) syntax: SyntaxNode,536}537impl ObjLocal {538 pub fn local_kw_token(&self) -> Option<SyntaxToken> {539 support::token(&self.syntax, T![local])540 }541 pub fn bind(&self) -> Option<Bind> {542 support::children(&self.syntax).next()543 }544}545546#[derive(Debug, Clone, PartialEq, Eq, Hash)]547pub struct MemberAssertStmt {548 pub(crate) syntax: SyntaxNode,549}550impl MemberAssertStmt {551 pub fn assertion(&self) -> Option<Assertion> {552 support::children(&self.syntax).next()553 }554}555556#[derive(Debug, Clone, PartialEq, Eq, Hash)]557pub struct MemberFieldNormal {558 pub(crate) syntax: SyntaxNode,559}560impl MemberFieldNormal {561 pub fn field_name(&self) -> Option<FieldName> {562 support::children(&self.syntax).next()563 }564 pub fn plus_token(&self) -> Option<SyntaxToken> {565 support::token(&self.syntax, T![+])566 }567 pub fn visibility(&self) -> Option<Visibility> {568 support::children(&self.syntax).next()569 }570 pub fn expr(&self) -> Option<Expr> {571 support::children(&self.syntax).next()572 }573}574575#[derive(Debug, Clone, PartialEq, Eq, Hash)]576pub struct Visibility {577 pub(crate) syntax: SyntaxNode,578}579impl Visibility {580 pub fn colon_token(&self) -> Option<SyntaxToken> {581 support::token(&self.syntax, T![:])582 }583}584585#[derive(Debug, Clone, PartialEq, Eq, Hash)]586pub struct MemberFieldMethod {587 pub(crate) syntax: SyntaxNode,588}589impl MemberFieldMethod {590 pub fn field_name(&self) -> Option<FieldName> {591 support::children(&self.syntax).next()592 }593 pub fn params_desc(&self) -> Option<ParamsDesc> {594 support::children(&self.syntax).next()595 }596 pub fn visibility(&self) -> Option<Visibility> {597 support::children(&self.syntax).next()598 }599 pub fn expr(&self) -> Option<Expr> {600 support::children(&self.syntax).next()601 }602}603604#[derive(Debug, Clone, PartialEq, Eq, Hash)]605pub struct FieldNameFixed {606 pub(crate) syntax: SyntaxNode,607}608impl FieldNameFixed {609 pub fn id(&self) -> Option<Name> {610 support::children(&self.syntax).next()611 }612 pub fn text(&self) -> Option<Text> {613 support::token_child(&self.syntax)614 }615}616617#[derive(Debug, Clone, PartialEq, Eq, Hash)]618pub struct FieldNameDynamic {619 pub(crate) syntax: SyntaxNode,620}621impl FieldNameDynamic {622 pub fn l_brack_token(&self) -> Option<SyntaxToken> {623 support::token(&self.syntax, T!['['])624 }625 pub fn expr(&self) -> Option<Expr> {626 support::children(&self.syntax).next()627 }628 pub fn r_brack_token(&self) -> Option<SyntaxToken> {629 support::token(&self.syntax, T![']'])630 }631}632633#[derive(Debug, Clone, PartialEq, Eq, Hash)]634pub struct ForSpec {635 pub(crate) syntax: SyntaxNode,636}637impl ForSpec {638 pub fn for_kw_token(&self) -> Option<SyntaxToken> {639 support::token(&self.syntax, T![for])640 }641 pub fn bind(&self) -> Option<Destruct> {642 support::children(&self.syntax).next()643 }644 pub fn in_kw_token(&self) -> Option<SyntaxToken> {645 support::token(&self.syntax, T![in])646 }647 pub fn expr(&self) -> Option<Expr> {648 support::children(&self.syntax).next()649 }650}651652#[derive(Debug, Clone, PartialEq, Eq, Hash)]653pub struct ForObjSpec {654 pub(crate) syntax: SyntaxNode,655}656impl ForObjSpec {657 pub fn for_kw_token(&self) -> Option<SyntaxToken> {658 support::token(&self.syntax, T![for])659 }660 pub fn l_brack_token(&self) -> Option<SyntaxToken> {661 support::token(&self.syntax, T!['['])662 }663 pub fn key(&self) -> Option<Name> {664 support::children(&self.syntax).next()665 }666 pub fn r_brack_token(&self) -> Option<SyntaxToken> {667 support::token(&self.syntax, T![']'])668 }669 pub fn visibility(&self) -> Option<Visibility> {670 support::children(&self.syntax).next()671 }672 pub fn value(&self) -> Option<Destruct> {673 support::children(&self.syntax).next()674 }675 pub fn in_kw_token(&self) -> Option<SyntaxToken> {676 support::token(&self.syntax, T![in])677 }678 pub fn expr(&self) -> Option<Expr> {679 support::children(&self.syntax).next()680 }681}682683#[derive(Debug, Clone, PartialEq, Eq, Hash)]684pub struct IfSpec {685 pub(crate) syntax: SyntaxNode,686}687impl IfSpec {688 pub fn if_kw_token(&self) -> Option<SyntaxToken> {689 support::token(&self.syntax, T![if])690 }691 pub fn expr(&self) -> Option<Expr> {692 support::children(&self.syntax).next()693 }694}695696#[derive(Debug, Clone, PartialEq, Eq, Hash)]697pub struct BindDestruct {698 pub(crate) syntax: SyntaxNode,699}700impl BindDestruct {701 pub fn into(&self) -> Option<Destruct> {702 support::children(&self.syntax).next()703 }704 pub fn assign_token(&self) -> Option<SyntaxToken> {705 support::token(&self.syntax, T![=])706 }707 pub fn value(&self) -> Option<Expr> {708 support::children(&self.syntax).next()709 }710}711712#[derive(Debug, Clone, PartialEq, Eq, Hash)]713pub struct BindFunction {714 pub(crate) syntax: SyntaxNode,715}716impl BindFunction {717 pub fn name(&self) -> Option<Name> {718 support::children(&self.syntax).next()719 }720 pub fn params(&self) -> Option<ParamsDesc> {721 support::children(&self.syntax).next()722 }723 pub fn assign_token(&self) -> Option<SyntaxToken> {724 support::token(&self.syntax, T![=])725 }726 pub fn value(&self) -> Option<Expr> {727 support::children(&self.syntax).next()728 }729}730731#[derive(Debug, Clone, PartialEq, Eq, Hash)]732pub struct Param {733 pub(crate) syntax: SyntaxNode,734}735impl Param {736 pub fn destruct(&self) -> Option<Destruct> {737 support::children(&self.syntax).next()738 }739 pub fn assign_token(&self) -> Option<SyntaxToken> {740 support::token(&self.syntax, T![=])741 }742 pub fn expr(&self) -> Option<Expr> {743 support::children(&self.syntax).next()744 }745}746747#[derive(Debug, Clone, PartialEq, Eq, Hash)]748pub struct DestructFull {749 pub(crate) syntax: SyntaxNode,750}751impl DestructFull {752 pub fn name(&self) -> Option<Name> {753 support::children(&self.syntax).next()754 }755}756757#[derive(Debug, Clone, PartialEq, Eq, Hash)]758pub struct DestructSkip {759 pub(crate) syntax: SyntaxNode,760}761impl DestructSkip {762 pub fn question_mark_token(&self) -> Option<SyntaxToken> {763 support::token(&self.syntax, T![?])764 }765}766767#[derive(Debug, Clone, PartialEq, Eq, Hash)]768pub struct DestructArray {769 pub(crate) syntax: SyntaxNode,770}771impl DestructArray {772 pub fn l_brack_token(&self) -> Option<SyntaxToken> {773 support::token(&self.syntax, T!['['])774 }775 pub fn destruct_array_parts(&self) -> AstChildren<DestructArrayPart> {776 support::children(&self.syntax)777 }778 pub fn r_brack_token(&self) -> Option<SyntaxToken> {779 support::token(&self.syntax, T![']'])780 }781}782783#[derive(Debug, Clone, PartialEq, Eq, Hash)]784pub struct DestructObject {785 pub(crate) syntax: SyntaxNode,786}787impl DestructObject {788 pub fn l_brace_token(&self) -> Option<SyntaxToken> {789 support::token(&self.syntax, T!['{'])790 }791 pub fn destruct_object_fields(&self) -> AstChildren<DestructObjectField> {792 support::children(&self.syntax)793 }794 pub fn destruct_rest(&self) -> Option<DestructRest> {795 support::children(&self.syntax).next()796 }797 pub fn comma_token(&self) -> Option<SyntaxToken> {798 support::token(&self.syntax, T![,])799 }800 pub fn r_brace_token(&self) -> Option<SyntaxToken> {801 support::token(&self.syntax, T!['}'])802 }803}804805#[derive(Debug, Clone, PartialEq, Eq, Hash)]806pub struct DestructObjectField {807 pub(crate) syntax: SyntaxNode,808}809impl DestructObjectField {810 pub fn field(&self) -> Option<Name> {811 support::children(&self.syntax).next()812 }813 pub fn colon_token(&self) -> Option<SyntaxToken> {814 support::token(&self.syntax, T![:])815 }816 pub fn destruct(&self) -> Option<Destruct> {817 support::children(&self.syntax).next()818 }819 pub fn assign_token(&self) -> Option<SyntaxToken> {820 support::token(&self.syntax, T![=])821 }822 pub fn expr(&self) -> Option<Expr> {823 support::children(&self.syntax).next()824 }825}826827#[derive(Debug, Clone, PartialEq, Eq, Hash)]828pub struct DestructRest {829 pub(crate) syntax: SyntaxNode,830}831impl DestructRest {832 pub fn dotdotdot_token(&self) -> Option<SyntaxToken> {833 support::token(&self.syntax, T![...])834 }835 pub fn into(&self) -> Option<Name> {836 support::children(&self.syntax).next()837 }838}839840#[derive(Debug, Clone, PartialEq, Eq, Hash)]841pub struct DestructArrayElement {842 pub(crate) syntax: SyntaxNode,843}844impl DestructArrayElement {845 pub fn destruct(&self) -> Option<Destruct> {846 support::children(&self.syntax).next()847 }848}849850#[derive(Debug, Clone, PartialEq, Eq, Hash)]851pub enum Suffix {852 SuffixIndex(SuffixIndex),853 SuffixIndexExpr(SuffixIndexExpr),854 SuffixSlice(SuffixSlice),855 SuffixApply(SuffixApply),856}857858#[derive(Debug, Clone, PartialEq, Eq, Hash)]859pub enum Bind {860 BindDestruct(BindDestruct),861 BindFunction(BindFunction),862}863864#[derive(Debug, Clone, PartialEq, Eq, Hash)]865pub enum Stmt {866 StmtLocal(StmtLocal),867 StmtAssert(StmtAssert),868}869870#[derive(Debug, Clone, PartialEq, Eq, Hash)]871pub enum ObjBody {872 ObjBodyComp(ObjBodyComp),873 ObjBodyMemberList(ObjBodyMemberList),874}875876#[derive(Debug, Clone, PartialEq, Eq, Hash)]877pub enum CompSpec {878 ForSpec(ForSpec),879 ForObjSpec(ForObjSpec),880 IfSpec(IfSpec),881}882883#[derive(Debug, Clone, PartialEq, Eq, Hash)]884pub enum ExprBase {885 ExprBinary(ExprBinary),886 ExprUnary(ExprUnary),887 ExprObjExtend(ExprObjExtend),888 ExprParened(ExprParened),889 ExprString(ExprString),890 ExprNumber(ExprNumber),891 ExprLiteral(ExprLiteral),892 ExprArray(ExprArray),893 ExprObject(ExprObject),894 ExprArrayComp(ExprArrayComp),895 ExprImport(ExprImport),896 ExprVar(ExprVar),897 ExprIfThenElse(ExprIfThenElse),898 ExprFunction(ExprFunction),899 ExprError(ExprError),900}901902#[derive(Debug, Clone, PartialEq, Eq, Hash)]903pub enum MemberComp {904 MemberBindStmt(MemberBindStmt),905 MemberFieldNormal(MemberFieldNormal),906 MemberFieldMethod(MemberFieldMethod),907}908909#[derive(Debug, Clone, PartialEq, Eq, Hash)]910pub enum Member {911 MemberBindStmt(MemberBindStmt),912 MemberAssertStmt(MemberAssertStmt),913 MemberFieldNormal(MemberFieldNormal),914 MemberFieldMethod(MemberFieldMethod),915}916917#[derive(Debug, Clone, PartialEq, Eq, Hash)]918pub enum FieldName {919 FieldNameFixed(FieldNameFixed),920 FieldNameDynamic(FieldNameDynamic),921}922923#[derive(Debug, Clone, PartialEq, Eq, Hash)]924pub enum Destruct {925 DestructFull(DestructFull),926 DestructSkip(DestructSkip),927 DestructArray(DestructArray),928 DestructObject(DestructObject),929}930931#[derive(Debug, Clone, PartialEq, Eq, Hash)]932pub enum DestructArrayPart {933 DestructArrayElement(DestructArrayElement),934 DestructRest(DestructRest),935}936937#[derive(Debug, Clone, PartialEq, Eq, Hash)]938pub struct BinaryOperator {939 syntax: SyntaxToken,940 kind: BinaryOperatorKind,941}942943#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]944pub enum BinaryOperatorKind {945 Or,946 NullCoaelse,947 And,948 BitOr,949 BitXor,950 BitAnd,951 Eq,952 Ne,953 Lt,954 Gt,955 Le,956 Ge,957 InKw,958 Lhs,959 Rhs,960 Plus,961 Minus,962 Mul,963 Div,964 Modulo,965 MetaObjectApply,966 ErrorNoOperator,967}968969#[derive(Debug, Clone, PartialEq, Eq, Hash)]970pub struct UnaryOperator {971 syntax: SyntaxToken,972 kind: UnaryOperatorKind,973}974975#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]976pub enum UnaryOperatorKind {977 Minus,978 Not,979 BitNot,980 Plus,981}982983#[derive(Debug, Clone, PartialEq, Eq, Hash)]984pub struct Literal {985 syntax: SyntaxToken,986 kind: LiteralKind,987}988989#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]990pub enum LiteralKind {991 NullKw,992 TrueKw,993 FalseKw,994 SelfKw,995 Dollar,996 SuperKw,997}998999#[derive(Debug, Clone, PartialEq, Eq, Hash)]1000pub struct Text {1001 syntax: SyntaxToken,1002 kind: TextKind,1003}10041005#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]1006pub enum TextKind {1007 StringDouble,1008 ErrorStringDoubleUnterminated,1009 StringSingle,1010 ErrorStringSingleUnterminated,1011 StringDoubleVerbatim,1012 ErrorStringDoubleVerbatimUnterminated,1013 StringSingleVerbatim,1014 ErrorStringSingleVerbatimUnterminated,1015 ErrorStringVerbatimMissingQuotes,1016 StringBlock,1017 ErrorStringBlockUnexpectedEnd,1018 ErrorStringBlockMissingNewLine,1019 ErrorStringBlockMissingTermination,1020 ErrorStringBlockMissingIndent,1021}10221023#[derive(Debug, Clone, PartialEq, Eq, Hash)]1024pub struct Number {1025 syntax: SyntaxToken,1026 kind: NumberKind,1027}10281029#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]1030pub enum NumberKind {1031 Float,1032 ErrorFloatJunkAfterPoint,1033 ErrorFloatJunkAfterExponent,1034 ErrorFloatJunkAfterExponentSign,1035}10361037#[derive(Debug, Clone, PartialEq, Eq, Hash)]1038pub struct ImportKind {1039 syntax: SyntaxToken,1040 kind: ImportKindKind,1041}10421043#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]1044pub enum ImportKindKind {1045 ImportstrKw,1046 ImportbinKw,1047 ImportKw,1048}10491050#[derive(Debug, Clone, PartialEq, Eq, Hash)]1051pub struct Trivia {1052 syntax: SyntaxToken,1053 kind: TriviaKind,1054}10551056#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]1057pub enum TriviaKind {1058 Whitespace,1059 MultiLineComment,1060 ErrorCommentTooShort,1061 ErrorCommentUnterminated,1062 SingleLineHashComment,1063 SingleLineSlashComment,1064}10651066#[derive(Debug, Clone, PartialEq, Eq, Hash)]1067pub struct CustomError {1068 syntax: SyntaxToken,1069 kind: CustomErrorKind,1070}10711072#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]1073pub enum CustomErrorKind {1074 ErrorMissingToken,1075 ErrorUnexpectedToken,1076 ErrorCustom,1077}1078impl AstNode for SourceFile {1079 fn can_cast(kind: SyntaxKind) -> bool {1080 kind == SOURCE_FILE1081 }1082 fn cast(syntax: SyntaxNode) -> Option<Self> {1083 if Self::can_cast(syntax.kind()) {1084 Some(Self { syntax })1085 } else {1086 None1087 }1088 }1089 fn syntax(&self) -> &SyntaxNode {1090 &self.syntax1091 }1092}1093impl AstNode for Expr {1094 fn can_cast(kind: SyntaxKind) -> bool {1095 kind == EXPR1096 }1097 fn cast(syntax: SyntaxNode) -> Option<Self> {1098 if Self::can_cast(syntax.kind()) {1099 Some(Self { syntax })1100 } else {1101 None1102 }1103 }1104 fn syntax(&self) -> &SyntaxNode {1105 &self.syntax1106 }1107}1108impl AstNode for SuffixIndex {1109 fn can_cast(kind: SyntaxKind) -> bool {1110 kind == SUFFIX_INDEX1111 }1112 fn cast(syntax: SyntaxNode) -> Option<Self> {1113 if Self::can_cast(syntax.kind()) {1114 Some(Self { syntax })1115 } else {1116 None1117 }1118 }1119 fn syntax(&self) -> &SyntaxNode {1120 &self.syntax1121 }1122}1123impl AstNode for Name {1124 fn can_cast(kind: SyntaxKind) -> bool {1125 kind == NAME1126 }1127 fn cast(syntax: SyntaxNode) -> Option<Self> {1128 if Self::can_cast(syntax.kind()) {1129 Some(Self { syntax })1130 } else {1131 None1132 }1133 }1134 fn syntax(&self) -> &SyntaxNode {1135 &self.syntax1136 }1137}1138impl AstNode for SuffixIndexExpr {1139 fn can_cast(kind: SyntaxKind) -> bool {1140 kind == SUFFIX_INDEX_EXPR1141 }1142 fn cast(syntax: SyntaxNode) -> Option<Self> {1143 if Self::can_cast(syntax.kind()) {1144 Some(Self { syntax })1145 } else {1146 None1147 }1148 }1149 fn syntax(&self) -> &SyntaxNode {1150 &self.syntax1151 }1152}1153impl AstNode for SuffixSlice {1154 fn can_cast(kind: SyntaxKind) -> bool {1155 kind == SUFFIX_SLICE1156 }1157 fn cast(syntax: SyntaxNode) -> Option<Self> {1158 if Self::can_cast(syntax.kind()) {1159 Some(Self { syntax })1160 } else {1161 None1162 }1163 }1164 fn syntax(&self) -> &SyntaxNode {1165 &self.syntax1166 }1167}1168impl AstNode for SliceDesc {1169 fn can_cast(kind: SyntaxKind) -> bool {1170 kind == SLICE_DESC1171 }1172 fn cast(syntax: SyntaxNode) -> Option<Self> {1173 if Self::can_cast(syntax.kind()) {1174 Some(Self { syntax })1175 } else {1176 None1177 }1178 }1179 fn syntax(&self) -> &SyntaxNode {1180 &self.syntax1181 }1182}1183impl AstNode for SuffixApply {1184 fn can_cast(kind: SyntaxKind) -> bool {1185 kind == SUFFIX_APPLY1186 }1187 fn cast(syntax: SyntaxNode) -> Option<Self> {1188 if Self::can_cast(syntax.kind()) {1189 Some(Self { syntax })1190 } else {1191 None1192 }1193 }1194 fn syntax(&self) -> &SyntaxNode {1195 &self.syntax1196 }1197}1198impl AstNode for ArgsDesc {1199 fn can_cast(kind: SyntaxKind) -> bool {1200 kind == ARGS_DESC1201 }1202 fn cast(syntax: SyntaxNode) -> Option<Self> {1203 if Self::can_cast(syntax.kind()) {1204 Some(Self { syntax })1205 } else {1206 None1207 }1208 }1209 fn syntax(&self) -> &SyntaxNode {1210 &self.syntax1211 }1212}1213impl AstNode for StmtLocal {1214 fn can_cast(kind: SyntaxKind) -> bool {1215 kind == STMT_LOCAL1216 }1217 fn cast(syntax: SyntaxNode) -> Option<Self> {1218 if Self::can_cast(syntax.kind()) {1219 Some(Self { syntax })1220 } else {1221 None1222 }1223 }1224 fn syntax(&self) -> &SyntaxNode {1225 &self.syntax1226 }1227}1228impl AstNode for StmtAssert {1229 fn can_cast(kind: SyntaxKind) -> bool {1230 kind == STMT_ASSERT1231 }1232 fn cast(syntax: SyntaxNode) -> Option<Self> {1233 if Self::can_cast(syntax.kind()) {1234 Some(Self { syntax })1235 } else {1236 None1237 }1238 }1239 fn syntax(&self) -> &SyntaxNode {1240 &self.syntax1241 }1242}1243impl AstNode for Assertion {1244 fn can_cast(kind: SyntaxKind) -> bool {1245 kind == ASSERTION1246 }1247 fn cast(syntax: SyntaxNode) -> Option<Self> {1248 if Self::can_cast(syntax.kind()) {1249 Some(Self { syntax })1250 } else {1251 None1252 }1253 }1254 fn syntax(&self) -> &SyntaxNode {1255 &self.syntax1256 }1257}1258impl AstNode for ExprBinary {1259 fn can_cast(kind: SyntaxKind) -> bool {1260 kind == EXPR_BINARY1261 }1262 fn cast(syntax: SyntaxNode) -> Option<Self> {1263 if Self::can_cast(syntax.kind()) {1264 Some(Self { syntax })1265 } else {1266 None1267 }1268 }1269 fn syntax(&self) -> &SyntaxNode {1270 &self.syntax1271 }1272}1273impl AstNode for ExprUnary {1274 fn can_cast(kind: SyntaxKind) -> bool {1275 kind == EXPR_UNARY1276 }1277 fn cast(syntax: SyntaxNode) -> Option<Self> {1278 if Self::can_cast(syntax.kind()) {1279 Some(Self { syntax })1280 } else {1281 None1282 }1283 }1284 fn syntax(&self) -> &SyntaxNode {1285 &self.syntax1286 }1287}1288impl AstNode for ExprObjExtend {1289 fn can_cast(kind: SyntaxKind) -> bool {1290 kind == EXPR_OBJ_EXTEND1291 }1292 fn cast(syntax: SyntaxNode) -> Option<Self> {1293 if Self::can_cast(syntax.kind()) {1294 Some(Self { syntax })1295 } else {1296 None1297 }1298 }1299 fn syntax(&self) -> &SyntaxNode {1300 &self.syntax1301 }1302}1303impl AstNode for ExprParened {1304 fn can_cast(kind: SyntaxKind) -> bool {1305 kind == EXPR_PARENED1306 }1307 fn cast(syntax: SyntaxNode) -> Option<Self> {1308 if Self::can_cast(syntax.kind()) {1309 Some(Self { syntax })1310 } else {1311 None1312 }1313 }1314 fn syntax(&self) -> &SyntaxNode {1315 &self.syntax1316 }1317}1318impl AstNode for ExprLiteral {1319 fn can_cast(kind: SyntaxKind) -> bool {1320 kind == EXPR_LITERAL1321 }1322 fn cast(syntax: SyntaxNode) -> Option<Self> {1323 if Self::can_cast(syntax.kind()) {1324 Some(Self { syntax })1325 } else {1326 None1327 }1328 }1329 fn syntax(&self) -> &SyntaxNode {1330 &self.syntax1331 }1332}1333impl AstNode for ExprString {1334 fn can_cast(kind: SyntaxKind) -> bool {1335 kind == EXPR_STRING1336 }1337 fn cast(syntax: SyntaxNode) -> Option<Self> {1338 if Self::can_cast(syntax.kind()) {1339 Some(Self { syntax })1340 } else {1341 None1342 }1343 }1344 fn syntax(&self) -> &SyntaxNode {1345 &self.syntax1346 }1347}1348impl AstNode for ExprNumber {1349 fn can_cast(kind: SyntaxKind) -> bool {1350 kind == EXPR_NUMBER1351 }1352 fn cast(syntax: SyntaxNode) -> Option<Self> {1353 if Self::can_cast(syntax.kind()) {1354 Some(Self { syntax })1355 } else {1356 None1357 }1358 }1359 fn syntax(&self) -> &SyntaxNode {1360 &self.syntax1361 }1362}1363impl AstNode for ExprArray {1364 fn can_cast(kind: SyntaxKind) -> bool {1365 kind == EXPR_ARRAY1366 }1367 fn cast(syntax: SyntaxNode) -> Option<Self> {1368 if Self::can_cast(syntax.kind()) {1369 Some(Self { syntax })1370 } else {1371 None1372 }1373 }1374 fn syntax(&self) -> &SyntaxNode {1375 &self.syntax1376 }1377}1378impl AstNode for ExprObject {1379 fn can_cast(kind: SyntaxKind) -> bool {1380 kind == EXPR_OBJECT1381 }1382 fn cast(syntax: SyntaxNode) -> Option<Self> {1383 if Self::can_cast(syntax.kind()) {1384 Some(Self { syntax })1385 } else {1386 None1387 }1388 }1389 fn syntax(&self) -> &SyntaxNode {1390 &self.syntax1391 }1392}1393impl AstNode for ExprArrayComp {1394 fn can_cast(kind: SyntaxKind) -> bool {1395 kind == EXPR_ARRAY_COMP1396 }1397 fn cast(syntax: SyntaxNode) -> Option<Self> {1398 if Self::can_cast(syntax.kind()) {1399 Some(Self { syntax })1400 } else {1401 None1402 }1403 }1404 fn syntax(&self) -> &SyntaxNode {1405 &self.syntax1406 }1407}1408impl AstNode for ExprImport {1409 fn can_cast(kind: SyntaxKind) -> bool {1410 kind == EXPR_IMPORT1411 }1412 fn cast(syntax: SyntaxNode) -> Option<Self> {1413 if Self::can_cast(syntax.kind()) {1414 Some(Self { syntax })1415 } else {1416 None1417 }1418 }1419 fn syntax(&self) -> &SyntaxNode {1420 &self.syntax1421 }1422}1423impl AstNode for ExprVar {1424 fn can_cast(kind: SyntaxKind) -> bool {1425 kind == EXPR_VAR1426 }1427 fn cast(syntax: SyntaxNode) -> Option<Self> {1428 if Self::can_cast(syntax.kind()) {1429 Some(Self { syntax })1430 } else {1431 None1432 }1433 }1434 fn syntax(&self) -> &SyntaxNode {1435 &self.syntax1436 }1437}1438impl AstNode for ExprIfThenElse {1439 fn can_cast(kind: SyntaxKind) -> bool {1440 kind == EXPR_IF_THEN_ELSE1441 }1442 fn cast(syntax: SyntaxNode) -> Option<Self> {1443 if Self::can_cast(syntax.kind()) {1444 Some(Self { syntax })1445 } else {1446 None1447 }1448 }1449 fn syntax(&self) -> &SyntaxNode {1450 &self.syntax1451 }1452}1453impl AstNode for TrueExpr {1454 fn can_cast(kind: SyntaxKind) -> bool {1455 kind == TRUE_EXPR1456 }1457 fn cast(syntax: SyntaxNode) -> Option<Self> {1458 if Self::can_cast(syntax.kind()) {1459 Some(Self { syntax })1460 } else {1461 None1462 }1463 }1464 fn syntax(&self) -> &SyntaxNode {1465 &self.syntax1466 }1467}1468impl AstNode for FalseExpr {1469 fn can_cast(kind: SyntaxKind) -> bool {1470 kind == FALSE_EXPR1471 }1472 fn cast(syntax: SyntaxNode) -> Option<Self> {1473 if Self::can_cast(syntax.kind()) {1474 Some(Self { syntax })1475 } else {1476 None1477 }1478 }1479 fn syntax(&self) -> &SyntaxNode {1480 &self.syntax1481 }1482}1483impl AstNode for ExprFunction {1484 fn can_cast(kind: SyntaxKind) -> bool {1485 kind == EXPR_FUNCTION1486 }1487 fn cast(syntax: SyntaxNode) -> Option<Self> {1488 if Self::can_cast(syntax.kind()) {1489 Some(Self { syntax })1490 } else {1491 None1492 }1493 }1494 fn syntax(&self) -> &SyntaxNode {1495 &self.syntax1496 }1497}1498impl AstNode for ParamsDesc {1499 fn can_cast(kind: SyntaxKind) -> bool {1500 kind == PARAMS_DESC1501 }1502 fn cast(syntax: SyntaxNode) -> Option<Self> {1503 if Self::can_cast(syntax.kind()) {1504 Some(Self { syntax })1505 } else {1506 None1507 }1508 }1509 fn syntax(&self) -> &SyntaxNode {1510 &self.syntax1511 }1512}1513impl AstNode for ExprError {1514 fn can_cast(kind: SyntaxKind) -> bool {1515 kind == EXPR_ERROR1516 }1517 fn cast(syntax: SyntaxNode) -> Option<Self> {1518 if Self::can_cast(syntax.kind()) {1519 Some(Self { syntax })1520 } else {1521 None1522 }1523 }1524 fn syntax(&self) -> &SyntaxNode {1525 &self.syntax1526 }1527}1528impl AstNode for SliceDescEnd {1529 fn can_cast(kind: SyntaxKind) -> bool {1530 kind == SLICE_DESC_END1531 }1532 fn cast(syntax: SyntaxNode) -> Option<Self> {1533 if Self::can_cast(syntax.kind()) {1534 Some(Self { syntax })1535 } else {1536 None1537 }1538 }1539 fn syntax(&self) -> &SyntaxNode {1540 &self.syntax1541 }1542}1543impl AstNode for SliceDescStep {1544 fn can_cast(kind: SyntaxKind) -> bool {1545 kind == SLICE_DESC_STEP1546 }1547 fn cast(syntax: SyntaxNode) -> Option<Self> {1548 if Self::can_cast(syntax.kind()) {1549 Some(Self { syntax })1550 } else {1551 None1552 }1553 }1554 fn syntax(&self) -> &SyntaxNode {1555 &self.syntax1556 }1557}1558impl AstNode for Arg {1559 fn can_cast(kind: SyntaxKind) -> bool {1560 kind == ARG1561 }1562 fn cast(syntax: SyntaxNode) -> Option<Self> {1563 if Self::can_cast(syntax.kind()) {1564 Some(Self { syntax })1565 } else {1566 None1567 }1568 }1569 fn syntax(&self) -> &SyntaxNode {1570 &self.syntax1571 }1572}1573impl AstNode for ObjBodyComp {1574 fn can_cast(kind: SyntaxKind) -> bool {1575 kind == OBJ_BODY_COMP1576 }1577 fn cast(syntax: SyntaxNode) -> Option<Self> {1578 if Self::can_cast(syntax.kind()) {1579 Some(Self { syntax })1580 } else {1581 None1582 }1583 }1584 fn syntax(&self) -> &SyntaxNode {1585 &self.syntax1586 }1587}1588impl AstNode for ObjBodyMemberList {1589 fn can_cast(kind: SyntaxKind) -> bool {1590 kind == OBJ_BODY_MEMBER_LIST1591 }1592 fn cast(syntax: SyntaxNode) -> Option<Self> {1593 if Self::can_cast(syntax.kind()) {1594 Some(Self { syntax })1595 } else {1596 None1597 }1598 }1599 fn syntax(&self) -> &SyntaxNode {1600 &self.syntax1601 }1602}1603impl AstNode for MemberBindStmt {1604 fn can_cast(kind: SyntaxKind) -> bool {1605 kind == MEMBER_BIND_STMT1606 }1607 fn cast(syntax: SyntaxNode) -> Option<Self> {1608 if Self::can_cast(syntax.kind()) {1609 Some(Self { syntax })1610 } else {1611 None1612 }1613 }1614 fn syntax(&self) -> &SyntaxNode {1615 &self.syntax1616 }1617}1618impl AstNode for ObjLocal {1619 fn can_cast(kind: SyntaxKind) -> bool {1620 kind == OBJ_LOCAL1621 }1622 fn cast(syntax: SyntaxNode) -> Option<Self> {1623 if Self::can_cast(syntax.kind()) {1624 Some(Self { syntax })1625 } else {1626 None1627 }1628 }1629 fn syntax(&self) -> &SyntaxNode {1630 &self.syntax1631 }1632}1633impl AstNode for MemberAssertStmt {1634 fn can_cast(kind: SyntaxKind) -> bool {1635 kind == MEMBER_ASSERT_STMT1636 }1637 fn cast(syntax: SyntaxNode) -> Option<Self> {1638 if Self::can_cast(syntax.kind()) {1639 Some(Self { syntax })1640 } else {1641 None1642 }1643 }1644 fn syntax(&self) -> &SyntaxNode {1645 &self.syntax1646 }1647}1648impl AstNode for MemberFieldNormal {1649 fn can_cast(kind: SyntaxKind) -> bool {1650 kind == MEMBER_FIELD_NORMAL1651 }1652 fn cast(syntax: SyntaxNode) -> Option<Self> {1653 if Self::can_cast(syntax.kind()) {1654 Some(Self { syntax })1655 } else {1656 None1657 }1658 }1659 fn syntax(&self) -> &SyntaxNode {1660 &self.syntax1661 }1662}1663impl AstNode for Visibility {1664 fn can_cast(kind: SyntaxKind) -> bool {1665 kind == VISIBILITY1666 }1667 fn cast(syntax: SyntaxNode) -> Option<Self> {1668 if Self::can_cast(syntax.kind()) {1669 Some(Self { syntax })1670 } else {1671 None1672 }1673 }1674 fn syntax(&self) -> &SyntaxNode {1675 &self.syntax1676 }1677}1678impl AstNode for MemberFieldMethod {1679 fn can_cast(kind: SyntaxKind) -> bool {1680 kind == MEMBER_FIELD_METHOD1681 }1682 fn cast(syntax: SyntaxNode) -> Option<Self> {1683 if Self::can_cast(syntax.kind()) {1684 Some(Self { syntax })1685 } else {1686 None1687 }1688 }1689 fn syntax(&self) -> &SyntaxNode {1690 &self.syntax1691 }1692}1693impl AstNode for FieldNameFixed {1694 fn can_cast(kind: SyntaxKind) -> bool {1695 kind == FIELD_NAME_FIXED1696 }1697 fn cast(syntax: SyntaxNode) -> Option<Self> {1698 if Self::can_cast(syntax.kind()) {1699 Some(Self { syntax })1700 } else {1701 None1702 }1703 }1704 fn syntax(&self) -> &SyntaxNode {1705 &self.syntax1706 }1707}1708impl AstNode for FieldNameDynamic {1709 fn can_cast(kind: SyntaxKind) -> bool {1710 kind == FIELD_NAME_DYNAMIC1711 }1712 fn cast(syntax: SyntaxNode) -> Option<Self> {1713 if Self::can_cast(syntax.kind()) {1714 Some(Self { syntax })1715 } else {1716 None1717 }1718 }1719 fn syntax(&self) -> &SyntaxNode {1720 &self.syntax1721 }1722}1723impl AstNode for ForSpec {1724 fn can_cast(kind: SyntaxKind) -> bool {1725 kind == FOR_SPEC1726 }1727 fn cast(syntax: SyntaxNode) -> Option<Self> {1728 if Self::can_cast(syntax.kind()) {1729 Some(Self { syntax })1730 } else {1731 None1732 }1733 }1734 fn syntax(&self) -> &SyntaxNode {1735 &self.syntax1736 }1737}1738impl AstNode for ForObjSpec {1739 fn can_cast(kind: SyntaxKind) -> bool {1740 kind == FOR_OBJ_SPEC1741 }1742 fn cast(syntax: SyntaxNode) -> Option<Self> {1743 if Self::can_cast(syntax.kind()) {1744 Some(Self { syntax })1745 } else {1746 None1747 }1748 }1749 fn syntax(&self) -> &SyntaxNode {1750 &self.syntax1751 }1752}1753impl AstNode for IfSpec {1754 fn can_cast(kind: SyntaxKind) -> bool {1755 kind == IF_SPEC1756 }1757 fn cast(syntax: SyntaxNode) -> Option<Self> {1758 if Self::can_cast(syntax.kind()) {1759 Some(Self { syntax })1760 } else {1761 None1762 }1763 }1764 fn syntax(&self) -> &SyntaxNode {1765 &self.syntax1766 }1767}1768impl AstNode for BindDestruct {1769 fn can_cast(kind: SyntaxKind) -> bool {1770 kind == BIND_DESTRUCT1771 }1772 fn cast(syntax: SyntaxNode) -> Option<Self> {1773 if Self::can_cast(syntax.kind()) {1774 Some(Self { syntax })1775 } else {1776 None1777 }1778 }1779 fn syntax(&self) -> &SyntaxNode {1780 &self.syntax1781 }1782}1783impl AstNode for BindFunction {1784 fn can_cast(kind: SyntaxKind) -> bool {1785 kind == BIND_FUNCTION1786 }1787 fn cast(syntax: SyntaxNode) -> Option<Self> {1788 if Self::can_cast(syntax.kind()) {1789 Some(Self { syntax })1790 } else {1791 None1792 }1793 }1794 fn syntax(&self) -> &SyntaxNode {1795 &self.syntax1796 }1797}1798impl AstNode for Param {1799 fn can_cast(kind: SyntaxKind) -> bool {1800 kind == PARAM1801 }1802 fn cast(syntax: SyntaxNode) -> Option<Self> {1803 if Self::can_cast(syntax.kind()) {1804 Some(Self { syntax })1805 } else {1806 None1807 }1808 }1809 fn syntax(&self) -> &SyntaxNode {1810 &self.syntax1811 }1812}1813impl AstNode for DestructFull {1814 fn can_cast(kind: SyntaxKind) -> bool {1815 kind == DESTRUCT_FULL1816 }1817 fn cast(syntax: SyntaxNode) -> Option<Self> {1818 if Self::can_cast(syntax.kind()) {1819 Some(Self { syntax })1820 } else {1821 None1822 }1823 }1824 fn syntax(&self) -> &SyntaxNode {1825 &self.syntax1826 }1827}1828impl AstNode for DestructSkip {1829 fn can_cast(kind: SyntaxKind) -> bool {1830 kind == DESTRUCT_SKIP1831 }1832 fn cast(syntax: SyntaxNode) -> Option<Self> {1833 if Self::can_cast(syntax.kind()) {1834 Some(Self { syntax })1835 } else {1836 None1837 }1838 }1839 fn syntax(&self) -> &SyntaxNode {1840 &self.syntax1841 }1842}1843impl AstNode for DestructArray {1844 fn can_cast(kind: SyntaxKind) -> bool {1845 kind == DESTRUCT_ARRAY1846 }1847 fn cast(syntax: SyntaxNode) -> Option<Self> {1848 if Self::can_cast(syntax.kind()) {1849 Some(Self { syntax })1850 } else {1851 None1852 }1853 }1854 fn syntax(&self) -> &SyntaxNode {1855 &self.syntax1856 }1857}1858impl AstNode for DestructObject {1859 fn can_cast(kind: SyntaxKind) -> bool {1860 kind == DESTRUCT_OBJECT1861 }1862 fn cast(syntax: SyntaxNode) -> Option<Self> {1863 if Self::can_cast(syntax.kind()) {1864 Some(Self { syntax })1865 } else {1866 None1867 }1868 }1869 fn syntax(&self) -> &SyntaxNode {1870 &self.syntax1871 }1872}1873impl AstNode for DestructObjectField {1874 fn can_cast(kind: SyntaxKind) -> bool {1875 kind == DESTRUCT_OBJECT_FIELD1876 }1877 fn cast(syntax: SyntaxNode) -> Option<Self> {1878 if Self::can_cast(syntax.kind()) {1879 Some(Self { syntax })1880 } else {1881 None1882 }1883 }1884 fn syntax(&self) -> &SyntaxNode {1885 &self.syntax1886 }1887}1888impl AstNode for DestructRest {1889 fn can_cast(kind: SyntaxKind) -> bool {1890 kind == DESTRUCT_REST1891 }1892 fn cast(syntax: SyntaxNode) -> Option<Self> {1893 if Self::can_cast(syntax.kind()) {1894 Some(Self { syntax })1895 } else {1896 None1897 }1898 }1899 fn syntax(&self) -> &SyntaxNode {1900 &self.syntax1901 }1902}1903impl AstNode for DestructArrayElement {1904 fn can_cast(kind: SyntaxKind) -> bool {1905 kind == DESTRUCT_ARRAY_ELEMENT1906 }1907 fn cast(syntax: SyntaxNode) -> Option<Self> {1908 if Self::can_cast(syntax.kind()) {1909 Some(Self { syntax })1910 } else {1911 None1912 }1913 }1914 fn syntax(&self) -> &SyntaxNode {1915 &self.syntax1916 }1917}1918impl From<SuffixIndex> for Suffix {1919 fn from(node: SuffixIndex) -> Suffix {1920 Suffix::SuffixIndex(node)1921 }1922}1923impl From<SuffixIndexExpr> for Suffix {1924 fn from(node: SuffixIndexExpr) -> Suffix {1925 Suffix::SuffixIndexExpr(node)1926 }1927}1928impl From<SuffixSlice> for Suffix {1929 fn from(node: SuffixSlice) -> Suffix {1930 Suffix::SuffixSlice(node)1931 }1932}1933impl From<SuffixApply> for Suffix {1934 fn from(node: SuffixApply) -> Suffix {1935 Suffix::SuffixApply(node)1936 }1937}1938impl AstNode for Suffix {1939 fn can_cast(kind: SyntaxKind) -> bool {1940 match kind {1941 SUFFIX_INDEX | SUFFIX_INDEX_EXPR | SUFFIX_SLICE | SUFFIX_APPLY => true,1942 _ => false,1943 }1944 }1945 fn cast(syntax: SyntaxNode) -> Option<Self> {1946 let res = match syntax.kind() {1947 SUFFIX_INDEX => Suffix::SuffixIndex(SuffixIndex { syntax }),1948 SUFFIX_INDEX_EXPR => Suffix::SuffixIndexExpr(SuffixIndexExpr { syntax }),1949 SUFFIX_SLICE => Suffix::SuffixSlice(SuffixSlice { syntax }),1950 SUFFIX_APPLY => Suffix::SuffixApply(SuffixApply { syntax }),1951 _ => return None,1952 };1953 Some(res)1954 }1955 fn syntax(&self) -> &SyntaxNode {1956 match self {1957 Suffix::SuffixIndex(it) => &it.syntax,1958 Suffix::SuffixIndexExpr(it) => &it.syntax,1959 Suffix::SuffixSlice(it) => &it.syntax,1960 Suffix::SuffixApply(it) => &it.syntax,1961 }1962 }1963}1964impl From<BindDestruct> for Bind {1965 fn from(node: BindDestruct) -> Bind {1966 Bind::BindDestruct(node)1967 }1968}1969impl From<BindFunction> for Bind {1970 fn from(node: BindFunction) -> Bind {1971 Bind::BindFunction(node)1972 }1973}1974impl AstNode for Bind {1975 fn can_cast(kind: SyntaxKind) -> bool {1976 match kind {1977 BIND_DESTRUCT | BIND_FUNCTION => true,1978 _ => false,1979 }1980 }1981 fn cast(syntax: SyntaxNode) -> Option<Self> {1982 let res = match syntax.kind() {1983 BIND_DESTRUCT => Bind::BindDestruct(BindDestruct { syntax }),1984 BIND_FUNCTION => Bind::BindFunction(BindFunction { syntax }),1985 _ => return None,1986 };1987 Some(res)1988 }1989 fn syntax(&self) -> &SyntaxNode {1990 match self {1991 Bind::BindDestruct(it) => &it.syntax,1992 Bind::BindFunction(it) => &it.syntax,1993 }1994 }1995}1996impl From<StmtLocal> for Stmt {1997 fn from(node: StmtLocal) -> Stmt {1998 Stmt::StmtLocal(node)1999 }2000}2001impl From<StmtAssert> for Stmt {2002 fn from(node: StmtAssert) -> Stmt {2003 Stmt::StmtAssert(node)2004 }2005}2006impl AstNode for Stmt {2007 fn can_cast(kind: SyntaxKind) -> bool {2008 match kind {2009 STMT_LOCAL | STMT_ASSERT => true,2010 _ => false,2011 }2012 }2013 fn cast(syntax: SyntaxNode) -> Option<Self> {2014 let res = match syntax.kind() {2015 STMT_LOCAL => Stmt::StmtLocal(StmtLocal { syntax }),2016 STMT_ASSERT => Stmt::StmtAssert(StmtAssert { syntax }),2017 _ => return None,2018 };2019 Some(res)2020 }2021 fn syntax(&self) -> &SyntaxNode {2022 match self {2023 Stmt::StmtLocal(it) => &it.syntax,2024 Stmt::StmtAssert(it) => &it.syntax,2025 }2026 }2027}2028impl From<ObjBodyComp> for ObjBody {2029 fn from(node: ObjBodyComp) -> ObjBody {2030 ObjBody::ObjBodyComp(node)2031 }2032}2033impl From<ObjBodyMemberList> for ObjBody {2034 fn from(node: ObjBodyMemberList) -> ObjBody {2035 ObjBody::ObjBodyMemberList(node)2036 }2037}2038impl AstNode for ObjBody {2039 fn can_cast(kind: SyntaxKind) -> bool {2040 match kind {2041 OBJ_BODY_COMP | OBJ_BODY_MEMBER_LIST => true,2042 _ => false,2043 }2044 }2045 fn cast(syntax: SyntaxNode) -> Option<Self> {2046 let res = match syntax.kind() {2047 OBJ_BODY_COMP => ObjBody::ObjBodyComp(ObjBodyComp { syntax }),2048 OBJ_BODY_MEMBER_LIST => ObjBody::ObjBodyMemberList(ObjBodyMemberList { syntax }),2049 _ => return None,2050 };2051 Some(res)2052 }2053 fn syntax(&self) -> &SyntaxNode {2054 match self {2055 ObjBody::ObjBodyComp(it) => &it.syntax,2056 ObjBody::ObjBodyMemberList(it) => &it.syntax,2057 }2058 }2059}2060impl From<ForSpec> for CompSpec {2061 fn from(node: ForSpec) -> CompSpec {2062 CompSpec::ForSpec(node)2063 }2064}2065impl From<ForObjSpec> for CompSpec {2066 fn from(node: ForObjSpec) -> CompSpec {2067 CompSpec::ForObjSpec(node)2068 }2069}2070impl From<IfSpec> for CompSpec {2071 fn from(node: IfSpec) -> CompSpec {2072 CompSpec::IfSpec(node)2073 }2074}2075impl AstNode for CompSpec {2076 fn can_cast(kind: SyntaxKind) -> bool {2077 match kind {2078 FOR_SPEC | FOR_OBJ_SPEC | IF_SPEC => true,2079 _ => false,2080 }2081 }2082 fn cast(syntax: SyntaxNode) -> Option<Self> {2083 let res = match syntax.kind() {2084 FOR_SPEC => CompSpec::ForSpec(ForSpec { syntax }),2085 FOR_OBJ_SPEC => CompSpec::ForObjSpec(ForObjSpec { syntax }),2086 IF_SPEC => CompSpec::IfSpec(IfSpec { syntax }),2087 _ => return None,2088 };2089 Some(res)2090 }2091 fn syntax(&self) -> &SyntaxNode {2092 match self {2093 CompSpec::ForSpec(it) => &it.syntax,2094 CompSpec::ForObjSpec(it) => &it.syntax,2095 CompSpec::IfSpec(it) => &it.syntax,2096 }2097 }2098}2099impl From<ExprBinary> for ExprBase {2100 fn from(node: ExprBinary) -> ExprBase {2101 ExprBase::ExprBinary(node)2102 }2103}2104impl From<ExprUnary> for ExprBase {2105 fn from(node: ExprUnary) -> ExprBase {2106 ExprBase::ExprUnary(node)2107 }2108}2109impl From<ExprObjExtend> for ExprBase {2110 fn from(node: ExprObjExtend) -> ExprBase {2111 ExprBase::ExprObjExtend(node)2112 }2113}2114impl From<ExprParened> for ExprBase {2115 fn from(node: ExprParened) -> ExprBase {2116 ExprBase::ExprParened(node)2117 }2118}2119impl From<ExprString> for ExprBase {2120 fn from(node: ExprString) -> ExprBase {2121 ExprBase::ExprString(node)2122 }2123}2124impl From<ExprNumber> for ExprBase {2125 fn from(node: ExprNumber) -> ExprBase {2126 ExprBase::ExprNumber(node)2127 }2128}2129impl From<ExprLiteral> for ExprBase {2130 fn from(node: ExprLiteral) -> ExprBase {2131 ExprBase::ExprLiteral(node)2132 }2133}2134impl From<ExprArray> for ExprBase {2135 fn from(node: ExprArray) -> ExprBase {2136 ExprBase::ExprArray(node)2137 }2138}2139impl From<ExprObject> for ExprBase {2140 fn from(node: ExprObject) -> ExprBase {2141 ExprBase::ExprObject(node)2142 }2143}2144impl From<ExprArrayComp> for ExprBase {2145 fn from(node: ExprArrayComp) -> ExprBase {2146 ExprBase::ExprArrayComp(node)2147 }2148}2149impl From<ExprImport> for ExprBase {2150 fn from(node: ExprImport) -> ExprBase {2151 ExprBase::ExprImport(node)2152 }2153}2154impl From<ExprVar> for ExprBase {2155 fn from(node: ExprVar) -> ExprBase {2156 ExprBase::ExprVar(node)2157 }2158}2159impl From<ExprIfThenElse> for ExprBase {2160 fn from(node: ExprIfThenElse) -> ExprBase {2161 ExprBase::ExprIfThenElse(node)2162 }2163}2164impl From<ExprFunction> for ExprBase {2165 fn from(node: ExprFunction) -> ExprBase {2166 ExprBase::ExprFunction(node)2167 }2168}2169impl From<ExprError> for ExprBase {2170 fn from(node: ExprError) -> ExprBase {2171 ExprBase::ExprError(node)2172 }2173}2174impl AstNode for ExprBase {2175 fn can_cast(kind: SyntaxKind) -> bool {2176 match kind {2177 EXPR_BINARY | EXPR_UNARY | EXPR_OBJ_EXTEND | EXPR_PARENED | EXPR_STRING2178 | EXPR_NUMBER | EXPR_LITERAL | EXPR_ARRAY | EXPR_OBJECT | EXPR_ARRAY_COMP2179 | EXPR_IMPORT | EXPR_VAR | EXPR_IF_THEN_ELSE | EXPR_FUNCTION | EXPR_ERROR => true,2180 _ => false,2181 }2182 }2183 fn cast(syntax: SyntaxNode) -> Option<Self> {2184 let res = match syntax.kind() {2185 EXPR_BINARY => ExprBase::ExprBinary(ExprBinary { syntax }),2186 EXPR_UNARY => ExprBase::ExprUnary(ExprUnary { syntax }),2187 EXPR_OBJ_EXTEND => ExprBase::ExprObjExtend(ExprObjExtend { syntax }),2188 EXPR_PARENED => ExprBase::ExprParened(ExprParened { syntax }),2189 EXPR_STRING => ExprBase::ExprString(ExprString { syntax }),2190 EXPR_NUMBER => ExprBase::ExprNumber(ExprNumber { syntax }),2191 EXPR_LITERAL => ExprBase::ExprLiteral(ExprLiteral { syntax }),2192 EXPR_ARRAY => ExprBase::ExprArray(ExprArray { syntax }),2193 EXPR_OBJECT => ExprBase::ExprObject(ExprObject { syntax }),2194 EXPR_ARRAY_COMP => ExprBase::ExprArrayComp(ExprArrayComp { syntax }),2195 EXPR_IMPORT => ExprBase::ExprImport(ExprImport { syntax }),2196 EXPR_VAR => ExprBase::ExprVar(ExprVar { syntax }),2197 EXPR_IF_THEN_ELSE => ExprBase::ExprIfThenElse(ExprIfThenElse { syntax }),2198 EXPR_FUNCTION => ExprBase::ExprFunction(ExprFunction { syntax }),2199 EXPR_ERROR => ExprBase::ExprError(ExprError { syntax }),2200 _ => return None,2201 };2202 Some(res)2203 }2204 fn syntax(&self) -> &SyntaxNode {2205 match self {2206 ExprBase::ExprBinary(it) => &it.syntax,2207 ExprBase::ExprUnary(it) => &it.syntax,2208 ExprBase::ExprObjExtend(it) => &it.syntax,2209 ExprBase::ExprParened(it) => &it.syntax,2210 ExprBase::ExprString(it) => &it.syntax,2211 ExprBase::ExprNumber(it) => &it.syntax,2212 ExprBase::ExprLiteral(it) => &it.syntax,2213 ExprBase::ExprArray(it) => &it.syntax,2214 ExprBase::ExprObject(it) => &it.syntax,2215 ExprBase::ExprArrayComp(it) => &it.syntax,2216 ExprBase::ExprImport(it) => &it.syntax,2217 ExprBase::ExprVar(it) => &it.syntax,2218 ExprBase::ExprIfThenElse(it) => &it.syntax,2219 ExprBase::ExprFunction(it) => &it.syntax,2220 ExprBase::ExprError(it) => &it.syntax,2221 }2222 }2223}2224impl From<MemberBindStmt> for MemberComp {2225 fn from(node: MemberBindStmt) -> MemberComp {2226 MemberComp::MemberBindStmt(node)2227 }2228}2229impl From<MemberFieldNormal> for MemberComp {2230 fn from(node: MemberFieldNormal) -> MemberComp {2231 MemberComp::MemberFieldNormal(node)2232 }2233}2234impl From<MemberFieldMethod> for MemberComp {2235 fn from(node: MemberFieldMethod) -> MemberComp {2236 MemberComp::MemberFieldMethod(node)2237 }2238}2239impl AstNode for MemberComp {2240 fn can_cast(kind: SyntaxKind) -> bool {2241 match kind {2242 MEMBER_BIND_STMT | MEMBER_FIELD_NORMAL | MEMBER_FIELD_METHOD => true,2243 _ => false,2244 }2245 }2246 fn cast(syntax: SyntaxNode) -> Option<Self> {2247 let res = match syntax.kind() {2248 MEMBER_BIND_STMT => MemberComp::MemberBindStmt(MemberBindStmt { syntax }),2249 MEMBER_FIELD_NORMAL => MemberComp::MemberFieldNormal(MemberFieldNormal { syntax }),2250 MEMBER_FIELD_METHOD => MemberComp::MemberFieldMethod(MemberFieldMethod { syntax }),2251 _ => return None,2252 };2253 Some(res)2254 }2255 fn syntax(&self) -> &SyntaxNode {2256 match self {2257 MemberComp::MemberBindStmt(it) => &it.syntax,2258 MemberComp::MemberFieldNormal(it) => &it.syntax,2259 MemberComp::MemberFieldMethod(it) => &it.syntax,2260 }2261 }2262}2263impl From<MemberBindStmt> for Member {2264 fn from(node: MemberBindStmt) -> Member {2265 Member::MemberBindStmt(node)2266 }2267}2268impl From<MemberAssertStmt> for Member {2269 fn from(node: MemberAssertStmt) -> Member {2270 Member::MemberAssertStmt(node)2271 }2272}2273impl From<MemberFieldNormal> for Member {2274 fn from(node: MemberFieldNormal) -> Member {2275 Member::MemberFieldNormal(node)2276 }2277}2278impl From<MemberFieldMethod> for Member {2279 fn from(node: MemberFieldMethod) -> Member {2280 Member::MemberFieldMethod(node)2281 }2282}2283impl AstNode for Member {2284 fn can_cast(kind: SyntaxKind) -> bool {2285 match kind {2286 MEMBER_BIND_STMT | MEMBER_ASSERT_STMT | MEMBER_FIELD_NORMAL | MEMBER_FIELD_METHOD => {2287 true2288 }2289 _ => false,2290 }2291 }2292 fn cast(syntax: SyntaxNode) -> Option<Self> {2293 let res = match syntax.kind() {2294 MEMBER_BIND_STMT => Member::MemberBindStmt(MemberBindStmt { syntax }),2295 MEMBER_ASSERT_STMT => Member::MemberAssertStmt(MemberAssertStmt { syntax }),2296 MEMBER_FIELD_NORMAL => Member::MemberFieldNormal(MemberFieldNormal { syntax }),2297 MEMBER_FIELD_METHOD => Member::MemberFieldMethod(MemberFieldMethod { syntax }),2298 _ => return None,2299 };2300 Some(res)2301 }2302 fn syntax(&self) -> &SyntaxNode {2303 match self {2304 Member::MemberBindStmt(it) => &it.syntax,2305 Member::MemberAssertStmt(it) => &it.syntax,2306 Member::MemberFieldNormal(it) => &it.syntax,2307 Member::MemberFieldMethod(it) => &it.syntax,2308 }2309 }2310}2311impl From<FieldNameFixed> for FieldName {2312 fn from(node: FieldNameFixed) -> FieldName {2313 FieldName::FieldNameFixed(node)2314 }2315}2316impl From<FieldNameDynamic> for FieldName {2317 fn from(node: FieldNameDynamic) -> FieldName {2318 FieldName::FieldNameDynamic(node)2319 }2320}2321impl AstNode for FieldName {2322 fn can_cast(kind: SyntaxKind) -> bool {2323 match kind {2324 FIELD_NAME_FIXED | FIELD_NAME_DYNAMIC => true,2325 _ => false,2326 }2327 }2328 fn cast(syntax: SyntaxNode) -> Option<Self> {2329 let res = match syntax.kind() {2330 FIELD_NAME_FIXED => FieldName::FieldNameFixed(FieldNameFixed { syntax }),2331 FIELD_NAME_DYNAMIC => FieldName::FieldNameDynamic(FieldNameDynamic { syntax }),2332 _ => return None,2333 };2334 Some(res)2335 }2336 fn syntax(&self) -> &SyntaxNode {2337 match self {2338 FieldName::FieldNameFixed(it) => &it.syntax,2339 FieldName::FieldNameDynamic(it) => &it.syntax,2340 }2341 }2342}2343impl From<DestructFull> for Destruct {2344 fn from(node: DestructFull) -> Destruct {2345 Destruct::DestructFull(node)2346 }2347}2348impl From<DestructSkip> for Destruct {2349 fn from(node: DestructSkip) -> Destruct {2350 Destruct::DestructSkip(node)2351 }2352}2353impl From<DestructArray> for Destruct {2354 fn from(node: DestructArray) -> Destruct {2355 Destruct::DestructArray(node)2356 }2357}2358impl From<DestructObject> for Destruct {2359 fn from(node: DestructObject) -> Destruct {2360 Destruct::DestructObject(node)2361 }2362}2363impl AstNode for Destruct {2364 fn can_cast(kind: SyntaxKind) -> bool {2365 match kind {2366 DESTRUCT_FULL | DESTRUCT_SKIP | DESTRUCT_ARRAY | DESTRUCT_OBJECT => true,2367 _ => false,2368 }2369 }2370 fn cast(syntax: SyntaxNode) -> Option<Self> {2371 let res = match syntax.kind() {2372 DESTRUCT_FULL => Destruct::DestructFull(DestructFull { syntax }),2373 DESTRUCT_SKIP => Destruct::DestructSkip(DestructSkip { syntax }),2374 DESTRUCT_ARRAY => Destruct::DestructArray(DestructArray { syntax }),2375 DESTRUCT_OBJECT => Destruct::DestructObject(DestructObject { syntax }),2376 _ => return None,2377 };2378 Some(res)2379 }2380 fn syntax(&self) -> &SyntaxNode {2381 match self {2382 Destruct::DestructFull(it) => &it.syntax,2383 Destruct::DestructSkip(it) => &it.syntax,2384 Destruct::DestructArray(it) => &it.syntax,2385 Destruct::DestructObject(it) => &it.syntax,2386 }2387 }2388}2389impl From<DestructArrayElement> for DestructArrayPart {2390 fn from(node: DestructArrayElement) -> DestructArrayPart {2391 DestructArrayPart::DestructArrayElement(node)2392 }2393}2394impl From<DestructRest> for DestructArrayPart {2395 fn from(node: DestructRest) -> DestructArrayPart {2396 DestructArrayPart::DestructRest(node)2397 }2398}2399impl AstNode for DestructArrayPart {2400 fn can_cast(kind: SyntaxKind) -> bool {2401 match kind {2402 DESTRUCT_ARRAY_ELEMENT | DESTRUCT_REST => true,2403 _ => false,2404 }2405 }2406 fn cast(syntax: SyntaxNode) -> Option<Self> {2407 let res = match syntax.kind() {2408 DESTRUCT_ARRAY_ELEMENT => {2409 DestructArrayPart::DestructArrayElement(DestructArrayElement { syntax })2410 }2411 DESTRUCT_REST => DestructArrayPart::DestructRest(DestructRest { syntax }),2412 _ => return None,2413 };2414 Some(res)2415 }2416 fn syntax(&self) -> &SyntaxNode {2417 match self {2418 DestructArrayPart::DestructArrayElement(it) => &it.syntax,2419 DestructArrayPart::DestructRest(it) => &it.syntax,2420 }2421 }2422}2423impl AstToken for BinaryOperator {2424 fn can_cast(kind: SyntaxKind) -> bool {2425 BinaryOperatorKind::can_cast(kind)2426 }2427 fn cast(syntax: SyntaxToken) -> Option<Self> {2428 let kind = BinaryOperatorKind::cast(syntax.kind())?;2429 Some(BinaryOperator { syntax, kind })2430 }2431 fn syntax(&self) -> &SyntaxToken {2432 &self.syntax2433 }2434}2435impl BinaryOperatorKind {2436 fn can_cast(kind: SyntaxKind) -> bool {2437 match kind {2438 OR | NULL_COAELSE | AND | BIT_OR | BIT_XOR | BIT_AND | EQ | NE | LT | GT | LE | GE2439 | IN_KW | LHS | RHS | PLUS | MINUS | MUL | DIV | MODULO | META_OBJECT_APPLY2440 | ERROR_NO_OPERATOR => true,2441 _ => false,2442 }2443 }2444 pub fn cast(kind: SyntaxKind) -> Option<Self> {2445 let res = match kind {2446 OR => Self::Or,2447 NULL_COAELSE => Self::NullCoaelse,2448 AND => Self::And,2449 BIT_OR => Self::BitOr,2450 BIT_XOR => Self::BitXor,2451 BIT_AND => Self::BitAnd,2452 EQ => Self::Eq,2453 NE => Self::Ne,2454 LT => Self::Lt,2455 GT => Self::Gt,2456 LE => Self::Le,2457 GE => Self::Ge,2458 IN_KW => Self::InKw,2459 LHS => Self::Lhs,2460 RHS => Self::Rhs,2461 PLUS => Self::Plus,2462 MINUS => Self::Minus,2463 MUL => Self::Mul,2464 DIV => Self::Div,2465 MODULO => Self::Modulo,2466 META_OBJECT_APPLY => Self::MetaObjectApply,2467 ERROR_NO_OPERATOR => Self::ErrorNoOperator,2468 _ => return None,2469 };2470 Some(res)2471 }2472}2473impl BinaryOperator {2474 pub fn kind(&self) -> BinaryOperatorKind {2475 self.kind2476 }2477}2478impl std::fmt::Display for BinaryOperator {2479 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2480 std::fmt::Display::fmt(self.syntax(), f)2481 }2482}2483impl AstToken for UnaryOperator {2484 fn can_cast(kind: SyntaxKind) -> bool {2485 UnaryOperatorKind::can_cast(kind)2486 }2487 fn cast(syntax: SyntaxToken) -> Option<Self> {2488 let kind = UnaryOperatorKind::cast(syntax.kind())?;2489 Some(UnaryOperator { syntax, kind })2490 }2491 fn syntax(&self) -> &SyntaxToken {2492 &self.syntax2493 }2494}2495impl UnaryOperatorKind {2496 fn can_cast(kind: SyntaxKind) -> bool {2497 match kind {2498 MINUS | NOT | BIT_NOT | PLUS => true,2499 _ => false,2500 }2501 }2502 pub fn cast(kind: SyntaxKind) -> Option<Self> {2503 let res = match kind {2504 MINUS => Self::Minus,2505 NOT => Self::Not,2506 BIT_NOT => Self::BitNot,2507 PLUS => Self::Plus,2508 _ => return None,2509 };2510 Some(res)2511 }2512}2513impl UnaryOperator {2514 pub fn kind(&self) -> UnaryOperatorKind {2515 self.kind2516 }2517}2518impl std::fmt::Display for UnaryOperator {2519 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2520 std::fmt::Display::fmt(self.syntax(), f)2521 }2522}2523impl AstToken for Literal {2524 fn can_cast(kind: SyntaxKind) -> bool {2525 LiteralKind::can_cast(kind)2526 }2527 fn cast(syntax: SyntaxToken) -> Option<Self> {2528 let kind = LiteralKind::cast(syntax.kind())?;2529 Some(Literal { syntax, kind })2530 }2531 fn syntax(&self) -> &SyntaxToken {2532 &self.syntax2533 }2534}2535impl LiteralKind {2536 fn can_cast(kind: SyntaxKind) -> bool {2537 match kind {2538 NULL_KW | TRUE_KW | FALSE_KW | SELF_KW | DOLLAR | SUPER_KW => true,2539 _ => false,2540 }2541 }2542 pub fn cast(kind: SyntaxKind) -> Option<Self> {2543 let res = match kind {2544 NULL_KW => Self::NullKw,2545 TRUE_KW => Self::TrueKw,2546 FALSE_KW => Self::FalseKw,2547 SELF_KW => Self::SelfKw,2548 DOLLAR => Self::Dollar,2549 SUPER_KW => Self::SuperKw,2550 _ => return None,2551 };2552 Some(res)2553 }2554}2555impl Literal {2556 pub fn kind(&self) -> LiteralKind {2557 self.kind2558 }2559}2560impl std::fmt::Display for Literal {2561 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2562 std::fmt::Display::fmt(self.syntax(), f)2563 }2564}2565impl AstToken for Text {2566 fn can_cast(kind: SyntaxKind) -> bool {2567 TextKind::can_cast(kind)2568 }2569 fn cast(syntax: SyntaxToken) -> Option<Self> {2570 let kind = TextKind::cast(syntax.kind())?;2571 Some(Text { syntax, kind })2572 }2573 fn syntax(&self) -> &SyntaxToken {2574 &self.syntax2575 }2576}2577impl TextKind {2578 fn can_cast(kind: SyntaxKind) -> bool {2579 match kind {2580 STRING_DOUBLE2581 | ERROR_STRING_DOUBLE_UNTERMINATED2582 | STRING_SINGLE2583 | ERROR_STRING_SINGLE_UNTERMINATED2584 | STRING_DOUBLE_VERBATIM2585 | ERROR_STRING_DOUBLE_VERBATIM_UNTERMINATED2586 | STRING_SINGLE_VERBATIM2587 | ERROR_STRING_SINGLE_VERBATIM_UNTERMINATED2588 | ERROR_STRING_VERBATIM_MISSING_QUOTES2589 | STRING_BLOCK2590 | ERROR_STRING_BLOCK_UNEXPECTED_END2591 | ERROR_STRING_BLOCK_MISSING_NEW_LINE2592 | ERROR_STRING_BLOCK_MISSING_TERMINATION2593 | ERROR_STRING_BLOCK_MISSING_INDENT => true,2594 _ => false,2595 }2596 }2597 pub fn cast(kind: SyntaxKind) -> Option<Self> {2598 let res = match kind {2599 STRING_DOUBLE => Self::StringDouble,2600 ERROR_STRING_DOUBLE_UNTERMINATED => Self::ErrorStringDoubleUnterminated,2601 STRING_SINGLE => Self::StringSingle,2602 ERROR_STRING_SINGLE_UNTERMINATED => Self::ErrorStringSingleUnterminated,2603 STRING_DOUBLE_VERBATIM => Self::StringDoubleVerbatim,2604 ERROR_STRING_DOUBLE_VERBATIM_UNTERMINATED => {2605 Self::ErrorStringDoubleVerbatimUnterminated2606 }2607 STRING_SINGLE_VERBATIM => Self::StringSingleVerbatim,2608 ERROR_STRING_SINGLE_VERBATIM_UNTERMINATED => {2609 Self::ErrorStringSingleVerbatimUnterminated2610 }2611 ERROR_STRING_VERBATIM_MISSING_QUOTES => Self::ErrorStringVerbatimMissingQuotes,2612 STRING_BLOCK => Self::StringBlock,2613 ERROR_STRING_BLOCK_UNEXPECTED_END => Self::ErrorStringBlockUnexpectedEnd,2614 ERROR_STRING_BLOCK_MISSING_NEW_LINE => Self::ErrorStringBlockMissingNewLine,2615 ERROR_STRING_BLOCK_MISSING_TERMINATION => Self::ErrorStringBlockMissingTermination,2616 ERROR_STRING_BLOCK_MISSING_INDENT => Self::ErrorStringBlockMissingIndent,2617 _ => return None,2618 };2619 Some(res)2620 }2621}2622impl Text {2623 pub fn kind(&self) -> TextKind {2624 self.kind2625 }2626}2627impl std::fmt::Display for Text {2628 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2629 std::fmt::Display::fmt(self.syntax(), f)2630 }2631}2632impl AstToken for Number {2633 fn can_cast(kind: SyntaxKind) -> bool {2634 NumberKind::can_cast(kind)2635 }2636 fn cast(syntax: SyntaxToken) -> Option<Self> {2637 let kind = NumberKind::cast(syntax.kind())?;2638 Some(Number { syntax, kind })2639 }2640 fn syntax(&self) -> &SyntaxToken {2641 &self.syntax2642 }2643}2644impl NumberKind {2645 fn can_cast(kind: SyntaxKind) -> bool {2646 match kind {2647 FLOAT2648 | ERROR_FLOAT_JUNK_AFTER_POINT2649 | ERROR_FLOAT_JUNK_AFTER_EXPONENT2650 | ERROR_FLOAT_JUNK_AFTER_EXPONENT_SIGN => true,2651 _ => false,2652 }2653 }2654 pub fn cast(kind: SyntaxKind) -> Option<Self> {2655 let res = match kind {2656 FLOAT => Self::Float,2657 ERROR_FLOAT_JUNK_AFTER_POINT => Self::ErrorFloatJunkAfterPoint,2658 ERROR_FLOAT_JUNK_AFTER_EXPONENT => Self::ErrorFloatJunkAfterExponent,2659 ERROR_FLOAT_JUNK_AFTER_EXPONENT_SIGN => Self::ErrorFloatJunkAfterExponentSign,2660 _ => return None,2661 };2662 Some(res)2663 }2664}2665impl Number {2666 pub fn kind(&self) -> NumberKind {2667 self.kind2668 }2669}2670impl std::fmt::Display for Number {2671 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2672 std::fmt::Display::fmt(self.syntax(), f)2673 }2674}2675impl AstToken for ImportKind {2676 fn can_cast(kind: SyntaxKind) -> bool {2677 ImportKindKind::can_cast(kind)2678 }2679 fn cast(syntax: SyntaxToken) -> Option<Self> {2680 let kind = ImportKindKind::cast(syntax.kind())?;2681 Some(ImportKind { syntax, kind })2682 }2683 fn syntax(&self) -> &SyntaxToken {2684 &self.syntax2685 }2686}2687impl ImportKindKind {2688 fn can_cast(kind: SyntaxKind) -> bool {2689 match kind {2690 IMPORTSTR_KW | IMPORTBIN_KW | IMPORT_KW => true,2691 _ => false,2692 }2693 }2694 pub fn cast(kind: SyntaxKind) -> Option<Self> {2695 let res = match kind {2696 IMPORTSTR_KW => Self::ImportstrKw,2697 IMPORTBIN_KW => Self::ImportbinKw,2698 IMPORT_KW => Self::ImportKw,2699 _ => return None,2700 };2701 Some(res)2702 }2703}2704impl ImportKind {2705 pub fn kind(&self) -> ImportKindKind {2706 self.kind2707 }2708}2709impl std::fmt::Display for ImportKind {2710 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2711 std::fmt::Display::fmt(self.syntax(), f)2712 }2713}2714impl AstToken for Trivia {2715 fn can_cast(kind: SyntaxKind) -> bool {2716 TriviaKind::can_cast(kind)2717 }2718 fn cast(syntax: SyntaxToken) -> Option<Self> {2719 let kind = TriviaKind::cast(syntax.kind())?;2720 Some(Trivia { syntax, kind })2721 }2722 fn syntax(&self) -> &SyntaxToken {2723 &self.syntax2724 }2725}2726impl TriviaKind {2727 fn can_cast(kind: SyntaxKind) -> bool {2728 match kind {2729 WHITESPACE2730 | MULTI_LINE_COMMENT2731 | ERROR_COMMENT_TOO_SHORT2732 | ERROR_COMMENT_UNTERMINATED2733 | SINGLE_LINE_HASH_COMMENT2734 | SINGLE_LINE_SLASH_COMMENT => true,2735 _ => false,2736 }2737 }2738 pub fn cast(kind: SyntaxKind) -> Option<Self> {2739 let res = match kind {2740 WHITESPACE => Self::Whitespace,2741 MULTI_LINE_COMMENT => Self::MultiLineComment,2742 ERROR_COMMENT_TOO_SHORT => Self::ErrorCommentTooShort,2743 ERROR_COMMENT_UNTERMINATED => Self::ErrorCommentUnterminated,2744 SINGLE_LINE_HASH_COMMENT => Self::SingleLineHashComment,2745 SINGLE_LINE_SLASH_COMMENT => Self::SingleLineSlashComment,2746 _ => return None,2747 };2748 Some(res)2749 }2750}2751impl Trivia {2752 pub fn kind(&self) -> TriviaKind {2753 self.kind2754 }2755}2756impl std::fmt::Display for Trivia {2757 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2758 std::fmt::Display::fmt(self.syntax(), f)2759 }2760}2761impl AstToken for CustomError {2762 fn can_cast(kind: SyntaxKind) -> bool {2763 CustomErrorKind::can_cast(kind)2764 }2765 fn cast(syntax: SyntaxToken) -> Option<Self> {2766 let kind = CustomErrorKind::cast(syntax.kind())?;2767 Some(CustomError { syntax, kind })2768 }2769 fn syntax(&self) -> &SyntaxToken {2770 &self.syntax2771 }2772}2773impl CustomErrorKind {2774 fn can_cast(kind: SyntaxKind) -> bool {2775 match kind {2776 ERROR_MISSING_TOKEN | ERROR_UNEXPECTED_TOKEN | ERROR_CUSTOM => true,2777 _ => false,2778 }2779 }2780 pub fn cast(kind: SyntaxKind) -> Option<Self> {2781 let res = match kind {2782 ERROR_MISSING_TOKEN => Self::ErrorMissingToken,2783 ERROR_UNEXPECTED_TOKEN => Self::ErrorUnexpectedToken,2784 ERROR_CUSTOM => Self::ErrorCustom,2785 _ => return None,2786 };2787 Some(res)2788 }2789}2790impl CustomError {2791 pub fn kind(&self) -> CustomErrorKind {2792 self.kind2793 }2794}2795impl std::fmt::Display for CustomError {2796 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2797 std::fmt::Display::fmt(self.syntax(), f)2798 }2799}2800impl std::fmt::Display for Suffix {2801 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2802 std::fmt::Display::fmt(self.syntax(), f)2803 }2804}2805impl std::fmt::Display for Bind {2806 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2807 std::fmt::Display::fmt(self.syntax(), f)2808 }2809}2810impl std::fmt::Display for Stmt {2811 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2812 std::fmt::Display::fmt(self.syntax(), f)2813 }2814}2815impl std::fmt::Display for ObjBody {2816 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2817 std::fmt::Display::fmt(self.syntax(), f)2818 }2819}2820impl std::fmt::Display for CompSpec {2821 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2822 std::fmt::Display::fmt(self.syntax(), f)2823 }2824}2825impl std::fmt::Display for ExprBase {2826 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2827 std::fmt::Display::fmt(self.syntax(), f)2828 }2829}2830impl std::fmt::Display for MemberComp {2831 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2832 std::fmt::Display::fmt(self.syntax(), f)2833 }2834}2835impl std::fmt::Display for Member {2836 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2837 std::fmt::Display::fmt(self.syntax(), f)2838 }2839}2840impl std::fmt::Display for FieldName {2841 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2842 std::fmt::Display::fmt(self.syntax(), f)2843 }2844}2845impl std::fmt::Display for Destruct {2846 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2847 std::fmt::Display::fmt(self.syntax(), f)2848 }2849}2850impl std::fmt::Display for DestructArrayPart {2851 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2852 std::fmt::Display::fmt(self.syntax(), f)2853 }2854}2855impl std::fmt::Display for SourceFile {2856 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2857 std::fmt::Display::fmt(self.syntax(), f)2858 }2859}2860impl std::fmt::Display for Expr {2861 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2862 std::fmt::Display::fmt(self.syntax(), f)2863 }2864}2865impl std::fmt::Display for SuffixIndex {2866 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2867 std::fmt::Display::fmt(self.syntax(), f)2868 }2869}2870impl std::fmt::Display for Name {2871 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2872 std::fmt::Display::fmt(self.syntax(), f)2873 }2874}2875impl std::fmt::Display for SuffixIndexExpr {2876 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2877 std::fmt::Display::fmt(self.syntax(), f)2878 }2879}2880impl std::fmt::Display for SuffixSlice {2881 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2882 std::fmt::Display::fmt(self.syntax(), f)2883 }2884}2885impl std::fmt::Display for SliceDesc {2886 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2887 std::fmt::Display::fmt(self.syntax(), f)2888 }2889}2890impl std::fmt::Display for SuffixApply {2891 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2892 std::fmt::Display::fmt(self.syntax(), f)2893 }2894}2895impl std::fmt::Display for ArgsDesc {2896 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2897 std::fmt::Display::fmt(self.syntax(), f)2898 }2899}2900impl std::fmt::Display for StmtLocal {2901 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2902 std::fmt::Display::fmt(self.syntax(), f)2903 }2904}2905impl std::fmt::Display for StmtAssert {2906 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2907 std::fmt::Display::fmt(self.syntax(), f)2908 }2909}2910impl std::fmt::Display for Assertion {2911 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2912 std::fmt::Display::fmt(self.syntax(), f)2913 }2914}2915impl std::fmt::Display for ExprBinary {2916 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2917 std::fmt::Display::fmt(self.syntax(), f)2918 }2919}2920impl std::fmt::Display for ExprUnary {2921 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2922 std::fmt::Display::fmt(self.syntax(), f)2923 }2924}2925impl std::fmt::Display for ExprObjExtend {2926 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2927 std::fmt::Display::fmt(self.syntax(), f)2928 }2929}2930impl std::fmt::Display for ExprParened {2931 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2932 std::fmt::Display::fmt(self.syntax(), f)2933 }2934}2935impl std::fmt::Display for ExprLiteral {2936 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2937 std::fmt::Display::fmt(self.syntax(), f)2938 }2939}2940impl std::fmt::Display for ExprString {2941 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2942 std::fmt::Display::fmt(self.syntax(), f)2943 }2944}2945impl std::fmt::Display for ExprNumber {2946 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2947 std::fmt::Display::fmt(self.syntax(), f)2948 }2949}2950impl std::fmt::Display for ExprArray {2951 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2952 std::fmt::Display::fmt(self.syntax(), f)2953 }2954}2955impl std::fmt::Display for ExprObject {2956 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2957 std::fmt::Display::fmt(self.syntax(), f)2958 }2959}2960impl std::fmt::Display for ExprArrayComp {2961 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2962 std::fmt::Display::fmt(self.syntax(), f)2963 }2964}2965impl std::fmt::Display for ExprImport {2966 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2967 std::fmt::Display::fmt(self.syntax(), f)2968 }2969}2970impl std::fmt::Display for ExprVar {2971 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2972 std::fmt::Display::fmt(self.syntax(), f)2973 }2974}2975impl std::fmt::Display for ExprIfThenElse {2976 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2977 std::fmt::Display::fmt(self.syntax(), f)2978 }2979}2980impl std::fmt::Display for TrueExpr {2981 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2982 std::fmt::Display::fmt(self.syntax(), f)2983 }2984}2985impl std::fmt::Display for FalseExpr {2986 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2987 std::fmt::Display::fmt(self.syntax(), f)2988 }2989}2990impl std::fmt::Display for ExprFunction {2991 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2992 std::fmt::Display::fmt(self.syntax(), f)2993 }2994}2995impl std::fmt::Display for ParamsDesc {2996 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2997 std::fmt::Display::fmt(self.syntax(), f)2998 }2999}3000impl std::fmt::Display for ExprError {3001 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3002 std::fmt::Display::fmt(self.syntax(), f)3003 }3004}3005impl std::fmt::Display for SliceDescEnd {3006 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3007 std::fmt::Display::fmt(self.syntax(), f)3008 }3009}3010impl std::fmt::Display for SliceDescStep {3011 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3012 std::fmt::Display::fmt(self.syntax(), f)3013 }3014}3015impl std::fmt::Display for Arg {3016 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3017 std::fmt::Display::fmt(self.syntax(), f)3018 }3019}3020impl std::fmt::Display for ObjBodyComp {3021 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3022 std::fmt::Display::fmt(self.syntax(), f)3023 }3024}3025impl std::fmt::Display for ObjBodyMemberList {3026 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3027 std::fmt::Display::fmt(self.syntax(), f)3028 }3029}3030impl std::fmt::Display for MemberBindStmt {3031 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3032 std::fmt::Display::fmt(self.syntax(), f)3033 }3034}3035impl std::fmt::Display for ObjLocal {3036 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3037 std::fmt::Display::fmt(self.syntax(), f)3038 }3039}3040impl std::fmt::Display for MemberAssertStmt {3041 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3042 std::fmt::Display::fmt(self.syntax(), f)3043 }3044}3045impl std::fmt::Display for MemberFieldNormal {3046 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3047 std::fmt::Display::fmt(self.syntax(), f)3048 }3049}3050impl std::fmt::Display for Visibility {3051 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3052 std::fmt::Display::fmt(self.syntax(), f)3053 }3054}3055impl std::fmt::Display for MemberFieldMethod {3056 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3057 std::fmt::Display::fmt(self.syntax(), f)3058 }3059}3060impl std::fmt::Display for FieldNameFixed {3061 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3062 std::fmt::Display::fmt(self.syntax(), f)3063 }3064}3065impl std::fmt::Display for FieldNameDynamic {3066 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3067 std::fmt::Display::fmt(self.syntax(), f)3068 }3069}3070impl std::fmt::Display for ForSpec {3071 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3072 std::fmt::Display::fmt(self.syntax(), f)3073 }3074}3075impl std::fmt::Display for ForObjSpec {3076 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3077 std::fmt::Display::fmt(self.syntax(), f)3078 }3079}3080impl std::fmt::Display for IfSpec {3081 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3082 std::fmt::Display::fmt(self.syntax(), f)3083 }3084}3085impl std::fmt::Display for BindDestruct {3086 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3087 std::fmt::Display::fmt(self.syntax(), f)3088 }3089}3090impl std::fmt::Display for BindFunction {3091 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3092 std::fmt::Display::fmt(self.syntax(), f)3093 }3094}3095impl std::fmt::Display for Param {3096 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3097 std::fmt::Display::fmt(self.syntax(), f)3098 }3099}3100impl std::fmt::Display for DestructFull {3101 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3102 std::fmt::Display::fmt(self.syntax(), f)3103 }3104}3105impl std::fmt::Display for DestructSkip {3106 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3107 std::fmt::Display::fmt(self.syntax(), f)3108 }3109}3110impl std::fmt::Display for DestructArray {3111 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3112 std::fmt::Display::fmt(self.syntax(), f)3113 }3114}3115impl std::fmt::Display for DestructObject {3116 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3117 std::fmt::Display::fmt(self.syntax(), f)3118 }3119}3120impl std::fmt::Display for DestructObjectField {3121 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3122 std::fmt::Display::fmt(self.syntax(), f)3123 }3124}3125impl std::fmt::Display for DestructRest {3126 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3127 std::fmt::Display::fmt(self.syntax(), f)3128 }3129}3130impl std::fmt::Display for DestructArrayElement {3131 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3132 std::fmt::Display::fmt(self.syntax(), f)3133 }3134}crates/jrsonnet-rowan-parser/src/precedence.rsdiffbeforeafterboth--- a/crates/jrsonnet-rowan-parser/src/precedence.rs
+++ b/crates/jrsonnet-rowan-parser/src/precedence.rs
@@ -22,7 +22,7 @@
impl UnaryOperatorKind {
pub fn binding_power(&self) -> ((), u8) {
match self {
- Self::Minus | Self::Not | Self::BitNot => ((), 20),
+ Self::Minus | Self::Not | Self::BitNot | Self::Plus => ((), 20),
}
}
}
crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__no_lhs.snapdiffbeforeafterboth--- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__no_lhs.snap
+++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__no_lhs.snap
@@ -1,12 +1,13 @@
---
source: crates/jrsonnet-rowan-parser/src/tests.rs
-expression: "+ 2\n"
+assertion_line: 60
+expression: "* 2\n"
---
SOURCE_FILE@0..4
EXPR@0..0
ERROR_MISSING_TOKEN@0..0
ERROR_CUSTOM@0..3
- PLUS@0..1 "+"
+ MUL@0..1 "*"
WHITESPACE@1..2 " "
FLOAT@2..3 "2"
WHITESPACE@3..4 "\n"
@@ -15,5 +16,5 @@
LocatedSyntaxError { error: Custom { error: "unexpected tokens after end" }, range: 0..3 }
===
· ╭── missing expression
-1 │ + 2
+1 │ * 2
· ╰───── unexpected tokens after end
crates/jrsonnet-rowan-parser/src/tests.rsdiffbeforeafterboth--- a/crates/jrsonnet-rowan-parser/src/tests.rs
+++ b/crates/jrsonnet-rowan-parser/src/tests.rs
@@ -85,7 +85,7 @@
a +
"#
no_lhs => r#"
- + 2
+ * 2
"#
no_operator => "
2 2