1 //! Generated file, do not edit by hand, see `crate/ra_tools/src/codegen`
4 ast::{self, AstChildren, AstNode},
8 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
10 pub(crate) syntax: SyntaxNode,
12 impl AstNode for Alias {
13 fn can_cast(kind: SyntaxKind) -> bool {
19 fn cast(syntax: SyntaxNode) -> Option<Self> {
20 if Self::can_cast(syntax.kind()) {
26 fn syntax(&self) -> &SyntaxNode {
30 impl ast::NameOwner for Alias {}
32 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
34 pub(crate) syntax: SyntaxNode,
36 impl AstNode for ArgList {
37 fn can_cast(kind: SyntaxKind) -> bool {
43 fn cast(syntax: SyntaxNode) -> Option<Self> {
44 if Self::can_cast(syntax.kind()) {
50 fn syntax(&self) -> &SyntaxNode {
55 pub fn args(&self) -> AstChildren<Expr> {
56 AstChildren::new(&self.syntax)
59 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
60 pub struct ArrayExpr {
61 pub(crate) syntax: SyntaxNode,
63 impl AstNode for ArrayExpr {
64 fn can_cast(kind: SyntaxKind) -> bool {
70 fn cast(syntax: SyntaxNode) -> Option<Self> {
71 if Self::can_cast(syntax.kind()) {
77 fn syntax(&self) -> &SyntaxNode {
82 pub fn exprs(&self) -> AstChildren<Expr> {
83 AstChildren::new(&self.syntax)
86 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
87 pub struct ArrayType {
88 pub(crate) syntax: SyntaxNode,
90 impl AstNode for ArrayType {
91 fn can_cast(kind: SyntaxKind) -> bool {
97 fn cast(syntax: SyntaxNode) -> Option<Self> {
98 if Self::can_cast(syntax.kind()) {
104 fn syntax(&self) -> &SyntaxNode {
109 pub fn type_ref(&self) -> Option<TypeRef> {
110 AstChildren::new(&self.syntax).next()
112 pub fn expr(&self) -> Option<Expr> {
113 AstChildren::new(&self.syntax).next()
116 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
117 pub struct AssocTypeArg {
118 pub(crate) syntax: SyntaxNode,
120 impl AstNode for AssocTypeArg {
121 fn can_cast(kind: SyntaxKind) -> bool {
123 ASSOC_TYPE_ARG => true,
127 fn cast(syntax: SyntaxNode) -> Option<Self> {
128 if Self::can_cast(syntax.kind()) {
129 Some(Self { syntax })
134 fn syntax(&self) -> &SyntaxNode {
139 pub fn name_ref(&self) -> Option<NameRef> {
140 AstChildren::new(&self.syntax).next()
142 pub fn type_ref(&self) -> Option<TypeRef> {
143 AstChildren::new(&self.syntax).next()
146 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
148 pub(crate) syntax: SyntaxNode,
150 impl AstNode for Attr {
151 fn can_cast(kind: SyntaxKind) -> bool {
157 fn cast(syntax: SyntaxNode) -> Option<Self> {
158 if Self::can_cast(syntax.kind()) {
159 Some(Self { syntax })
164 fn syntax(&self) -> &SyntaxNode {
169 pub fn path(&self) -> Option<Path> {
170 AstChildren::new(&self.syntax).next()
172 pub fn input(&self) -> Option<AttrInput> {
173 AstChildren::new(&self.syntax).next()
176 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
179 TokenTree(TokenTree),
181 impl From<Literal> for AttrInput {
182 fn from(node: Literal) -> AttrInput {
183 AttrInput::Literal(node)
186 impl From<TokenTree> for AttrInput {
187 fn from(node: TokenTree) -> AttrInput {
188 AttrInput::TokenTree(node)
191 impl AstNode for AttrInput {
192 fn can_cast(kind: SyntaxKind) -> bool {
194 LITERAL | TOKEN_TREE => true,
198 fn cast(syntax: SyntaxNode) -> Option<Self> {
199 let res = match syntax.kind() {
200 LITERAL => AttrInput::Literal(Literal { syntax }),
201 TOKEN_TREE => AttrInput::TokenTree(TokenTree { syntax }),
206 fn syntax(&self) -> &SyntaxNode {
208 AttrInput::Literal(it) => &it.syntax,
209 AttrInput::TokenTree(it) => &it.syntax,
214 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
215 pub struct AwaitExpr {
216 pub(crate) syntax: SyntaxNode,
218 impl AstNode for AwaitExpr {
219 fn can_cast(kind: SyntaxKind) -> bool {
225 fn cast(syntax: SyntaxNode) -> Option<Self> {
226 if Self::can_cast(syntax.kind()) {
227 Some(Self { syntax })
232 fn syntax(&self) -> &SyntaxNode {
237 pub fn expr(&self) -> Option<Expr> {
238 AstChildren::new(&self.syntax).next()
241 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
243 pub(crate) syntax: SyntaxNode,
245 impl AstNode for BinExpr {
246 fn can_cast(kind: SyntaxKind) -> bool {
252 fn cast(syntax: SyntaxNode) -> Option<Self> {
253 if Self::can_cast(syntax.kind()) {
254 Some(Self { syntax })
259 fn syntax(&self) -> &SyntaxNode {
264 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
266 pub(crate) syntax: SyntaxNode,
268 impl AstNode for BindPat {
269 fn can_cast(kind: SyntaxKind) -> bool {
275 fn cast(syntax: SyntaxNode) -> Option<Self> {
276 if Self::can_cast(syntax.kind()) {
277 Some(Self { syntax })
282 fn syntax(&self) -> &SyntaxNode {
286 impl ast::NameOwner for BindPat {}
288 pub fn pat(&self) -> Option<Pat> {
289 AstChildren::new(&self.syntax).next()
292 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
294 pub(crate) syntax: SyntaxNode,
296 impl AstNode for Block {
297 fn can_cast(kind: SyntaxKind) -> bool {
303 fn cast(syntax: SyntaxNode) -> Option<Self> {
304 if Self::can_cast(syntax.kind()) {
305 Some(Self { syntax })
310 fn syntax(&self) -> &SyntaxNode {
314 impl ast::AttrsOwner for Block {}
315 impl ast::ModuleItemOwner for Block {}
317 pub fn statements(&self) -> AstChildren<Stmt> {
318 AstChildren::new(&self.syntax)
320 pub fn expr(&self) -> Option<Expr> {
321 AstChildren::new(&self.syntax).next()
324 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
325 pub struct BlockExpr {
326 pub(crate) syntax: SyntaxNode,
328 impl AstNode for BlockExpr {
329 fn can_cast(kind: SyntaxKind) -> bool {
335 fn cast(syntax: SyntaxNode) -> Option<Self> {
336 if Self::can_cast(syntax.kind()) {
337 Some(Self { syntax })
342 fn syntax(&self) -> &SyntaxNode {
347 pub fn block(&self) -> Option<Block> {
348 AstChildren::new(&self.syntax).next()
351 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
353 pub(crate) syntax: SyntaxNode,
355 impl AstNode for BoxExpr {
356 fn can_cast(kind: SyntaxKind) -> bool {
362 fn cast(syntax: SyntaxNode) -> Option<Self> {
363 if Self::can_cast(syntax.kind()) {
364 Some(Self { syntax })
369 fn syntax(&self) -> &SyntaxNode {
374 pub fn expr(&self) -> Option<Expr> {
375 AstChildren::new(&self.syntax).next()
378 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
380 pub(crate) syntax: SyntaxNode,
382 impl AstNode for BoxPat {
383 fn can_cast(kind: SyntaxKind) -> bool {
389 fn cast(syntax: SyntaxNode) -> Option<Self> {
390 if Self::can_cast(syntax.kind()) {
391 Some(Self { syntax })
396 fn syntax(&self) -> &SyntaxNode {
401 pub fn pat(&self) -> Option<Pat> {
402 AstChildren::new(&self.syntax).next()
405 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
406 pub struct BreakExpr {
407 pub(crate) syntax: SyntaxNode,
409 impl AstNode for BreakExpr {
410 fn can_cast(kind: SyntaxKind) -> bool {
416 fn cast(syntax: SyntaxNode) -> Option<Self> {
417 if Self::can_cast(syntax.kind()) {
418 Some(Self { syntax })
423 fn syntax(&self) -> &SyntaxNode {
428 pub fn expr(&self) -> Option<Expr> {
429 AstChildren::new(&self.syntax).next()
432 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
433 pub struct CallExpr {
434 pub(crate) syntax: SyntaxNode,
436 impl AstNode for CallExpr {
437 fn can_cast(kind: SyntaxKind) -> bool {
443 fn cast(syntax: SyntaxNode) -> Option<Self> {
444 if Self::can_cast(syntax.kind()) {
445 Some(Self { syntax })
450 fn syntax(&self) -> &SyntaxNode {
454 impl ast::ArgListOwner for CallExpr {}
456 pub fn expr(&self) -> Option<Expr> {
457 AstChildren::new(&self.syntax).next()
460 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
461 pub struct CastExpr {
462 pub(crate) syntax: SyntaxNode,
464 impl AstNode for CastExpr {
465 fn can_cast(kind: SyntaxKind) -> bool {
471 fn cast(syntax: SyntaxNode) -> Option<Self> {
472 if Self::can_cast(syntax.kind()) {
473 Some(Self { syntax })
478 fn syntax(&self) -> &SyntaxNode {
483 pub fn expr(&self) -> Option<Expr> {
484 AstChildren::new(&self.syntax).next()
486 pub fn type_ref(&self) -> Option<TypeRef> {
487 AstChildren::new(&self.syntax).next()
490 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
491 pub struct Condition {
492 pub(crate) syntax: SyntaxNode,
494 impl AstNode for Condition {
495 fn can_cast(kind: SyntaxKind) -> bool {
501 fn cast(syntax: SyntaxNode) -> Option<Self> {
502 if Self::can_cast(syntax.kind()) {
503 Some(Self { syntax })
508 fn syntax(&self) -> &SyntaxNode {
513 pub fn pat(&self) -> Option<Pat> {
514 AstChildren::new(&self.syntax).next()
516 pub fn expr(&self) -> Option<Expr> {
517 AstChildren::new(&self.syntax).next()
520 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
521 pub struct ConstDef {
522 pub(crate) syntax: SyntaxNode,
524 impl AstNode for ConstDef {
525 fn can_cast(kind: SyntaxKind) -> bool {
531 fn cast(syntax: SyntaxNode) -> Option<Self> {
532 if Self::can_cast(syntax.kind()) {
533 Some(Self { syntax })
538 fn syntax(&self) -> &SyntaxNode {
542 impl ast::VisibilityOwner for ConstDef {}
543 impl ast::NameOwner for ConstDef {}
544 impl ast::TypeParamsOwner for ConstDef {}
545 impl ast::AttrsOwner for ConstDef {}
546 impl ast::DocCommentsOwner for ConstDef {}
547 impl ast::TypeAscriptionOwner for ConstDef {}
549 pub fn body(&self) -> Option<Expr> {
550 AstChildren::new(&self.syntax).next()
553 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
554 pub struct ContinueExpr {
555 pub(crate) syntax: SyntaxNode,
557 impl AstNode for ContinueExpr {
558 fn can_cast(kind: SyntaxKind) -> bool {
560 CONTINUE_EXPR => true,
564 fn cast(syntax: SyntaxNode) -> Option<Self> {
565 if Self::can_cast(syntax.kind()) {
566 Some(Self { syntax })
571 fn syntax(&self) -> &SyntaxNode {
576 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
577 pub struct DotDotPat {
578 pub(crate) syntax: SyntaxNode,
580 impl AstNode for DotDotPat {
581 fn can_cast(kind: SyntaxKind) -> bool {
587 fn cast(syntax: SyntaxNode) -> Option<Self> {
588 if Self::can_cast(syntax.kind()) {
589 Some(Self { syntax })
594 fn syntax(&self) -> &SyntaxNode {
599 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
600 pub struct DynTraitType {
601 pub(crate) syntax: SyntaxNode,
603 impl AstNode for DynTraitType {
604 fn can_cast(kind: SyntaxKind) -> bool {
606 DYN_TRAIT_TYPE => true,
610 fn cast(syntax: SyntaxNode) -> Option<Self> {
611 if Self::can_cast(syntax.kind()) {
612 Some(Self { syntax })
617 fn syntax(&self) -> &SyntaxNode {
621 impl ast::TypeBoundsOwner for DynTraitType {}
623 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
625 pub(crate) syntax: SyntaxNode,
627 impl AstNode for EnumDef {
628 fn can_cast(kind: SyntaxKind) -> bool {
634 fn cast(syntax: SyntaxNode) -> Option<Self> {
635 if Self::can_cast(syntax.kind()) {
636 Some(Self { syntax })
641 fn syntax(&self) -> &SyntaxNode {
645 impl ast::VisibilityOwner for EnumDef {}
646 impl ast::NameOwner for EnumDef {}
647 impl ast::TypeParamsOwner for EnumDef {}
648 impl ast::AttrsOwner for EnumDef {}
649 impl ast::DocCommentsOwner for EnumDef {}
651 pub fn variant_list(&self) -> Option<EnumVariantList> {
652 AstChildren::new(&self.syntax).next()
655 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
656 pub struct EnumVariant {
657 pub(crate) syntax: SyntaxNode,
659 impl AstNode for EnumVariant {
660 fn can_cast(kind: SyntaxKind) -> bool {
662 ENUM_VARIANT => true,
666 fn cast(syntax: SyntaxNode) -> Option<Self> {
667 if Self::can_cast(syntax.kind()) {
668 Some(Self { syntax })
673 fn syntax(&self) -> &SyntaxNode {
677 impl ast::NameOwner for EnumVariant {}
678 impl ast::DocCommentsOwner for EnumVariant {}
679 impl ast::AttrsOwner for EnumVariant {}
681 pub fn expr(&self) -> Option<Expr> {
682 AstChildren::new(&self.syntax).next()
685 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
686 pub struct EnumVariantList {
687 pub(crate) syntax: SyntaxNode,
689 impl AstNode for EnumVariantList {
690 fn can_cast(kind: SyntaxKind) -> bool {
692 ENUM_VARIANT_LIST => true,
696 fn cast(syntax: SyntaxNode) -> Option<Self> {
697 if Self::can_cast(syntax.kind()) {
698 Some(Self { syntax })
703 fn syntax(&self) -> &SyntaxNode {
707 impl EnumVariantList {
708 pub fn variants(&self) -> AstChildren<EnumVariant> {
709 AstChildren::new(&self.syntax)
712 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
714 TupleExpr(TupleExpr),
715 ArrayExpr(ArrayExpr),
716 ParenExpr(ParenExpr),
718 LambdaExpr(LambdaExpr),
722 WhileExpr(WhileExpr),
723 ContinueExpr(ContinueExpr),
724 BreakExpr(BreakExpr),
726 BlockExpr(BlockExpr),
727 ReturnExpr(ReturnExpr),
728 MatchExpr(MatchExpr),
729 RecordLit(RecordLit),
731 IndexExpr(IndexExpr),
732 MethodCallExpr(MethodCallExpr),
733 FieldExpr(FieldExpr),
734 AwaitExpr(AwaitExpr),
736 TryBlockExpr(TryBlockExpr),
739 PrefixExpr(PrefixExpr),
740 RangeExpr(RangeExpr),
743 MacroCall(MacroCall),
746 impl From<TupleExpr> for Expr {
747 fn from(node: TupleExpr) -> Expr {
748 Expr::TupleExpr(node)
751 impl From<ArrayExpr> for Expr {
752 fn from(node: ArrayExpr) -> Expr {
753 Expr::ArrayExpr(node)
756 impl From<ParenExpr> for Expr {
757 fn from(node: ParenExpr) -> Expr {
758 Expr::ParenExpr(node)
761 impl From<PathExpr> for Expr {
762 fn from(node: PathExpr) -> Expr {
766 impl From<LambdaExpr> for Expr {
767 fn from(node: LambdaExpr) -> Expr {
768 Expr::LambdaExpr(node)
771 impl From<IfExpr> for Expr {
772 fn from(node: IfExpr) -> Expr {
776 impl From<LoopExpr> for Expr {
777 fn from(node: LoopExpr) -> Expr {
781 impl From<ForExpr> for Expr {
782 fn from(node: ForExpr) -> Expr {
786 impl From<WhileExpr> for Expr {
787 fn from(node: WhileExpr) -> Expr {
788 Expr::WhileExpr(node)
791 impl From<ContinueExpr> for Expr {
792 fn from(node: ContinueExpr) -> Expr {
793 Expr::ContinueExpr(node)
796 impl From<BreakExpr> for Expr {
797 fn from(node: BreakExpr) -> Expr {
798 Expr::BreakExpr(node)
801 impl From<Label> for Expr {
802 fn from(node: Label) -> Expr {
806 impl From<BlockExpr> for Expr {
807 fn from(node: BlockExpr) -> Expr {
808 Expr::BlockExpr(node)
811 impl From<ReturnExpr> for Expr {
812 fn from(node: ReturnExpr) -> Expr {
813 Expr::ReturnExpr(node)
816 impl From<MatchExpr> for Expr {
817 fn from(node: MatchExpr) -> Expr {
818 Expr::MatchExpr(node)
821 impl From<RecordLit> for Expr {
822 fn from(node: RecordLit) -> Expr {
823 Expr::RecordLit(node)
826 impl From<CallExpr> for Expr {
827 fn from(node: CallExpr) -> Expr {
831 impl From<IndexExpr> for Expr {
832 fn from(node: IndexExpr) -> Expr {
833 Expr::IndexExpr(node)
836 impl From<MethodCallExpr> for Expr {
837 fn from(node: MethodCallExpr) -> Expr {
838 Expr::MethodCallExpr(node)
841 impl From<FieldExpr> for Expr {
842 fn from(node: FieldExpr) -> Expr {
843 Expr::FieldExpr(node)
846 impl From<AwaitExpr> for Expr {
847 fn from(node: AwaitExpr) -> Expr {
848 Expr::AwaitExpr(node)
851 impl From<TryExpr> for Expr {
852 fn from(node: TryExpr) -> Expr {
856 impl From<TryBlockExpr> for Expr {
857 fn from(node: TryBlockExpr) -> Expr {
858 Expr::TryBlockExpr(node)
861 impl From<CastExpr> for Expr {
862 fn from(node: CastExpr) -> Expr {
866 impl From<RefExpr> for Expr {
867 fn from(node: RefExpr) -> Expr {
871 impl From<PrefixExpr> for Expr {
872 fn from(node: PrefixExpr) -> Expr {
873 Expr::PrefixExpr(node)
876 impl From<RangeExpr> for Expr {
877 fn from(node: RangeExpr) -> Expr {
878 Expr::RangeExpr(node)
881 impl From<BinExpr> for Expr {
882 fn from(node: BinExpr) -> Expr {
886 impl From<Literal> for Expr {
887 fn from(node: Literal) -> Expr {
891 impl From<MacroCall> for Expr {
892 fn from(node: MacroCall) -> Expr {
893 Expr::MacroCall(node)
896 impl From<BoxExpr> for Expr {
897 fn from(node: BoxExpr) -> Expr {
901 impl AstNode for Expr {
902 fn can_cast(kind: SyntaxKind) -> bool {
904 TUPLE_EXPR | ARRAY_EXPR | PAREN_EXPR | PATH_EXPR | LAMBDA_EXPR | IF_EXPR
905 | LOOP_EXPR | FOR_EXPR | WHILE_EXPR | CONTINUE_EXPR | BREAK_EXPR | LABEL
906 | BLOCK_EXPR | RETURN_EXPR | MATCH_EXPR | RECORD_LIT | CALL_EXPR | INDEX_EXPR
907 | METHOD_CALL_EXPR | FIELD_EXPR | AWAIT_EXPR | TRY_EXPR | TRY_BLOCK_EXPR
908 | CAST_EXPR | REF_EXPR | PREFIX_EXPR | RANGE_EXPR | BIN_EXPR | LITERAL | MACRO_CALL
913 fn cast(syntax: SyntaxNode) -> Option<Self> {
914 let res = match syntax.kind() {
915 TUPLE_EXPR => Expr::TupleExpr(TupleExpr { syntax }),
916 ARRAY_EXPR => Expr::ArrayExpr(ArrayExpr { syntax }),
917 PAREN_EXPR => Expr::ParenExpr(ParenExpr { syntax }),
918 PATH_EXPR => Expr::PathExpr(PathExpr { syntax }),
919 LAMBDA_EXPR => Expr::LambdaExpr(LambdaExpr { syntax }),
920 IF_EXPR => Expr::IfExpr(IfExpr { syntax }),
921 LOOP_EXPR => Expr::LoopExpr(LoopExpr { syntax }),
922 FOR_EXPR => Expr::ForExpr(ForExpr { syntax }),
923 WHILE_EXPR => Expr::WhileExpr(WhileExpr { syntax }),
924 CONTINUE_EXPR => Expr::ContinueExpr(ContinueExpr { syntax }),
925 BREAK_EXPR => Expr::BreakExpr(BreakExpr { syntax }),
926 LABEL => Expr::Label(Label { syntax }),
927 BLOCK_EXPR => Expr::BlockExpr(BlockExpr { syntax }),
928 RETURN_EXPR => Expr::ReturnExpr(ReturnExpr { syntax }),
929 MATCH_EXPR => Expr::MatchExpr(MatchExpr { syntax }),
930 RECORD_LIT => Expr::RecordLit(RecordLit { syntax }),
931 CALL_EXPR => Expr::CallExpr(CallExpr { syntax }),
932 INDEX_EXPR => Expr::IndexExpr(IndexExpr { syntax }),
933 METHOD_CALL_EXPR => Expr::MethodCallExpr(MethodCallExpr { syntax }),
934 FIELD_EXPR => Expr::FieldExpr(FieldExpr { syntax }),
935 AWAIT_EXPR => Expr::AwaitExpr(AwaitExpr { syntax }),
936 TRY_EXPR => Expr::TryExpr(TryExpr { syntax }),
937 TRY_BLOCK_EXPR => Expr::TryBlockExpr(TryBlockExpr { syntax }),
938 CAST_EXPR => Expr::CastExpr(CastExpr { syntax }),
939 REF_EXPR => Expr::RefExpr(RefExpr { syntax }),
940 PREFIX_EXPR => Expr::PrefixExpr(PrefixExpr { syntax }),
941 RANGE_EXPR => Expr::RangeExpr(RangeExpr { syntax }),
942 BIN_EXPR => Expr::BinExpr(BinExpr { syntax }),
943 LITERAL => Expr::Literal(Literal { syntax }),
944 MACRO_CALL => Expr::MacroCall(MacroCall { syntax }),
945 BOX_EXPR => Expr::BoxExpr(BoxExpr { syntax }),
950 fn syntax(&self) -> &SyntaxNode {
952 Expr::TupleExpr(it) => &it.syntax,
953 Expr::ArrayExpr(it) => &it.syntax,
954 Expr::ParenExpr(it) => &it.syntax,
955 Expr::PathExpr(it) => &it.syntax,
956 Expr::LambdaExpr(it) => &it.syntax,
957 Expr::IfExpr(it) => &it.syntax,
958 Expr::LoopExpr(it) => &it.syntax,
959 Expr::ForExpr(it) => &it.syntax,
960 Expr::WhileExpr(it) => &it.syntax,
961 Expr::ContinueExpr(it) => &it.syntax,
962 Expr::BreakExpr(it) => &it.syntax,
963 Expr::Label(it) => &it.syntax,
964 Expr::BlockExpr(it) => &it.syntax,
965 Expr::ReturnExpr(it) => &it.syntax,
966 Expr::MatchExpr(it) => &it.syntax,
967 Expr::RecordLit(it) => &it.syntax,
968 Expr::CallExpr(it) => &it.syntax,
969 Expr::IndexExpr(it) => &it.syntax,
970 Expr::MethodCallExpr(it) => &it.syntax,
971 Expr::FieldExpr(it) => &it.syntax,
972 Expr::AwaitExpr(it) => &it.syntax,
973 Expr::TryExpr(it) => &it.syntax,
974 Expr::TryBlockExpr(it) => &it.syntax,
975 Expr::CastExpr(it) => &it.syntax,
976 Expr::RefExpr(it) => &it.syntax,
977 Expr::PrefixExpr(it) => &it.syntax,
978 Expr::RangeExpr(it) => &it.syntax,
979 Expr::BinExpr(it) => &it.syntax,
980 Expr::Literal(it) => &it.syntax,
981 Expr::MacroCall(it) => &it.syntax,
982 Expr::BoxExpr(it) => &it.syntax,
987 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
988 pub struct ExprStmt {
989 pub(crate) syntax: SyntaxNode,
991 impl AstNode for ExprStmt {
992 fn can_cast(kind: SyntaxKind) -> bool {
998 fn cast(syntax: SyntaxNode) -> Option<Self> {
999 if Self::can_cast(syntax.kind()) {
1000 Some(Self { syntax })
1005 fn syntax(&self) -> &SyntaxNode {
1010 pub fn expr(&self) -> Option<Expr> {
1011 AstChildren::new(&self.syntax).next()
1014 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
1015 pub struct ExternCrateItem {
1016 pub(crate) syntax: SyntaxNode,
1018 impl AstNode for ExternCrateItem {
1019 fn can_cast(kind: SyntaxKind) -> bool {
1021 EXTERN_CRATE_ITEM => true,
1025 fn cast(syntax: SyntaxNode) -> Option<Self> {
1026 if Self::can_cast(syntax.kind()) {
1027 Some(Self { syntax })
1032 fn syntax(&self) -> &SyntaxNode {
1036 impl ast::AttrsOwner for ExternCrateItem {}
1037 impl ExternCrateItem {
1038 pub fn name_ref(&self) -> Option<NameRef> {
1039 AstChildren::new(&self.syntax).next()
1041 pub fn alias(&self) -> Option<Alias> {
1042 AstChildren::new(&self.syntax).next()
1045 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
1046 pub struct FieldExpr {
1047 pub(crate) syntax: SyntaxNode,
1049 impl AstNode for FieldExpr {
1050 fn can_cast(kind: SyntaxKind) -> bool {
1056 fn cast(syntax: SyntaxNode) -> Option<Self> {
1057 if Self::can_cast(syntax.kind()) {
1058 Some(Self { syntax })
1063 fn syntax(&self) -> &SyntaxNode {
1068 pub fn expr(&self) -> Option<Expr> {
1069 AstChildren::new(&self.syntax).next()
1071 pub fn name_ref(&self) -> Option<NameRef> {
1072 AstChildren::new(&self.syntax).next()
1075 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
1077 pub(crate) syntax: SyntaxNode,
1079 impl AstNode for FnDef {
1080 fn can_cast(kind: SyntaxKind) -> bool {
1086 fn cast(syntax: SyntaxNode) -> Option<Self> {
1087 if Self::can_cast(syntax.kind()) {
1088 Some(Self { syntax })
1093 fn syntax(&self) -> &SyntaxNode {
1097 impl ast::VisibilityOwner for FnDef {}
1098 impl ast::NameOwner for FnDef {}
1099 impl ast::TypeParamsOwner for FnDef {}
1100 impl ast::AttrsOwner for FnDef {}
1101 impl ast::DocCommentsOwner for FnDef {}
1103 pub fn param_list(&self) -> Option<ParamList> {
1104 AstChildren::new(&self.syntax).next()
1106 pub fn body(&self) -> Option<BlockExpr> {
1107 AstChildren::new(&self.syntax).next()
1109 pub fn ret_type(&self) -> Option<RetType> {
1110 AstChildren::new(&self.syntax).next()
1113 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
1114 pub struct FnPointerType {
1115 pub(crate) syntax: SyntaxNode,
1117 impl AstNode for FnPointerType {
1118 fn can_cast(kind: SyntaxKind) -> bool {
1120 FN_POINTER_TYPE => true,
1124 fn cast(syntax: SyntaxNode) -> Option<Self> {
1125 if Self::can_cast(syntax.kind()) {
1126 Some(Self { syntax })
1131 fn syntax(&self) -> &SyntaxNode {
1135 impl FnPointerType {
1136 pub fn param_list(&self) -> Option<ParamList> {
1137 AstChildren::new(&self.syntax).next()
1139 pub fn ret_type(&self) -> Option<RetType> {
1140 AstChildren::new(&self.syntax).next()
1143 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
1144 pub struct ForExpr {
1145 pub(crate) syntax: SyntaxNode,
1147 impl AstNode for ForExpr {
1148 fn can_cast(kind: SyntaxKind) -> bool {
1154 fn cast(syntax: SyntaxNode) -> Option<Self> {
1155 if Self::can_cast(syntax.kind()) {
1156 Some(Self { syntax })
1161 fn syntax(&self) -> &SyntaxNode {
1165 impl ast::LoopBodyOwner for ForExpr {}
1167 pub fn pat(&self) -> Option<Pat> {
1168 AstChildren::new(&self.syntax).next()
1170 pub fn iterable(&self) -> Option<Expr> {
1171 AstChildren::new(&self.syntax).next()
1174 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
1175 pub struct ForType {
1176 pub(crate) syntax: SyntaxNode,
1178 impl AstNode for ForType {
1179 fn can_cast(kind: SyntaxKind) -> bool {
1185 fn cast(syntax: SyntaxNode) -> Option<Self> {
1186 if Self::can_cast(syntax.kind()) {
1187 Some(Self { syntax })
1192 fn syntax(&self) -> &SyntaxNode {
1197 pub fn type_ref(&self) -> Option<TypeRef> {
1198 AstChildren::new(&self.syntax).next()
1201 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
1203 pub(crate) syntax: SyntaxNode,
1205 impl AstNode for IfExpr {
1206 fn can_cast(kind: SyntaxKind) -> bool {
1212 fn cast(syntax: SyntaxNode) -> Option<Self> {
1213 if Self::can_cast(syntax.kind()) {
1214 Some(Self { syntax })
1219 fn syntax(&self) -> &SyntaxNode {
1224 pub fn condition(&self) -> Option<Condition> {
1225 AstChildren::new(&self.syntax).next()
1228 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
1229 pub struct ImplBlock {
1230 pub(crate) syntax: SyntaxNode,
1232 impl AstNode for ImplBlock {
1233 fn can_cast(kind: SyntaxKind) -> bool {
1239 fn cast(syntax: SyntaxNode) -> Option<Self> {
1240 if Self::can_cast(syntax.kind()) {
1241 Some(Self { syntax })
1246 fn syntax(&self) -> &SyntaxNode {
1250 impl ast::TypeParamsOwner for ImplBlock {}
1251 impl ast::AttrsOwner for ImplBlock {}
1253 pub fn item_list(&self) -> Option<ItemList> {
1254 AstChildren::new(&self.syntax).next()
1257 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
1260 TypeAliasDef(TypeAliasDef),
1263 impl From<FnDef> for ImplItem {
1264 fn from(node: FnDef) -> ImplItem {
1265 ImplItem::FnDef(node)
1268 impl From<TypeAliasDef> for ImplItem {
1269 fn from(node: TypeAliasDef) -> ImplItem {
1270 ImplItem::TypeAliasDef(node)
1273 impl From<ConstDef> for ImplItem {
1274 fn from(node: ConstDef) -> ImplItem {
1275 ImplItem::ConstDef(node)
1278 impl AstNode for ImplItem {
1279 fn can_cast(kind: SyntaxKind) -> bool {
1281 FN_DEF | TYPE_ALIAS_DEF | CONST_DEF => true,
1285 fn cast(syntax: SyntaxNode) -> Option<Self> {
1286 let res = match syntax.kind() {
1287 FN_DEF => ImplItem::FnDef(FnDef { syntax }),
1288 TYPE_ALIAS_DEF => ImplItem::TypeAliasDef(TypeAliasDef { syntax }),
1289 CONST_DEF => ImplItem::ConstDef(ConstDef { syntax }),
1294 fn syntax(&self) -> &SyntaxNode {
1296 ImplItem::FnDef(it) => &it.syntax,
1297 ImplItem::TypeAliasDef(it) => &it.syntax,
1298 ImplItem::ConstDef(it) => &it.syntax,
1302 impl ast::AttrsOwner for ImplItem {}
1304 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
1305 pub struct ImplTraitType {
1306 pub(crate) syntax: SyntaxNode,
1308 impl AstNode for ImplTraitType {
1309 fn can_cast(kind: SyntaxKind) -> bool {
1311 IMPL_TRAIT_TYPE => true,
1315 fn cast(syntax: SyntaxNode) -> Option<Self> {
1316 if Self::can_cast(syntax.kind()) {
1317 Some(Self { syntax })
1322 fn syntax(&self) -> &SyntaxNode {
1326 impl ast::TypeBoundsOwner for ImplTraitType {}
1327 impl ImplTraitType {}
1328 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
1329 pub struct IndexExpr {
1330 pub(crate) syntax: SyntaxNode,
1332 impl AstNode for IndexExpr {
1333 fn can_cast(kind: SyntaxKind) -> bool {
1339 fn cast(syntax: SyntaxNode) -> Option<Self> {
1340 if Self::can_cast(syntax.kind()) {
1341 Some(Self { syntax })
1346 fn syntax(&self) -> &SyntaxNode {
1351 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
1352 pub struct ItemList {
1353 pub(crate) syntax: SyntaxNode,
1355 impl AstNode for ItemList {
1356 fn can_cast(kind: SyntaxKind) -> bool {
1362 fn cast(syntax: SyntaxNode) -> Option<Self> {
1363 if Self::can_cast(syntax.kind()) {
1364 Some(Self { syntax })
1369 fn syntax(&self) -> &SyntaxNode {
1373 impl ast::FnDefOwner for ItemList {}
1374 impl ast::ModuleItemOwner for ItemList {}
1376 pub fn impl_items(&self) -> AstChildren<ImplItem> {
1377 AstChildren::new(&self.syntax)
1380 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
1382 pub(crate) syntax: SyntaxNode,
1384 impl AstNode for Label {
1385 fn can_cast(kind: SyntaxKind) -> bool {
1391 fn cast(syntax: SyntaxNode) -> Option<Self> {
1392 if Self::can_cast(syntax.kind()) {
1393 Some(Self { syntax })
1398 fn syntax(&self) -> &SyntaxNode {
1403 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
1404 pub struct LambdaExpr {
1405 pub(crate) syntax: SyntaxNode,
1407 impl AstNode for LambdaExpr {
1408 fn can_cast(kind: SyntaxKind) -> bool {
1410 LAMBDA_EXPR => true,
1414 fn cast(syntax: SyntaxNode) -> Option<Self> {
1415 if Self::can_cast(syntax.kind()) {
1416 Some(Self { syntax })
1421 fn syntax(&self) -> &SyntaxNode {
1426 pub fn param_list(&self) -> Option<ParamList> {
1427 AstChildren::new(&self.syntax).next()
1429 pub fn body(&self) -> Option<Expr> {
1430 AstChildren::new(&self.syntax).next()
1433 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
1434 pub struct LetStmt {
1435 pub(crate) syntax: SyntaxNode,
1437 impl AstNode for LetStmt {
1438 fn can_cast(kind: SyntaxKind) -> bool {
1444 fn cast(syntax: SyntaxNode) -> Option<Self> {
1445 if Self::can_cast(syntax.kind()) {
1446 Some(Self { syntax })
1451 fn syntax(&self) -> &SyntaxNode {
1455 impl ast::TypeAscriptionOwner for LetStmt {}
1457 pub fn pat(&self) -> Option<Pat> {
1458 AstChildren::new(&self.syntax).next()
1460 pub fn initializer(&self) -> Option<Expr> {
1461 AstChildren::new(&self.syntax).next()
1464 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
1465 pub struct LifetimeArg {
1466 pub(crate) syntax: SyntaxNode,
1468 impl AstNode for LifetimeArg {
1469 fn can_cast(kind: SyntaxKind) -> bool {
1471 LIFETIME_ARG => true,
1475 fn cast(syntax: SyntaxNode) -> Option<Self> {
1476 if Self::can_cast(syntax.kind()) {
1477 Some(Self { syntax })
1482 fn syntax(&self) -> &SyntaxNode {
1487 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
1488 pub struct LifetimeParam {
1489 pub(crate) syntax: SyntaxNode,
1491 impl AstNode for LifetimeParam {
1492 fn can_cast(kind: SyntaxKind) -> bool {
1494 LIFETIME_PARAM => true,
1498 fn cast(syntax: SyntaxNode) -> Option<Self> {
1499 if Self::can_cast(syntax.kind()) {
1500 Some(Self { syntax })
1505 fn syntax(&self) -> &SyntaxNode {
1509 impl ast::AttrsOwner for LifetimeParam {}
1510 impl LifetimeParam {}
1511 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
1512 pub struct Literal {
1513 pub(crate) syntax: SyntaxNode,
1515 impl AstNode for Literal {
1516 fn can_cast(kind: SyntaxKind) -> bool {
1522 fn cast(syntax: SyntaxNode) -> Option<Self> {
1523 if Self::can_cast(syntax.kind()) {
1524 Some(Self { syntax })
1529 fn syntax(&self) -> &SyntaxNode {
1534 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
1535 pub struct LiteralPat {
1536 pub(crate) syntax: SyntaxNode,
1538 impl AstNode for LiteralPat {
1539 fn can_cast(kind: SyntaxKind) -> bool {
1541 LITERAL_PAT => true,
1545 fn cast(syntax: SyntaxNode) -> Option<Self> {
1546 if Self::can_cast(syntax.kind()) {
1547 Some(Self { syntax })
1552 fn syntax(&self) -> &SyntaxNode {
1557 pub fn literal(&self) -> Option<Literal> {
1558 AstChildren::new(&self.syntax).next()
1561 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
1562 pub struct LoopExpr {
1563 pub(crate) syntax: SyntaxNode,
1565 impl AstNode for LoopExpr {
1566 fn can_cast(kind: SyntaxKind) -> bool {
1572 fn cast(syntax: SyntaxNode) -> Option<Self> {
1573 if Self::can_cast(syntax.kind()) {
1574 Some(Self { syntax })
1579 fn syntax(&self) -> &SyntaxNode {
1583 impl ast::LoopBodyOwner for LoopExpr {}
1585 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
1586 pub struct MacroCall {
1587 pub(crate) syntax: SyntaxNode,
1589 impl AstNode for MacroCall {
1590 fn can_cast(kind: SyntaxKind) -> bool {
1596 fn cast(syntax: SyntaxNode) -> Option<Self> {
1597 if Self::can_cast(syntax.kind()) {
1598 Some(Self { syntax })
1603 fn syntax(&self) -> &SyntaxNode {
1607 impl ast::NameOwner for MacroCall {}
1608 impl ast::AttrsOwner for MacroCall {}
1609 impl ast::DocCommentsOwner for MacroCall {}
1611 pub fn token_tree(&self) -> Option<TokenTree> {
1612 AstChildren::new(&self.syntax).next()
1614 pub fn path(&self) -> Option<Path> {
1615 AstChildren::new(&self.syntax).next()
1618 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
1619 pub struct MacroItems {
1620 pub(crate) syntax: SyntaxNode,
1622 impl AstNode for MacroItems {
1623 fn can_cast(kind: SyntaxKind) -> bool {
1625 MACRO_ITEMS => true,
1629 fn cast(syntax: SyntaxNode) -> Option<Self> {
1630 if Self::can_cast(syntax.kind()) {
1631 Some(Self { syntax })
1636 fn syntax(&self) -> &SyntaxNode {
1640 impl ast::ModuleItemOwner for MacroItems {}
1641 impl ast::FnDefOwner for MacroItems {}
1643 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
1644 pub struct MacroStmts {
1645 pub(crate) syntax: SyntaxNode,
1647 impl AstNode for MacroStmts {
1648 fn can_cast(kind: SyntaxKind) -> bool {
1650 MACRO_STMTS => true,
1654 fn cast(syntax: SyntaxNode) -> Option<Self> {
1655 if Self::can_cast(syntax.kind()) {
1656 Some(Self { syntax })
1661 fn syntax(&self) -> &SyntaxNode {
1666 pub fn statements(&self) -> AstChildren<Stmt> {
1667 AstChildren::new(&self.syntax)
1669 pub fn expr(&self) -> Option<Expr> {
1670 AstChildren::new(&self.syntax).next()
1673 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
1674 pub struct MatchArm {
1675 pub(crate) syntax: SyntaxNode,
1677 impl AstNode for MatchArm {
1678 fn can_cast(kind: SyntaxKind) -> bool {
1684 fn cast(syntax: SyntaxNode) -> Option<Self> {
1685 if Self::can_cast(syntax.kind()) {
1686 Some(Self { syntax })
1691 fn syntax(&self) -> &SyntaxNode {
1695 impl ast::AttrsOwner for MatchArm {}
1697 pub fn pats(&self) -> AstChildren<Pat> {
1698 AstChildren::new(&self.syntax)
1700 pub fn guard(&self) -> Option<MatchGuard> {
1701 AstChildren::new(&self.syntax).next()
1703 pub fn expr(&self) -> Option<Expr> {
1704 AstChildren::new(&self.syntax).next()
1707 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
1708 pub struct MatchArmList {
1709 pub(crate) syntax: SyntaxNode,
1711 impl AstNode for MatchArmList {
1712 fn can_cast(kind: SyntaxKind) -> bool {
1714 MATCH_ARM_LIST => true,
1718 fn cast(syntax: SyntaxNode) -> Option<Self> {
1719 if Self::can_cast(syntax.kind()) {
1720 Some(Self { syntax })
1725 fn syntax(&self) -> &SyntaxNode {
1729 impl ast::AttrsOwner for MatchArmList {}
1731 pub fn arms(&self) -> AstChildren<MatchArm> {
1732 AstChildren::new(&self.syntax)
1735 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
1736 pub struct MatchExpr {
1737 pub(crate) syntax: SyntaxNode,
1739 impl AstNode for MatchExpr {
1740 fn can_cast(kind: SyntaxKind) -> bool {
1746 fn cast(syntax: SyntaxNode) -> Option<Self> {
1747 if Self::can_cast(syntax.kind()) {
1748 Some(Self { syntax })
1753 fn syntax(&self) -> &SyntaxNode {
1758 pub fn expr(&self) -> Option<Expr> {
1759 AstChildren::new(&self.syntax).next()
1761 pub fn match_arm_list(&self) -> Option<MatchArmList> {
1762 AstChildren::new(&self.syntax).next()
1765 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
1766 pub struct MatchGuard {
1767 pub(crate) syntax: SyntaxNode,
1769 impl AstNode for MatchGuard {
1770 fn can_cast(kind: SyntaxKind) -> bool {
1772 MATCH_GUARD => true,
1776 fn cast(syntax: SyntaxNode) -> Option<Self> {
1777 if Self::can_cast(syntax.kind()) {
1778 Some(Self { syntax })
1783 fn syntax(&self) -> &SyntaxNode {
1788 pub fn expr(&self) -> Option<Expr> {
1789 AstChildren::new(&self.syntax).next()
1792 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
1793 pub struct MethodCallExpr {
1794 pub(crate) syntax: SyntaxNode,
1796 impl AstNode for MethodCallExpr {
1797 fn can_cast(kind: SyntaxKind) -> bool {
1799 METHOD_CALL_EXPR => true,
1803 fn cast(syntax: SyntaxNode) -> Option<Self> {
1804 if Self::can_cast(syntax.kind()) {
1805 Some(Self { syntax })
1810 fn syntax(&self) -> &SyntaxNode {
1814 impl ast::ArgListOwner for MethodCallExpr {}
1815 impl MethodCallExpr {
1816 pub fn expr(&self) -> Option<Expr> {
1817 AstChildren::new(&self.syntax).next()
1819 pub fn name_ref(&self) -> Option<NameRef> {
1820 AstChildren::new(&self.syntax).next()
1822 pub fn type_arg_list(&self) -> Option<TypeArgList> {
1823 AstChildren::new(&self.syntax).next()
1826 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
1828 pub(crate) syntax: SyntaxNode,
1830 impl AstNode for Module {
1831 fn can_cast(kind: SyntaxKind) -> bool {
1837 fn cast(syntax: SyntaxNode) -> Option<Self> {
1838 if Self::can_cast(syntax.kind()) {
1839 Some(Self { syntax })
1844 fn syntax(&self) -> &SyntaxNode {
1848 impl ast::VisibilityOwner for Module {}
1849 impl ast::NameOwner for Module {}
1850 impl ast::AttrsOwner for Module {}
1851 impl ast::DocCommentsOwner for Module {}
1853 pub fn item_list(&self) -> Option<ItemList> {
1854 AstChildren::new(&self.syntax).next()
1857 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
1858 pub enum ModuleItem {
1859 StructDef(StructDef),
1864 TypeAliasDef(TypeAliasDef),
1865 ImplBlock(ImplBlock),
1867 ExternCrateItem(ExternCrateItem),
1869 StaticDef(StaticDef),
1872 impl From<StructDef> for ModuleItem {
1873 fn from(node: StructDef) -> ModuleItem {
1874 ModuleItem::StructDef(node)
1877 impl From<UnionDef> for ModuleItem {
1878 fn from(node: UnionDef) -> ModuleItem {
1879 ModuleItem::UnionDef(node)
1882 impl From<EnumDef> for ModuleItem {
1883 fn from(node: EnumDef) -> ModuleItem {
1884 ModuleItem::EnumDef(node)
1887 impl From<FnDef> for ModuleItem {
1888 fn from(node: FnDef) -> ModuleItem {
1889 ModuleItem::FnDef(node)
1892 impl From<TraitDef> for ModuleItem {
1893 fn from(node: TraitDef) -> ModuleItem {
1894 ModuleItem::TraitDef(node)
1897 impl From<TypeAliasDef> for ModuleItem {
1898 fn from(node: TypeAliasDef) -> ModuleItem {
1899 ModuleItem::TypeAliasDef(node)
1902 impl From<ImplBlock> for ModuleItem {
1903 fn from(node: ImplBlock) -> ModuleItem {
1904 ModuleItem::ImplBlock(node)
1907 impl From<UseItem> for ModuleItem {
1908 fn from(node: UseItem) -> ModuleItem {
1909 ModuleItem::UseItem(node)
1912 impl From<ExternCrateItem> for ModuleItem {
1913 fn from(node: ExternCrateItem) -> ModuleItem {
1914 ModuleItem::ExternCrateItem(node)
1917 impl From<ConstDef> for ModuleItem {
1918 fn from(node: ConstDef) -> ModuleItem {
1919 ModuleItem::ConstDef(node)
1922 impl From<StaticDef> for ModuleItem {
1923 fn from(node: StaticDef) -> ModuleItem {
1924 ModuleItem::StaticDef(node)
1927 impl From<Module> for ModuleItem {
1928 fn from(node: Module) -> ModuleItem {
1929 ModuleItem::Module(node)
1932 impl AstNode for ModuleItem {
1933 fn can_cast(kind: SyntaxKind) -> bool {
1935 STRUCT_DEF | UNION_DEF | ENUM_DEF | FN_DEF | TRAIT_DEF | TYPE_ALIAS_DEF
1936 | IMPL_BLOCK | USE_ITEM | EXTERN_CRATE_ITEM | CONST_DEF | STATIC_DEF | MODULE => true,
1940 fn cast(syntax: SyntaxNode) -> Option<Self> {
1941 let res = match syntax.kind() {
1942 STRUCT_DEF => ModuleItem::StructDef(StructDef { syntax }),
1943 UNION_DEF => ModuleItem::UnionDef(UnionDef { syntax }),
1944 ENUM_DEF => ModuleItem::EnumDef(EnumDef { syntax }),
1945 FN_DEF => ModuleItem::FnDef(FnDef { syntax }),
1946 TRAIT_DEF => ModuleItem::TraitDef(TraitDef { syntax }),
1947 TYPE_ALIAS_DEF => ModuleItem::TypeAliasDef(TypeAliasDef { syntax }),
1948 IMPL_BLOCK => ModuleItem::ImplBlock(ImplBlock { syntax }),
1949 USE_ITEM => ModuleItem::UseItem(UseItem { syntax }),
1950 EXTERN_CRATE_ITEM => ModuleItem::ExternCrateItem(ExternCrateItem { syntax }),
1951 CONST_DEF => ModuleItem::ConstDef(ConstDef { syntax }),
1952 STATIC_DEF => ModuleItem::StaticDef(StaticDef { syntax }),
1953 MODULE => ModuleItem::Module(Module { syntax }),
1958 fn syntax(&self) -> &SyntaxNode {
1960 ModuleItem::StructDef(it) => &it.syntax,
1961 ModuleItem::UnionDef(it) => &it.syntax,
1962 ModuleItem::EnumDef(it) => &it.syntax,
1963 ModuleItem::FnDef(it) => &it.syntax,
1964 ModuleItem::TraitDef(it) => &it.syntax,
1965 ModuleItem::TypeAliasDef(it) => &it.syntax,
1966 ModuleItem::ImplBlock(it) => &it.syntax,
1967 ModuleItem::UseItem(it) => &it.syntax,
1968 ModuleItem::ExternCrateItem(it) => &it.syntax,
1969 ModuleItem::ConstDef(it) => &it.syntax,
1970 ModuleItem::StaticDef(it) => &it.syntax,
1971 ModuleItem::Module(it) => &it.syntax,
1975 impl ast::AttrsOwner for ModuleItem {}
1977 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
1979 pub(crate) syntax: SyntaxNode,
1981 impl AstNode for Name {
1982 fn can_cast(kind: SyntaxKind) -> bool {
1988 fn cast(syntax: SyntaxNode) -> Option<Self> {
1989 if Self::can_cast(syntax.kind()) {
1990 Some(Self { syntax })
1995 fn syntax(&self) -> &SyntaxNode {
2000 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
2001 pub struct NameRef {
2002 pub(crate) syntax: SyntaxNode,
2004 impl AstNode for NameRef {
2005 fn can_cast(kind: SyntaxKind) -> bool {
2011 fn cast(syntax: SyntaxNode) -> Option<Self> {
2012 if Self::can_cast(syntax.kind()) {
2013 Some(Self { syntax })
2018 fn syntax(&self) -> &SyntaxNode {
2023 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
2024 pub struct NeverType {
2025 pub(crate) syntax: SyntaxNode,
2027 impl AstNode for NeverType {
2028 fn can_cast(kind: SyntaxKind) -> bool {
2034 fn cast(syntax: SyntaxNode) -> Option<Self> {
2035 if Self::can_cast(syntax.kind()) {
2036 Some(Self { syntax })
2041 fn syntax(&self) -> &SyntaxNode {
2046 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
2047 pub enum NominalDef {
2048 StructDef(StructDef),
2052 impl From<StructDef> for NominalDef {
2053 fn from(node: StructDef) -> NominalDef {
2054 NominalDef::StructDef(node)
2057 impl From<EnumDef> for NominalDef {
2058 fn from(node: EnumDef) -> NominalDef {
2059 NominalDef::EnumDef(node)
2062 impl From<UnionDef> for NominalDef {
2063 fn from(node: UnionDef) -> NominalDef {
2064 NominalDef::UnionDef(node)
2067 impl AstNode for NominalDef {
2068 fn can_cast(kind: SyntaxKind) -> bool {
2070 STRUCT_DEF | ENUM_DEF | UNION_DEF => true,
2074 fn cast(syntax: SyntaxNode) -> Option<Self> {
2075 let res = match syntax.kind() {
2076 STRUCT_DEF => NominalDef::StructDef(StructDef { syntax }),
2077 ENUM_DEF => NominalDef::EnumDef(EnumDef { syntax }),
2078 UNION_DEF => NominalDef::UnionDef(UnionDef { syntax }),
2083 fn syntax(&self) -> &SyntaxNode {
2085 NominalDef::StructDef(it) => &it.syntax,
2086 NominalDef::EnumDef(it) => &it.syntax,
2087 NominalDef::UnionDef(it) => &it.syntax,
2091 impl ast::NameOwner for NominalDef {}
2092 impl ast::TypeParamsOwner for NominalDef {}
2093 impl ast::AttrsOwner for NominalDef {}
2095 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
2097 pub(crate) syntax: SyntaxNode,
2099 impl AstNode for Param {
2100 fn can_cast(kind: SyntaxKind) -> bool {
2106 fn cast(syntax: SyntaxNode) -> Option<Self> {
2107 if Self::can_cast(syntax.kind()) {
2108 Some(Self { syntax })
2113 fn syntax(&self) -> &SyntaxNode {
2117 impl ast::TypeAscriptionOwner for Param {}
2118 impl ast::AttrsOwner for Param {}
2120 pub fn pat(&self) -> Option<Pat> {
2121 AstChildren::new(&self.syntax).next()
2124 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
2125 pub struct ParamList {
2126 pub(crate) syntax: SyntaxNode,
2128 impl AstNode for ParamList {
2129 fn can_cast(kind: SyntaxKind) -> bool {
2135 fn cast(syntax: SyntaxNode) -> Option<Self> {
2136 if Self::can_cast(syntax.kind()) {
2137 Some(Self { syntax })
2142 fn syntax(&self) -> &SyntaxNode {
2147 pub fn params(&self) -> AstChildren<Param> {
2148 AstChildren::new(&self.syntax)
2150 pub fn self_param(&self) -> Option<SelfParam> {
2151 AstChildren::new(&self.syntax).next()
2154 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
2155 pub struct ParenExpr {
2156 pub(crate) syntax: SyntaxNode,
2158 impl AstNode for ParenExpr {
2159 fn can_cast(kind: SyntaxKind) -> bool {
2165 fn cast(syntax: SyntaxNode) -> Option<Self> {
2166 if Self::can_cast(syntax.kind()) {
2167 Some(Self { syntax })
2172 fn syntax(&self) -> &SyntaxNode {
2177 pub fn expr(&self) -> Option<Expr> {
2178 AstChildren::new(&self.syntax).next()
2181 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
2182 pub struct ParenType {
2183 pub(crate) syntax: SyntaxNode,
2185 impl AstNode for ParenType {
2186 fn can_cast(kind: SyntaxKind) -> bool {
2192 fn cast(syntax: SyntaxNode) -> Option<Self> {
2193 if Self::can_cast(syntax.kind()) {
2194 Some(Self { syntax })
2199 fn syntax(&self) -> &SyntaxNode {
2204 pub fn type_ref(&self) -> Option<TypeRef> {
2205 AstChildren::new(&self.syntax).next()
2208 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
2213 PlaceholderPat(PlaceholderPat),
2214 DotDotPat(DotDotPat),
2216 RecordPat(RecordPat),
2217 TupleStructPat(TupleStructPat),
2221 LiteralPat(LiteralPat),
2223 impl From<RefPat> for Pat {
2224 fn from(node: RefPat) -> Pat {
2228 impl From<BoxPat> for Pat {
2229 fn from(node: BoxPat) -> Pat {
2233 impl From<BindPat> for Pat {
2234 fn from(node: BindPat) -> Pat {
2238 impl From<PlaceholderPat> for Pat {
2239 fn from(node: PlaceholderPat) -> Pat {
2240 Pat::PlaceholderPat(node)
2243 impl From<DotDotPat> for Pat {
2244 fn from(node: DotDotPat) -> Pat {
2245 Pat::DotDotPat(node)
2248 impl From<PathPat> for Pat {
2249 fn from(node: PathPat) -> Pat {
2253 impl From<RecordPat> for Pat {
2254 fn from(node: RecordPat) -> Pat {
2255 Pat::RecordPat(node)
2258 impl From<TupleStructPat> for Pat {
2259 fn from(node: TupleStructPat) -> Pat {
2260 Pat::TupleStructPat(node)
2263 impl From<TuplePat> for Pat {
2264 fn from(node: TuplePat) -> Pat {
2268 impl From<SlicePat> for Pat {
2269 fn from(node: SlicePat) -> Pat {
2273 impl From<RangePat> for Pat {
2274 fn from(node: RangePat) -> Pat {
2278 impl From<LiteralPat> for Pat {
2279 fn from(node: LiteralPat) -> Pat {
2280 Pat::LiteralPat(node)
2283 impl AstNode for Pat {
2284 fn can_cast(kind: SyntaxKind) -> bool {
2286 REF_PAT | BOX_PAT | BIND_PAT | PLACEHOLDER_PAT | DOT_DOT_PAT | PATH_PAT
2287 | RECORD_PAT | TUPLE_STRUCT_PAT | TUPLE_PAT | SLICE_PAT | RANGE_PAT | LITERAL_PAT => {
2293 fn cast(syntax: SyntaxNode) -> Option<Self> {
2294 let res = match syntax.kind() {
2295 REF_PAT => Pat::RefPat(RefPat { syntax }),
2296 BOX_PAT => Pat::BoxPat(BoxPat { syntax }),
2297 BIND_PAT => Pat::BindPat(BindPat { syntax }),
2298 PLACEHOLDER_PAT => Pat::PlaceholderPat(PlaceholderPat { syntax }),
2299 DOT_DOT_PAT => Pat::DotDotPat(DotDotPat { syntax }),
2300 PATH_PAT => Pat::PathPat(PathPat { syntax }),
2301 RECORD_PAT => Pat::RecordPat(RecordPat { syntax }),
2302 TUPLE_STRUCT_PAT => Pat::TupleStructPat(TupleStructPat { syntax }),
2303 TUPLE_PAT => Pat::TuplePat(TuplePat { syntax }),
2304 SLICE_PAT => Pat::SlicePat(SlicePat { syntax }),
2305 RANGE_PAT => Pat::RangePat(RangePat { syntax }),
2306 LITERAL_PAT => Pat::LiteralPat(LiteralPat { syntax }),
2311 fn syntax(&self) -> &SyntaxNode {
2313 Pat::RefPat(it) => &it.syntax,
2314 Pat::BoxPat(it) => &it.syntax,
2315 Pat::BindPat(it) => &it.syntax,
2316 Pat::PlaceholderPat(it) => &it.syntax,
2317 Pat::DotDotPat(it) => &it.syntax,
2318 Pat::PathPat(it) => &it.syntax,
2319 Pat::RecordPat(it) => &it.syntax,
2320 Pat::TupleStructPat(it) => &it.syntax,
2321 Pat::TuplePat(it) => &it.syntax,
2322 Pat::SlicePat(it) => &it.syntax,
2323 Pat::RangePat(it) => &it.syntax,
2324 Pat::LiteralPat(it) => &it.syntax,
2329 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
2331 pub(crate) syntax: SyntaxNode,
2333 impl AstNode for Path {
2334 fn can_cast(kind: SyntaxKind) -> bool {
2340 fn cast(syntax: SyntaxNode) -> Option<Self> {
2341 if Self::can_cast(syntax.kind()) {
2342 Some(Self { syntax })
2347 fn syntax(&self) -> &SyntaxNode {
2352 pub fn segment(&self) -> Option<PathSegment> {
2353 AstChildren::new(&self.syntax).next()
2355 pub fn qualifier(&self) -> Option<Path> {
2356 AstChildren::new(&self.syntax).next()
2359 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
2360 pub struct PathExpr {
2361 pub(crate) syntax: SyntaxNode,
2363 impl AstNode for PathExpr {
2364 fn can_cast(kind: SyntaxKind) -> bool {
2370 fn cast(syntax: SyntaxNode) -> Option<Self> {
2371 if Self::can_cast(syntax.kind()) {
2372 Some(Self { syntax })
2377 fn syntax(&self) -> &SyntaxNode {
2382 pub fn path(&self) -> Option<Path> {
2383 AstChildren::new(&self.syntax).next()
2386 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
2387 pub struct PathPat {
2388 pub(crate) syntax: SyntaxNode,
2390 impl AstNode for PathPat {
2391 fn can_cast(kind: SyntaxKind) -> bool {
2397 fn cast(syntax: SyntaxNode) -> Option<Self> {
2398 if Self::can_cast(syntax.kind()) {
2399 Some(Self { syntax })
2404 fn syntax(&self) -> &SyntaxNode {
2409 pub fn path(&self) -> Option<Path> {
2410 AstChildren::new(&self.syntax).next()
2413 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
2414 pub struct PathSegment {
2415 pub(crate) syntax: SyntaxNode,
2417 impl AstNode for PathSegment {
2418 fn can_cast(kind: SyntaxKind) -> bool {
2420 PATH_SEGMENT => true,
2424 fn cast(syntax: SyntaxNode) -> Option<Self> {
2425 if Self::can_cast(syntax.kind()) {
2426 Some(Self { syntax })
2431 fn syntax(&self) -> &SyntaxNode {
2436 pub fn name_ref(&self) -> Option<NameRef> {
2437 AstChildren::new(&self.syntax).next()
2439 pub fn type_arg_list(&self) -> Option<TypeArgList> {
2440 AstChildren::new(&self.syntax).next()
2442 pub fn param_list(&self) -> Option<ParamList> {
2443 AstChildren::new(&self.syntax).next()
2445 pub fn ret_type(&self) -> Option<RetType> {
2446 AstChildren::new(&self.syntax).next()
2448 pub fn path_type(&self) -> Option<PathType> {
2449 AstChildren::new(&self.syntax).next()
2452 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
2453 pub struct PathType {
2454 pub(crate) syntax: SyntaxNode,
2456 impl AstNode for PathType {
2457 fn can_cast(kind: SyntaxKind) -> bool {
2463 fn cast(syntax: SyntaxNode) -> Option<Self> {
2464 if Self::can_cast(syntax.kind()) {
2465 Some(Self { syntax })
2470 fn syntax(&self) -> &SyntaxNode {
2475 pub fn path(&self) -> Option<Path> {
2476 AstChildren::new(&self.syntax).next()
2479 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
2480 pub struct PlaceholderPat {
2481 pub(crate) syntax: SyntaxNode,
2483 impl AstNode for PlaceholderPat {
2484 fn can_cast(kind: SyntaxKind) -> bool {
2486 PLACEHOLDER_PAT => true,
2490 fn cast(syntax: SyntaxNode) -> Option<Self> {
2491 if Self::can_cast(syntax.kind()) {
2492 Some(Self { syntax })
2497 fn syntax(&self) -> &SyntaxNode {
2501 impl PlaceholderPat {}
2502 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
2503 pub struct PlaceholderType {
2504 pub(crate) syntax: SyntaxNode,
2506 impl AstNode for PlaceholderType {
2507 fn can_cast(kind: SyntaxKind) -> bool {
2509 PLACEHOLDER_TYPE => true,
2513 fn cast(syntax: SyntaxNode) -> Option<Self> {
2514 if Self::can_cast(syntax.kind()) {
2515 Some(Self { syntax })
2520 fn syntax(&self) -> &SyntaxNode {
2524 impl PlaceholderType {}
2525 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
2526 pub struct PointerType {
2527 pub(crate) syntax: SyntaxNode,
2529 impl AstNode for PointerType {
2530 fn can_cast(kind: SyntaxKind) -> bool {
2532 POINTER_TYPE => true,
2536 fn cast(syntax: SyntaxNode) -> Option<Self> {
2537 if Self::can_cast(syntax.kind()) {
2538 Some(Self { syntax })
2543 fn syntax(&self) -> &SyntaxNode {
2548 pub fn type_ref(&self) -> Option<TypeRef> {
2549 AstChildren::new(&self.syntax).next()
2552 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
2553 pub struct PrefixExpr {
2554 pub(crate) syntax: SyntaxNode,
2556 impl AstNode for PrefixExpr {
2557 fn can_cast(kind: SyntaxKind) -> bool {
2559 PREFIX_EXPR => true,
2563 fn cast(syntax: SyntaxNode) -> Option<Self> {
2564 if Self::can_cast(syntax.kind()) {
2565 Some(Self { syntax })
2570 fn syntax(&self) -> &SyntaxNode {
2575 pub fn expr(&self) -> Option<Expr> {
2576 AstChildren::new(&self.syntax).next()
2579 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
2580 pub struct RangeExpr {
2581 pub(crate) syntax: SyntaxNode,
2583 impl AstNode for RangeExpr {
2584 fn can_cast(kind: SyntaxKind) -> bool {
2590 fn cast(syntax: SyntaxNode) -> Option<Self> {
2591 if Self::can_cast(syntax.kind()) {
2592 Some(Self { syntax })
2597 fn syntax(&self) -> &SyntaxNode {
2602 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
2603 pub struct RangePat {
2604 pub(crate) syntax: SyntaxNode,
2606 impl AstNode for RangePat {
2607 fn can_cast(kind: SyntaxKind) -> bool {
2613 fn cast(syntax: SyntaxNode) -> Option<Self> {
2614 if Self::can_cast(syntax.kind()) {
2615 Some(Self { syntax })
2620 fn syntax(&self) -> &SyntaxNode {
2625 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
2626 pub struct RecordField {
2627 pub(crate) syntax: SyntaxNode,
2629 impl AstNode for RecordField {
2630 fn can_cast(kind: SyntaxKind) -> bool {
2632 RECORD_FIELD => true,
2636 fn cast(syntax: SyntaxNode) -> Option<Self> {
2637 if Self::can_cast(syntax.kind()) {
2638 Some(Self { syntax })
2643 fn syntax(&self) -> &SyntaxNode {
2648 pub fn name_ref(&self) -> Option<NameRef> {
2649 AstChildren::new(&self.syntax).next()
2651 pub fn expr(&self) -> Option<Expr> {
2652 AstChildren::new(&self.syntax).next()
2655 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
2656 pub struct RecordFieldDef {
2657 pub(crate) syntax: SyntaxNode,
2659 impl AstNode for RecordFieldDef {
2660 fn can_cast(kind: SyntaxKind) -> bool {
2662 RECORD_FIELD_DEF => true,
2666 fn cast(syntax: SyntaxNode) -> Option<Self> {
2667 if Self::can_cast(syntax.kind()) {
2668 Some(Self { syntax })
2673 fn syntax(&self) -> &SyntaxNode {
2677 impl ast::VisibilityOwner for RecordFieldDef {}
2678 impl ast::NameOwner for RecordFieldDef {}
2679 impl ast::AttrsOwner for RecordFieldDef {}
2680 impl ast::DocCommentsOwner for RecordFieldDef {}
2681 impl ast::TypeAscriptionOwner for RecordFieldDef {}
2682 impl RecordFieldDef {}
2683 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
2684 pub struct RecordFieldDefList {
2685 pub(crate) syntax: SyntaxNode,
2687 impl AstNode for RecordFieldDefList {
2688 fn can_cast(kind: SyntaxKind) -> bool {
2690 RECORD_FIELD_DEF_LIST => true,
2694 fn cast(syntax: SyntaxNode) -> Option<Self> {
2695 if Self::can_cast(syntax.kind()) {
2696 Some(Self { syntax })
2701 fn syntax(&self) -> &SyntaxNode {
2705 impl RecordFieldDefList {
2706 pub fn fields(&self) -> AstChildren<RecordFieldDef> {
2707 AstChildren::new(&self.syntax)
2710 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
2711 pub struct RecordFieldList {
2712 pub(crate) syntax: SyntaxNode,
2714 impl AstNode for RecordFieldList {
2715 fn can_cast(kind: SyntaxKind) -> bool {
2717 RECORD_FIELD_LIST => true,
2721 fn cast(syntax: SyntaxNode) -> Option<Self> {
2722 if Self::can_cast(syntax.kind()) {
2723 Some(Self { syntax })
2728 fn syntax(&self) -> &SyntaxNode {
2732 impl RecordFieldList {
2733 pub fn fields(&self) -> AstChildren<RecordField> {
2734 AstChildren::new(&self.syntax)
2736 pub fn spread(&self) -> Option<Expr> {
2737 AstChildren::new(&self.syntax).next()
2740 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
2741 pub struct RecordFieldPat {
2742 pub(crate) syntax: SyntaxNode,
2744 impl AstNode for RecordFieldPat {
2745 fn can_cast(kind: SyntaxKind) -> bool {
2747 RECORD_FIELD_PAT => true,
2751 fn cast(syntax: SyntaxNode) -> Option<Self> {
2752 if Self::can_cast(syntax.kind()) {
2753 Some(Self { syntax })
2758 fn syntax(&self) -> &SyntaxNode {
2762 impl ast::NameOwner for RecordFieldPat {}
2763 impl RecordFieldPat {
2764 pub fn pat(&self) -> Option<Pat> {
2765 AstChildren::new(&self.syntax).next()
2768 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
2769 pub struct RecordFieldPatList {
2770 pub(crate) syntax: SyntaxNode,
2772 impl AstNode for RecordFieldPatList {
2773 fn can_cast(kind: SyntaxKind) -> bool {
2775 RECORD_FIELD_PAT_LIST => true,
2779 fn cast(syntax: SyntaxNode) -> Option<Self> {
2780 if Self::can_cast(syntax.kind()) {
2781 Some(Self { syntax })
2786 fn syntax(&self) -> &SyntaxNode {
2790 impl RecordFieldPatList {
2791 pub fn record_field_pats(&self) -> AstChildren<RecordFieldPat> {
2792 AstChildren::new(&self.syntax)
2794 pub fn bind_pats(&self) -> AstChildren<BindPat> {
2795 AstChildren::new(&self.syntax)
2798 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
2799 pub struct RecordLit {
2800 pub(crate) syntax: SyntaxNode,
2802 impl AstNode for RecordLit {
2803 fn can_cast(kind: SyntaxKind) -> bool {
2809 fn cast(syntax: SyntaxNode) -> Option<Self> {
2810 if Self::can_cast(syntax.kind()) {
2811 Some(Self { syntax })
2816 fn syntax(&self) -> &SyntaxNode {
2821 pub fn path(&self) -> Option<Path> {
2822 AstChildren::new(&self.syntax).next()
2824 pub fn record_field_list(&self) -> Option<RecordFieldList> {
2825 AstChildren::new(&self.syntax).next()
2828 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
2829 pub struct RecordPat {
2830 pub(crate) syntax: SyntaxNode,
2832 impl AstNode for RecordPat {
2833 fn can_cast(kind: SyntaxKind) -> bool {
2839 fn cast(syntax: SyntaxNode) -> Option<Self> {
2840 if Self::can_cast(syntax.kind()) {
2841 Some(Self { syntax })
2846 fn syntax(&self) -> &SyntaxNode {
2851 pub fn record_field_pat_list(&self) -> Option<RecordFieldPatList> {
2852 AstChildren::new(&self.syntax).next()
2854 pub fn path(&self) -> Option<Path> {
2855 AstChildren::new(&self.syntax).next()
2858 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
2859 pub struct RefExpr {
2860 pub(crate) syntax: SyntaxNode,
2862 impl AstNode for RefExpr {
2863 fn can_cast(kind: SyntaxKind) -> bool {
2869 fn cast(syntax: SyntaxNode) -> Option<Self> {
2870 if Self::can_cast(syntax.kind()) {
2871 Some(Self { syntax })
2876 fn syntax(&self) -> &SyntaxNode {
2881 pub fn expr(&self) -> Option<Expr> {
2882 AstChildren::new(&self.syntax).next()
2885 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
2887 pub(crate) syntax: SyntaxNode,
2889 impl AstNode for RefPat {
2890 fn can_cast(kind: SyntaxKind) -> bool {
2896 fn cast(syntax: SyntaxNode) -> Option<Self> {
2897 if Self::can_cast(syntax.kind()) {
2898 Some(Self { syntax })
2903 fn syntax(&self) -> &SyntaxNode {
2908 pub fn pat(&self) -> Option<Pat> {
2909 AstChildren::new(&self.syntax).next()
2912 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
2913 pub struct ReferenceType {
2914 pub(crate) syntax: SyntaxNode,
2916 impl AstNode for ReferenceType {
2917 fn can_cast(kind: SyntaxKind) -> bool {
2919 REFERENCE_TYPE => true,
2923 fn cast(syntax: SyntaxNode) -> Option<Self> {
2924 if Self::can_cast(syntax.kind()) {
2925 Some(Self { syntax })
2930 fn syntax(&self) -> &SyntaxNode {
2934 impl ReferenceType {
2935 pub fn type_ref(&self) -> Option<TypeRef> {
2936 AstChildren::new(&self.syntax).next()
2939 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
2940 pub struct RetType {
2941 pub(crate) syntax: SyntaxNode,
2943 impl AstNode for RetType {
2944 fn can_cast(kind: SyntaxKind) -> bool {
2950 fn cast(syntax: SyntaxNode) -> Option<Self> {
2951 if Self::can_cast(syntax.kind()) {
2952 Some(Self { syntax })
2957 fn syntax(&self) -> &SyntaxNode {
2962 pub fn type_ref(&self) -> Option<TypeRef> {
2963 AstChildren::new(&self.syntax).next()
2966 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
2967 pub struct ReturnExpr {
2968 pub(crate) syntax: SyntaxNode,
2970 impl AstNode for ReturnExpr {
2971 fn can_cast(kind: SyntaxKind) -> bool {
2973 RETURN_EXPR => true,
2977 fn cast(syntax: SyntaxNode) -> Option<Self> {
2978 if Self::can_cast(syntax.kind()) {
2979 Some(Self { syntax })
2984 fn syntax(&self) -> &SyntaxNode {
2989 pub fn expr(&self) -> Option<Expr> {
2990 AstChildren::new(&self.syntax).next()
2993 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
2994 pub struct SelfParam {
2995 pub(crate) syntax: SyntaxNode,
2997 impl AstNode for SelfParam {
2998 fn can_cast(kind: SyntaxKind) -> bool {
3004 fn cast(syntax: SyntaxNode) -> Option<Self> {
3005 if Self::can_cast(syntax.kind()) {
3006 Some(Self { syntax })
3011 fn syntax(&self) -> &SyntaxNode {
3015 impl ast::TypeAscriptionOwner for SelfParam {}
3016 impl ast::AttrsOwner for SelfParam {}
3018 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
3019 pub struct SlicePat {
3020 pub(crate) syntax: SyntaxNode,
3022 impl AstNode for SlicePat {
3023 fn can_cast(kind: SyntaxKind) -> bool {
3029 fn cast(syntax: SyntaxNode) -> Option<Self> {
3030 if Self::can_cast(syntax.kind()) {
3031 Some(Self { syntax })
3036 fn syntax(&self) -> &SyntaxNode {
3041 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
3042 pub struct SliceType {
3043 pub(crate) syntax: SyntaxNode,
3045 impl AstNode for SliceType {
3046 fn can_cast(kind: SyntaxKind) -> bool {
3052 fn cast(syntax: SyntaxNode) -> Option<Self> {
3053 if Self::can_cast(syntax.kind()) {
3054 Some(Self { syntax })
3059 fn syntax(&self) -> &SyntaxNode {
3064 pub fn type_ref(&self) -> Option<TypeRef> {
3065 AstChildren::new(&self.syntax).next()
3068 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
3069 pub struct SourceFile {
3070 pub(crate) syntax: SyntaxNode,
3072 impl AstNode for SourceFile {
3073 fn can_cast(kind: SyntaxKind) -> bool {
3075 SOURCE_FILE => true,
3079 fn cast(syntax: SyntaxNode) -> Option<Self> {
3080 if Self::can_cast(syntax.kind()) {
3081 Some(Self { syntax })
3086 fn syntax(&self) -> &SyntaxNode {
3090 impl ast::ModuleItemOwner for SourceFile {}
3091 impl ast::FnDefOwner for SourceFile {}
3093 pub fn modules(&self) -> AstChildren<Module> {
3094 AstChildren::new(&self.syntax)
3097 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
3098 pub struct StaticDef {
3099 pub(crate) syntax: SyntaxNode,
3101 impl AstNode for StaticDef {
3102 fn can_cast(kind: SyntaxKind) -> bool {
3108 fn cast(syntax: SyntaxNode) -> Option<Self> {
3109 if Self::can_cast(syntax.kind()) {
3110 Some(Self { syntax })
3115 fn syntax(&self) -> &SyntaxNode {
3119 impl ast::VisibilityOwner for StaticDef {}
3120 impl ast::NameOwner for StaticDef {}
3121 impl ast::TypeParamsOwner for StaticDef {}
3122 impl ast::AttrsOwner for StaticDef {}
3123 impl ast::DocCommentsOwner for StaticDef {}
3124 impl ast::TypeAscriptionOwner for StaticDef {}
3126 pub fn body(&self) -> Option<Expr> {
3127 AstChildren::new(&self.syntax).next()
3130 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
3135 impl From<ExprStmt> for Stmt {
3136 fn from(node: ExprStmt) -> Stmt {
3137 Stmt::ExprStmt(node)
3140 impl From<LetStmt> for Stmt {
3141 fn from(node: LetStmt) -> Stmt {
3145 impl AstNode for Stmt {
3146 fn can_cast(kind: SyntaxKind) -> bool {
3148 EXPR_STMT | LET_STMT => true,
3152 fn cast(syntax: SyntaxNode) -> Option<Self> {
3153 let res = match syntax.kind() {
3154 EXPR_STMT => Stmt::ExprStmt(ExprStmt { syntax }),
3155 LET_STMT => Stmt::LetStmt(LetStmt { syntax }),
3160 fn syntax(&self) -> &SyntaxNode {
3162 Stmt::ExprStmt(it) => &it.syntax,
3163 Stmt::LetStmt(it) => &it.syntax,
3168 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
3169 pub struct StructDef {
3170 pub(crate) syntax: SyntaxNode,
3172 impl AstNode for StructDef {
3173 fn can_cast(kind: SyntaxKind) -> bool {
3179 fn cast(syntax: SyntaxNode) -> Option<Self> {
3180 if Self::can_cast(syntax.kind()) {
3181 Some(Self { syntax })
3186 fn syntax(&self) -> &SyntaxNode {
3190 impl ast::VisibilityOwner for StructDef {}
3191 impl ast::NameOwner for StructDef {}
3192 impl ast::TypeParamsOwner for StructDef {}
3193 impl ast::AttrsOwner for StructDef {}
3194 impl ast::DocCommentsOwner for StructDef {}
3196 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
3197 pub struct TokenTree {
3198 pub(crate) syntax: SyntaxNode,
3200 impl AstNode for TokenTree {
3201 fn can_cast(kind: SyntaxKind) -> bool {
3207 fn cast(syntax: SyntaxNode) -> Option<Self> {
3208 if Self::can_cast(syntax.kind()) {
3209 Some(Self { syntax })
3214 fn syntax(&self) -> &SyntaxNode {
3219 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
3220 pub struct TraitDef {
3221 pub(crate) syntax: SyntaxNode,
3223 impl AstNode for TraitDef {
3224 fn can_cast(kind: SyntaxKind) -> bool {
3230 fn cast(syntax: SyntaxNode) -> Option<Self> {
3231 if Self::can_cast(syntax.kind()) {
3232 Some(Self { syntax })
3237 fn syntax(&self) -> &SyntaxNode {
3241 impl ast::VisibilityOwner for TraitDef {}
3242 impl ast::NameOwner for TraitDef {}
3243 impl ast::AttrsOwner for TraitDef {}
3244 impl ast::DocCommentsOwner for TraitDef {}
3245 impl ast::TypeParamsOwner for TraitDef {}
3246 impl ast::TypeBoundsOwner for TraitDef {}
3248 pub fn item_list(&self) -> Option<ItemList> {
3249 AstChildren::new(&self.syntax).next()
3252 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
3253 pub struct TryBlockExpr {
3254 pub(crate) syntax: SyntaxNode,
3256 impl AstNode for TryBlockExpr {
3257 fn can_cast(kind: SyntaxKind) -> bool {
3259 TRY_BLOCK_EXPR => true,
3263 fn cast(syntax: SyntaxNode) -> Option<Self> {
3264 if Self::can_cast(syntax.kind()) {
3265 Some(Self { syntax })
3270 fn syntax(&self) -> &SyntaxNode {
3275 pub fn body(&self) -> Option<BlockExpr> {
3276 AstChildren::new(&self.syntax).next()
3279 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
3280 pub struct TryExpr {
3281 pub(crate) syntax: SyntaxNode,
3283 impl AstNode for TryExpr {
3284 fn can_cast(kind: SyntaxKind) -> bool {
3290 fn cast(syntax: SyntaxNode) -> Option<Self> {
3291 if Self::can_cast(syntax.kind()) {
3292 Some(Self { syntax })
3297 fn syntax(&self) -> &SyntaxNode {
3302 pub fn expr(&self) -> Option<Expr> {
3303 AstChildren::new(&self.syntax).next()
3306 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
3307 pub struct TupleExpr {
3308 pub(crate) syntax: SyntaxNode,
3310 impl AstNode for TupleExpr {
3311 fn can_cast(kind: SyntaxKind) -> bool {
3317 fn cast(syntax: SyntaxNode) -> Option<Self> {
3318 if Self::can_cast(syntax.kind()) {
3319 Some(Self { syntax })
3324 fn syntax(&self) -> &SyntaxNode {
3329 pub fn exprs(&self) -> AstChildren<Expr> {
3330 AstChildren::new(&self.syntax)
3333 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
3334 pub struct TupleFieldDef {
3335 pub(crate) syntax: SyntaxNode,
3337 impl AstNode for TupleFieldDef {
3338 fn can_cast(kind: SyntaxKind) -> bool {
3340 TUPLE_FIELD_DEF => true,
3344 fn cast(syntax: SyntaxNode) -> Option<Self> {
3345 if Self::can_cast(syntax.kind()) {
3346 Some(Self { syntax })
3351 fn syntax(&self) -> &SyntaxNode {
3355 impl ast::VisibilityOwner for TupleFieldDef {}
3356 impl ast::AttrsOwner for TupleFieldDef {}
3357 impl TupleFieldDef {
3358 pub fn type_ref(&self) -> Option<TypeRef> {
3359 AstChildren::new(&self.syntax).next()
3362 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
3363 pub struct TupleFieldDefList {
3364 pub(crate) syntax: SyntaxNode,
3366 impl AstNode for TupleFieldDefList {
3367 fn can_cast(kind: SyntaxKind) -> bool {
3369 TUPLE_FIELD_DEF_LIST => true,
3373 fn cast(syntax: SyntaxNode) -> Option<Self> {
3374 if Self::can_cast(syntax.kind()) {
3375 Some(Self { syntax })
3380 fn syntax(&self) -> &SyntaxNode {
3384 impl TupleFieldDefList {
3385 pub fn fields(&self) -> AstChildren<TupleFieldDef> {
3386 AstChildren::new(&self.syntax)
3389 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
3390 pub struct TuplePat {
3391 pub(crate) syntax: SyntaxNode,
3393 impl AstNode for TuplePat {
3394 fn can_cast(kind: SyntaxKind) -> bool {
3400 fn cast(syntax: SyntaxNode) -> Option<Self> {
3401 if Self::can_cast(syntax.kind()) {
3402 Some(Self { syntax })
3407 fn syntax(&self) -> &SyntaxNode {
3412 pub fn args(&self) -> AstChildren<Pat> {
3413 AstChildren::new(&self.syntax)
3416 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
3417 pub struct TupleStructPat {
3418 pub(crate) syntax: SyntaxNode,
3420 impl AstNode for TupleStructPat {
3421 fn can_cast(kind: SyntaxKind) -> bool {
3423 TUPLE_STRUCT_PAT => true,
3427 fn cast(syntax: SyntaxNode) -> Option<Self> {
3428 if Self::can_cast(syntax.kind()) {
3429 Some(Self { syntax })
3434 fn syntax(&self) -> &SyntaxNode {
3438 impl TupleStructPat {
3439 pub fn args(&self) -> AstChildren<Pat> {
3440 AstChildren::new(&self.syntax)
3442 pub fn path(&self) -> Option<Path> {
3443 AstChildren::new(&self.syntax).next()
3446 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
3447 pub struct TupleType {
3448 pub(crate) syntax: SyntaxNode,
3450 impl AstNode for TupleType {
3451 fn can_cast(kind: SyntaxKind) -> bool {
3457 fn cast(syntax: SyntaxNode) -> Option<Self> {
3458 if Self::can_cast(syntax.kind()) {
3459 Some(Self { syntax })
3464 fn syntax(&self) -> &SyntaxNode {
3469 pub fn fields(&self) -> AstChildren<TypeRef> {
3470 AstChildren::new(&self.syntax)
3473 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
3474 pub struct TypeAliasDef {
3475 pub(crate) syntax: SyntaxNode,
3477 impl AstNode for TypeAliasDef {
3478 fn can_cast(kind: SyntaxKind) -> bool {
3480 TYPE_ALIAS_DEF => true,
3484 fn cast(syntax: SyntaxNode) -> Option<Self> {
3485 if Self::can_cast(syntax.kind()) {
3486 Some(Self { syntax })
3491 fn syntax(&self) -> &SyntaxNode {
3495 impl ast::VisibilityOwner for TypeAliasDef {}
3496 impl ast::NameOwner for TypeAliasDef {}
3497 impl ast::TypeParamsOwner for TypeAliasDef {}
3498 impl ast::AttrsOwner for TypeAliasDef {}
3499 impl ast::DocCommentsOwner for TypeAliasDef {}
3500 impl ast::TypeBoundsOwner for TypeAliasDef {}
3502 pub fn type_ref(&self) -> Option<TypeRef> {
3503 AstChildren::new(&self.syntax).next()
3506 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
3507 pub struct TypeArg {
3508 pub(crate) syntax: SyntaxNode,
3510 impl AstNode for TypeArg {
3511 fn can_cast(kind: SyntaxKind) -> bool {
3517 fn cast(syntax: SyntaxNode) -> Option<Self> {
3518 if Self::can_cast(syntax.kind()) {
3519 Some(Self { syntax })
3524 fn syntax(&self) -> &SyntaxNode {
3529 pub fn type_ref(&self) -> Option<TypeRef> {
3530 AstChildren::new(&self.syntax).next()
3533 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
3534 pub struct TypeArgList {
3535 pub(crate) syntax: SyntaxNode,
3537 impl AstNode for TypeArgList {
3538 fn can_cast(kind: SyntaxKind) -> bool {
3540 TYPE_ARG_LIST => true,
3544 fn cast(syntax: SyntaxNode) -> Option<Self> {
3545 if Self::can_cast(syntax.kind()) {
3546 Some(Self { syntax })
3551 fn syntax(&self) -> &SyntaxNode {
3556 pub fn type_args(&self) -> AstChildren<TypeArg> {
3557 AstChildren::new(&self.syntax)
3559 pub fn lifetime_args(&self) -> AstChildren<LifetimeArg> {
3560 AstChildren::new(&self.syntax)
3562 pub fn assoc_type_args(&self) -> AstChildren<AssocTypeArg> {
3563 AstChildren::new(&self.syntax)
3566 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
3567 pub struct TypeBound {
3568 pub(crate) syntax: SyntaxNode,
3570 impl AstNode for TypeBound {
3571 fn can_cast(kind: SyntaxKind) -> bool {
3577 fn cast(syntax: SyntaxNode) -> Option<Self> {
3578 if Self::can_cast(syntax.kind()) {
3579 Some(Self { syntax })
3584 fn syntax(&self) -> &SyntaxNode {
3589 pub fn type_ref(&self) -> Option<TypeRef> {
3590 AstChildren::new(&self.syntax).next()
3593 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
3594 pub struct TypeBoundList {
3595 pub(crate) syntax: SyntaxNode,
3597 impl AstNode for TypeBoundList {
3598 fn can_cast(kind: SyntaxKind) -> bool {
3600 TYPE_BOUND_LIST => true,
3604 fn cast(syntax: SyntaxNode) -> Option<Self> {
3605 if Self::can_cast(syntax.kind()) {
3606 Some(Self { syntax })
3611 fn syntax(&self) -> &SyntaxNode {
3615 impl TypeBoundList {
3616 pub fn bounds(&self) -> AstChildren<TypeBound> {
3617 AstChildren::new(&self.syntax)
3620 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
3621 pub struct TypeParam {
3622 pub(crate) syntax: SyntaxNode,
3624 impl AstNode for TypeParam {
3625 fn can_cast(kind: SyntaxKind) -> bool {
3631 fn cast(syntax: SyntaxNode) -> Option<Self> {
3632 if Self::can_cast(syntax.kind()) {
3633 Some(Self { syntax })
3638 fn syntax(&self) -> &SyntaxNode {
3642 impl ast::NameOwner for TypeParam {}
3643 impl ast::AttrsOwner for TypeParam {}
3644 impl ast::TypeBoundsOwner for TypeParam {}
3646 pub fn default_type(&self) -> Option<TypeRef> {
3647 AstChildren::new(&self.syntax).next()
3650 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
3651 pub struct TypeParamList {
3652 pub(crate) syntax: SyntaxNode,
3654 impl AstNode for TypeParamList {
3655 fn can_cast(kind: SyntaxKind) -> bool {
3657 TYPE_PARAM_LIST => true,
3661 fn cast(syntax: SyntaxNode) -> Option<Self> {
3662 if Self::can_cast(syntax.kind()) {
3663 Some(Self { syntax })
3668 fn syntax(&self) -> &SyntaxNode {
3672 impl TypeParamList {
3673 pub fn type_params(&self) -> AstChildren<TypeParam> {
3674 AstChildren::new(&self.syntax)
3676 pub fn lifetime_params(&self) -> AstChildren<LifetimeParam> {
3677 AstChildren::new(&self.syntax)
3680 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
3682 ParenType(ParenType),
3683 TupleType(TupleType),
3684 NeverType(NeverType),
3686 PointerType(PointerType),
3687 ArrayType(ArrayType),
3688 SliceType(SliceType),
3689 ReferenceType(ReferenceType),
3690 PlaceholderType(PlaceholderType),
3691 FnPointerType(FnPointerType),
3693 ImplTraitType(ImplTraitType),
3694 DynTraitType(DynTraitType),
3696 impl From<ParenType> for TypeRef {
3697 fn from(node: ParenType) -> TypeRef {
3698 TypeRef::ParenType(node)
3701 impl From<TupleType> for TypeRef {
3702 fn from(node: TupleType) -> TypeRef {
3703 TypeRef::TupleType(node)
3706 impl From<NeverType> for TypeRef {
3707 fn from(node: NeverType) -> TypeRef {
3708 TypeRef::NeverType(node)
3711 impl From<PathType> for TypeRef {
3712 fn from(node: PathType) -> TypeRef {
3713 TypeRef::PathType(node)
3716 impl From<PointerType> for TypeRef {
3717 fn from(node: PointerType) -> TypeRef {
3718 TypeRef::PointerType(node)
3721 impl From<ArrayType> for TypeRef {
3722 fn from(node: ArrayType) -> TypeRef {
3723 TypeRef::ArrayType(node)
3726 impl From<SliceType> for TypeRef {
3727 fn from(node: SliceType) -> TypeRef {
3728 TypeRef::SliceType(node)
3731 impl From<ReferenceType> for TypeRef {
3732 fn from(node: ReferenceType) -> TypeRef {
3733 TypeRef::ReferenceType(node)
3736 impl From<PlaceholderType> for TypeRef {
3737 fn from(node: PlaceholderType) -> TypeRef {
3738 TypeRef::PlaceholderType(node)
3741 impl From<FnPointerType> for TypeRef {
3742 fn from(node: FnPointerType) -> TypeRef {
3743 TypeRef::FnPointerType(node)
3746 impl From<ForType> for TypeRef {
3747 fn from(node: ForType) -> TypeRef {
3748 TypeRef::ForType(node)
3751 impl From<ImplTraitType> for TypeRef {
3752 fn from(node: ImplTraitType) -> TypeRef {
3753 TypeRef::ImplTraitType(node)
3756 impl From<DynTraitType> for TypeRef {
3757 fn from(node: DynTraitType) -> TypeRef {
3758 TypeRef::DynTraitType(node)
3761 impl AstNode for TypeRef {
3762 fn can_cast(kind: SyntaxKind) -> bool {
3764 PAREN_TYPE | TUPLE_TYPE | NEVER_TYPE | PATH_TYPE | POINTER_TYPE | ARRAY_TYPE
3765 | SLICE_TYPE | REFERENCE_TYPE | PLACEHOLDER_TYPE | FN_POINTER_TYPE | FOR_TYPE
3766 | IMPL_TRAIT_TYPE | DYN_TRAIT_TYPE => true,
3770 fn cast(syntax: SyntaxNode) -> Option<Self> {
3771 let res = match syntax.kind() {
3772 PAREN_TYPE => TypeRef::ParenType(ParenType { syntax }),
3773 TUPLE_TYPE => TypeRef::TupleType(TupleType { syntax }),
3774 NEVER_TYPE => TypeRef::NeverType(NeverType { syntax }),
3775 PATH_TYPE => TypeRef::PathType(PathType { syntax }),
3776 POINTER_TYPE => TypeRef::PointerType(PointerType { syntax }),
3777 ARRAY_TYPE => TypeRef::ArrayType(ArrayType { syntax }),
3778 SLICE_TYPE => TypeRef::SliceType(SliceType { syntax }),
3779 REFERENCE_TYPE => TypeRef::ReferenceType(ReferenceType { syntax }),
3780 PLACEHOLDER_TYPE => TypeRef::PlaceholderType(PlaceholderType { syntax }),
3781 FN_POINTER_TYPE => TypeRef::FnPointerType(FnPointerType { syntax }),
3782 FOR_TYPE => TypeRef::ForType(ForType { syntax }),
3783 IMPL_TRAIT_TYPE => TypeRef::ImplTraitType(ImplTraitType { syntax }),
3784 DYN_TRAIT_TYPE => TypeRef::DynTraitType(DynTraitType { syntax }),
3789 fn syntax(&self) -> &SyntaxNode {
3791 TypeRef::ParenType(it) => &it.syntax,
3792 TypeRef::TupleType(it) => &it.syntax,
3793 TypeRef::NeverType(it) => &it.syntax,
3794 TypeRef::PathType(it) => &it.syntax,
3795 TypeRef::PointerType(it) => &it.syntax,
3796 TypeRef::ArrayType(it) => &it.syntax,
3797 TypeRef::SliceType(it) => &it.syntax,
3798 TypeRef::ReferenceType(it) => &it.syntax,
3799 TypeRef::PlaceholderType(it) => &it.syntax,
3800 TypeRef::FnPointerType(it) => &it.syntax,
3801 TypeRef::ForType(it) => &it.syntax,
3802 TypeRef::ImplTraitType(it) => &it.syntax,
3803 TypeRef::DynTraitType(it) => &it.syntax,
3808 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
3809 pub struct UnionDef {
3810 pub(crate) syntax: SyntaxNode,
3812 impl AstNode for UnionDef {
3813 fn can_cast(kind: SyntaxKind) -> bool {
3819 fn cast(syntax: SyntaxNode) -> Option<Self> {
3820 if Self::can_cast(syntax.kind()) {
3821 Some(Self { syntax })
3826 fn syntax(&self) -> &SyntaxNode {
3830 impl ast::VisibilityOwner for UnionDef {}
3831 impl ast::NameOwner for UnionDef {}
3832 impl ast::TypeParamsOwner for UnionDef {}
3833 impl ast::AttrsOwner for UnionDef {}
3834 impl ast::DocCommentsOwner for UnionDef {}
3836 pub fn record_field_def_list(&self) -> Option<RecordFieldDefList> {
3837 AstChildren::new(&self.syntax).next()
3840 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
3841 pub struct UseItem {
3842 pub(crate) syntax: SyntaxNode,
3844 impl AstNode for UseItem {
3845 fn can_cast(kind: SyntaxKind) -> bool {
3851 fn cast(syntax: SyntaxNode) -> Option<Self> {
3852 if Self::can_cast(syntax.kind()) {
3853 Some(Self { syntax })
3858 fn syntax(&self) -> &SyntaxNode {
3862 impl ast::AttrsOwner for UseItem {}
3864 pub fn use_tree(&self) -> Option<UseTree> {
3865 AstChildren::new(&self.syntax).next()
3868 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
3869 pub struct UseTree {
3870 pub(crate) syntax: SyntaxNode,
3872 impl AstNode for UseTree {
3873 fn can_cast(kind: SyntaxKind) -> bool {
3879 fn cast(syntax: SyntaxNode) -> Option<Self> {
3880 if Self::can_cast(syntax.kind()) {
3881 Some(Self { syntax })
3886 fn syntax(&self) -> &SyntaxNode {
3891 pub fn path(&self) -> Option<Path> {
3892 AstChildren::new(&self.syntax).next()
3894 pub fn use_tree_list(&self) -> Option<UseTreeList> {
3895 AstChildren::new(&self.syntax).next()
3897 pub fn alias(&self) -> Option<Alias> {
3898 AstChildren::new(&self.syntax).next()
3901 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
3902 pub struct UseTreeList {
3903 pub(crate) syntax: SyntaxNode,
3905 impl AstNode for UseTreeList {
3906 fn can_cast(kind: SyntaxKind) -> bool {
3908 USE_TREE_LIST => true,
3912 fn cast(syntax: SyntaxNode) -> Option<Self> {
3913 if Self::can_cast(syntax.kind()) {
3914 Some(Self { syntax })
3919 fn syntax(&self) -> &SyntaxNode {
3924 pub fn use_trees(&self) -> AstChildren<UseTree> {
3925 AstChildren::new(&self.syntax)
3928 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
3929 pub struct Visibility {
3930 pub(crate) syntax: SyntaxNode,
3932 impl AstNode for Visibility {
3933 fn can_cast(kind: SyntaxKind) -> bool {
3939 fn cast(syntax: SyntaxNode) -> Option<Self> {
3940 if Self::can_cast(syntax.kind()) {
3941 Some(Self { syntax })
3946 fn syntax(&self) -> &SyntaxNode {
3951 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
3952 pub struct WhereClause {
3953 pub(crate) syntax: SyntaxNode,
3955 impl AstNode for WhereClause {
3956 fn can_cast(kind: SyntaxKind) -> bool {
3958 WHERE_CLAUSE => true,
3962 fn cast(syntax: SyntaxNode) -> Option<Self> {
3963 if Self::can_cast(syntax.kind()) {
3964 Some(Self { syntax })
3969 fn syntax(&self) -> &SyntaxNode {
3974 pub fn predicates(&self) -> AstChildren<WherePred> {
3975 AstChildren::new(&self.syntax)
3978 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
3979 pub struct WherePred {
3980 pub(crate) syntax: SyntaxNode,
3982 impl AstNode for WherePred {
3983 fn can_cast(kind: SyntaxKind) -> bool {
3989 fn cast(syntax: SyntaxNode) -> Option<Self> {
3990 if Self::can_cast(syntax.kind()) {
3991 Some(Self { syntax })
3996 fn syntax(&self) -> &SyntaxNode {
4000 impl ast::TypeBoundsOwner for WherePred {}
4002 pub fn type_ref(&self) -> Option<TypeRef> {
4003 AstChildren::new(&self.syntax).next()
4006 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
4007 pub struct WhileExpr {
4008 pub(crate) syntax: SyntaxNode,
4010 impl AstNode for WhileExpr {
4011 fn can_cast(kind: SyntaxKind) -> bool {
4017 fn cast(syntax: SyntaxNode) -> Option<Self> {
4018 if Self::can_cast(syntax.kind()) {
4019 Some(Self { syntax })
4024 fn syntax(&self) -> &SyntaxNode {
4028 impl ast::LoopBodyOwner for WhileExpr {}
4030 pub fn condition(&self) -> Option<Condition> {
4031 AstChildren::new(&self.syntax).next()