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 ret_type(&self) -> Option<RetType> {
1430 AstChildren::new(&self.syntax).next()
1432 pub fn body(&self) -> Option<Expr> {
1433 AstChildren::new(&self.syntax).next()
1436 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
1437 pub struct LetStmt {
1438 pub(crate) syntax: SyntaxNode,
1440 impl AstNode for LetStmt {
1441 fn can_cast(kind: SyntaxKind) -> bool {
1447 fn cast(syntax: SyntaxNode) -> Option<Self> {
1448 if Self::can_cast(syntax.kind()) {
1449 Some(Self { syntax })
1454 fn syntax(&self) -> &SyntaxNode {
1458 impl ast::TypeAscriptionOwner for LetStmt {}
1460 pub fn pat(&self) -> Option<Pat> {
1461 AstChildren::new(&self.syntax).next()
1463 pub fn initializer(&self) -> Option<Expr> {
1464 AstChildren::new(&self.syntax).next()
1467 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
1468 pub struct LifetimeArg {
1469 pub(crate) syntax: SyntaxNode,
1471 impl AstNode for LifetimeArg {
1472 fn can_cast(kind: SyntaxKind) -> bool {
1474 LIFETIME_ARG => true,
1478 fn cast(syntax: SyntaxNode) -> Option<Self> {
1479 if Self::can_cast(syntax.kind()) {
1480 Some(Self { syntax })
1485 fn syntax(&self) -> &SyntaxNode {
1490 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
1491 pub struct LifetimeParam {
1492 pub(crate) syntax: SyntaxNode,
1494 impl AstNode for LifetimeParam {
1495 fn can_cast(kind: SyntaxKind) -> bool {
1497 LIFETIME_PARAM => true,
1501 fn cast(syntax: SyntaxNode) -> Option<Self> {
1502 if Self::can_cast(syntax.kind()) {
1503 Some(Self { syntax })
1508 fn syntax(&self) -> &SyntaxNode {
1512 impl ast::AttrsOwner for LifetimeParam {}
1513 impl LifetimeParam {}
1514 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
1515 pub struct Literal {
1516 pub(crate) syntax: SyntaxNode,
1518 impl AstNode for Literal {
1519 fn can_cast(kind: SyntaxKind) -> bool {
1525 fn cast(syntax: SyntaxNode) -> Option<Self> {
1526 if Self::can_cast(syntax.kind()) {
1527 Some(Self { syntax })
1532 fn syntax(&self) -> &SyntaxNode {
1537 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
1538 pub struct LiteralPat {
1539 pub(crate) syntax: SyntaxNode,
1541 impl AstNode for LiteralPat {
1542 fn can_cast(kind: SyntaxKind) -> bool {
1544 LITERAL_PAT => true,
1548 fn cast(syntax: SyntaxNode) -> Option<Self> {
1549 if Self::can_cast(syntax.kind()) {
1550 Some(Self { syntax })
1555 fn syntax(&self) -> &SyntaxNode {
1560 pub fn literal(&self) -> Option<Literal> {
1561 AstChildren::new(&self.syntax).next()
1564 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
1565 pub struct LoopExpr {
1566 pub(crate) syntax: SyntaxNode,
1568 impl AstNode for LoopExpr {
1569 fn can_cast(kind: SyntaxKind) -> bool {
1575 fn cast(syntax: SyntaxNode) -> Option<Self> {
1576 if Self::can_cast(syntax.kind()) {
1577 Some(Self { syntax })
1582 fn syntax(&self) -> &SyntaxNode {
1586 impl ast::LoopBodyOwner for LoopExpr {}
1588 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
1589 pub struct MacroCall {
1590 pub(crate) syntax: SyntaxNode,
1592 impl AstNode for MacroCall {
1593 fn can_cast(kind: SyntaxKind) -> bool {
1599 fn cast(syntax: SyntaxNode) -> Option<Self> {
1600 if Self::can_cast(syntax.kind()) {
1601 Some(Self { syntax })
1606 fn syntax(&self) -> &SyntaxNode {
1610 impl ast::NameOwner for MacroCall {}
1611 impl ast::AttrsOwner for MacroCall {}
1612 impl ast::DocCommentsOwner for MacroCall {}
1614 pub fn token_tree(&self) -> Option<TokenTree> {
1615 AstChildren::new(&self.syntax).next()
1617 pub fn path(&self) -> Option<Path> {
1618 AstChildren::new(&self.syntax).next()
1621 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
1622 pub struct MacroItems {
1623 pub(crate) syntax: SyntaxNode,
1625 impl AstNode for MacroItems {
1626 fn can_cast(kind: SyntaxKind) -> bool {
1628 MACRO_ITEMS => true,
1632 fn cast(syntax: SyntaxNode) -> Option<Self> {
1633 if Self::can_cast(syntax.kind()) {
1634 Some(Self { syntax })
1639 fn syntax(&self) -> &SyntaxNode {
1643 impl ast::ModuleItemOwner for MacroItems {}
1644 impl ast::FnDefOwner for MacroItems {}
1646 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
1647 pub struct MacroStmts {
1648 pub(crate) syntax: SyntaxNode,
1650 impl AstNode for MacroStmts {
1651 fn can_cast(kind: SyntaxKind) -> bool {
1653 MACRO_STMTS => true,
1657 fn cast(syntax: SyntaxNode) -> Option<Self> {
1658 if Self::can_cast(syntax.kind()) {
1659 Some(Self { syntax })
1664 fn syntax(&self) -> &SyntaxNode {
1669 pub fn statements(&self) -> AstChildren<Stmt> {
1670 AstChildren::new(&self.syntax)
1672 pub fn expr(&self) -> Option<Expr> {
1673 AstChildren::new(&self.syntax).next()
1676 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
1677 pub struct MatchArm {
1678 pub(crate) syntax: SyntaxNode,
1680 impl AstNode for MatchArm {
1681 fn can_cast(kind: SyntaxKind) -> bool {
1687 fn cast(syntax: SyntaxNode) -> Option<Self> {
1688 if Self::can_cast(syntax.kind()) {
1689 Some(Self { syntax })
1694 fn syntax(&self) -> &SyntaxNode {
1698 impl ast::AttrsOwner for MatchArm {}
1700 pub fn pats(&self) -> AstChildren<Pat> {
1701 AstChildren::new(&self.syntax)
1703 pub fn guard(&self) -> Option<MatchGuard> {
1704 AstChildren::new(&self.syntax).next()
1706 pub fn expr(&self) -> Option<Expr> {
1707 AstChildren::new(&self.syntax).next()
1710 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
1711 pub struct MatchArmList {
1712 pub(crate) syntax: SyntaxNode,
1714 impl AstNode for MatchArmList {
1715 fn can_cast(kind: SyntaxKind) -> bool {
1717 MATCH_ARM_LIST => true,
1721 fn cast(syntax: SyntaxNode) -> Option<Self> {
1722 if Self::can_cast(syntax.kind()) {
1723 Some(Self { syntax })
1728 fn syntax(&self) -> &SyntaxNode {
1732 impl ast::AttrsOwner for MatchArmList {}
1734 pub fn arms(&self) -> AstChildren<MatchArm> {
1735 AstChildren::new(&self.syntax)
1738 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
1739 pub struct MatchExpr {
1740 pub(crate) syntax: SyntaxNode,
1742 impl AstNode for MatchExpr {
1743 fn can_cast(kind: SyntaxKind) -> bool {
1749 fn cast(syntax: SyntaxNode) -> Option<Self> {
1750 if Self::can_cast(syntax.kind()) {
1751 Some(Self { syntax })
1756 fn syntax(&self) -> &SyntaxNode {
1761 pub fn expr(&self) -> Option<Expr> {
1762 AstChildren::new(&self.syntax).next()
1764 pub fn match_arm_list(&self) -> Option<MatchArmList> {
1765 AstChildren::new(&self.syntax).next()
1768 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
1769 pub struct MatchGuard {
1770 pub(crate) syntax: SyntaxNode,
1772 impl AstNode for MatchGuard {
1773 fn can_cast(kind: SyntaxKind) -> bool {
1775 MATCH_GUARD => true,
1779 fn cast(syntax: SyntaxNode) -> Option<Self> {
1780 if Self::can_cast(syntax.kind()) {
1781 Some(Self { syntax })
1786 fn syntax(&self) -> &SyntaxNode {
1791 pub fn expr(&self) -> Option<Expr> {
1792 AstChildren::new(&self.syntax).next()
1795 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
1796 pub struct MethodCallExpr {
1797 pub(crate) syntax: SyntaxNode,
1799 impl AstNode for MethodCallExpr {
1800 fn can_cast(kind: SyntaxKind) -> bool {
1802 METHOD_CALL_EXPR => true,
1806 fn cast(syntax: SyntaxNode) -> Option<Self> {
1807 if Self::can_cast(syntax.kind()) {
1808 Some(Self { syntax })
1813 fn syntax(&self) -> &SyntaxNode {
1817 impl ast::ArgListOwner for MethodCallExpr {}
1818 impl MethodCallExpr {
1819 pub fn expr(&self) -> Option<Expr> {
1820 AstChildren::new(&self.syntax).next()
1822 pub fn name_ref(&self) -> Option<NameRef> {
1823 AstChildren::new(&self.syntax).next()
1825 pub fn type_arg_list(&self) -> Option<TypeArgList> {
1826 AstChildren::new(&self.syntax).next()
1829 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
1831 pub(crate) syntax: SyntaxNode,
1833 impl AstNode for Module {
1834 fn can_cast(kind: SyntaxKind) -> bool {
1840 fn cast(syntax: SyntaxNode) -> Option<Self> {
1841 if Self::can_cast(syntax.kind()) {
1842 Some(Self { syntax })
1847 fn syntax(&self) -> &SyntaxNode {
1851 impl ast::VisibilityOwner for Module {}
1852 impl ast::NameOwner for Module {}
1853 impl ast::AttrsOwner for Module {}
1854 impl ast::DocCommentsOwner for Module {}
1856 pub fn item_list(&self) -> Option<ItemList> {
1857 AstChildren::new(&self.syntax).next()
1860 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
1861 pub enum ModuleItem {
1862 StructDef(StructDef),
1867 TypeAliasDef(TypeAliasDef),
1868 ImplBlock(ImplBlock),
1870 ExternCrateItem(ExternCrateItem),
1872 StaticDef(StaticDef),
1875 impl From<StructDef> for ModuleItem {
1876 fn from(node: StructDef) -> ModuleItem {
1877 ModuleItem::StructDef(node)
1880 impl From<UnionDef> for ModuleItem {
1881 fn from(node: UnionDef) -> ModuleItem {
1882 ModuleItem::UnionDef(node)
1885 impl From<EnumDef> for ModuleItem {
1886 fn from(node: EnumDef) -> ModuleItem {
1887 ModuleItem::EnumDef(node)
1890 impl From<FnDef> for ModuleItem {
1891 fn from(node: FnDef) -> ModuleItem {
1892 ModuleItem::FnDef(node)
1895 impl From<TraitDef> for ModuleItem {
1896 fn from(node: TraitDef) -> ModuleItem {
1897 ModuleItem::TraitDef(node)
1900 impl From<TypeAliasDef> for ModuleItem {
1901 fn from(node: TypeAliasDef) -> ModuleItem {
1902 ModuleItem::TypeAliasDef(node)
1905 impl From<ImplBlock> for ModuleItem {
1906 fn from(node: ImplBlock) -> ModuleItem {
1907 ModuleItem::ImplBlock(node)
1910 impl From<UseItem> for ModuleItem {
1911 fn from(node: UseItem) -> ModuleItem {
1912 ModuleItem::UseItem(node)
1915 impl From<ExternCrateItem> for ModuleItem {
1916 fn from(node: ExternCrateItem) -> ModuleItem {
1917 ModuleItem::ExternCrateItem(node)
1920 impl From<ConstDef> for ModuleItem {
1921 fn from(node: ConstDef) -> ModuleItem {
1922 ModuleItem::ConstDef(node)
1925 impl From<StaticDef> for ModuleItem {
1926 fn from(node: StaticDef) -> ModuleItem {
1927 ModuleItem::StaticDef(node)
1930 impl From<Module> for ModuleItem {
1931 fn from(node: Module) -> ModuleItem {
1932 ModuleItem::Module(node)
1935 impl AstNode for ModuleItem {
1936 fn can_cast(kind: SyntaxKind) -> bool {
1938 STRUCT_DEF | UNION_DEF | ENUM_DEF | FN_DEF | TRAIT_DEF | TYPE_ALIAS_DEF
1939 | IMPL_BLOCK | USE_ITEM | EXTERN_CRATE_ITEM | CONST_DEF | STATIC_DEF | MODULE => true,
1943 fn cast(syntax: SyntaxNode) -> Option<Self> {
1944 let res = match syntax.kind() {
1945 STRUCT_DEF => ModuleItem::StructDef(StructDef { syntax }),
1946 UNION_DEF => ModuleItem::UnionDef(UnionDef { syntax }),
1947 ENUM_DEF => ModuleItem::EnumDef(EnumDef { syntax }),
1948 FN_DEF => ModuleItem::FnDef(FnDef { syntax }),
1949 TRAIT_DEF => ModuleItem::TraitDef(TraitDef { syntax }),
1950 TYPE_ALIAS_DEF => ModuleItem::TypeAliasDef(TypeAliasDef { syntax }),
1951 IMPL_BLOCK => ModuleItem::ImplBlock(ImplBlock { syntax }),
1952 USE_ITEM => ModuleItem::UseItem(UseItem { syntax }),
1953 EXTERN_CRATE_ITEM => ModuleItem::ExternCrateItem(ExternCrateItem { syntax }),
1954 CONST_DEF => ModuleItem::ConstDef(ConstDef { syntax }),
1955 STATIC_DEF => ModuleItem::StaticDef(StaticDef { syntax }),
1956 MODULE => ModuleItem::Module(Module { syntax }),
1961 fn syntax(&self) -> &SyntaxNode {
1963 ModuleItem::StructDef(it) => &it.syntax,
1964 ModuleItem::UnionDef(it) => &it.syntax,
1965 ModuleItem::EnumDef(it) => &it.syntax,
1966 ModuleItem::FnDef(it) => &it.syntax,
1967 ModuleItem::TraitDef(it) => &it.syntax,
1968 ModuleItem::TypeAliasDef(it) => &it.syntax,
1969 ModuleItem::ImplBlock(it) => &it.syntax,
1970 ModuleItem::UseItem(it) => &it.syntax,
1971 ModuleItem::ExternCrateItem(it) => &it.syntax,
1972 ModuleItem::ConstDef(it) => &it.syntax,
1973 ModuleItem::StaticDef(it) => &it.syntax,
1974 ModuleItem::Module(it) => &it.syntax,
1978 impl ast::AttrsOwner for ModuleItem {}
1980 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
1982 pub(crate) syntax: SyntaxNode,
1984 impl AstNode for Name {
1985 fn can_cast(kind: SyntaxKind) -> bool {
1991 fn cast(syntax: SyntaxNode) -> Option<Self> {
1992 if Self::can_cast(syntax.kind()) {
1993 Some(Self { syntax })
1998 fn syntax(&self) -> &SyntaxNode {
2003 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
2004 pub struct NameRef {
2005 pub(crate) syntax: SyntaxNode,
2007 impl AstNode for NameRef {
2008 fn can_cast(kind: SyntaxKind) -> bool {
2014 fn cast(syntax: SyntaxNode) -> Option<Self> {
2015 if Self::can_cast(syntax.kind()) {
2016 Some(Self { syntax })
2021 fn syntax(&self) -> &SyntaxNode {
2026 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
2027 pub struct NeverType {
2028 pub(crate) syntax: SyntaxNode,
2030 impl AstNode for NeverType {
2031 fn can_cast(kind: SyntaxKind) -> bool {
2037 fn cast(syntax: SyntaxNode) -> Option<Self> {
2038 if Self::can_cast(syntax.kind()) {
2039 Some(Self { syntax })
2044 fn syntax(&self) -> &SyntaxNode {
2049 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
2050 pub enum NominalDef {
2051 StructDef(StructDef),
2055 impl From<StructDef> for NominalDef {
2056 fn from(node: StructDef) -> NominalDef {
2057 NominalDef::StructDef(node)
2060 impl From<EnumDef> for NominalDef {
2061 fn from(node: EnumDef) -> NominalDef {
2062 NominalDef::EnumDef(node)
2065 impl From<UnionDef> for NominalDef {
2066 fn from(node: UnionDef) -> NominalDef {
2067 NominalDef::UnionDef(node)
2070 impl AstNode for NominalDef {
2071 fn can_cast(kind: SyntaxKind) -> bool {
2073 STRUCT_DEF | ENUM_DEF | UNION_DEF => true,
2077 fn cast(syntax: SyntaxNode) -> Option<Self> {
2078 let res = match syntax.kind() {
2079 STRUCT_DEF => NominalDef::StructDef(StructDef { syntax }),
2080 ENUM_DEF => NominalDef::EnumDef(EnumDef { syntax }),
2081 UNION_DEF => NominalDef::UnionDef(UnionDef { syntax }),
2086 fn syntax(&self) -> &SyntaxNode {
2088 NominalDef::StructDef(it) => &it.syntax,
2089 NominalDef::EnumDef(it) => &it.syntax,
2090 NominalDef::UnionDef(it) => &it.syntax,
2094 impl ast::NameOwner for NominalDef {}
2095 impl ast::TypeParamsOwner for NominalDef {}
2096 impl ast::AttrsOwner for NominalDef {}
2098 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
2100 pub(crate) syntax: SyntaxNode,
2102 impl AstNode for Param {
2103 fn can_cast(kind: SyntaxKind) -> bool {
2109 fn cast(syntax: SyntaxNode) -> Option<Self> {
2110 if Self::can_cast(syntax.kind()) {
2111 Some(Self { syntax })
2116 fn syntax(&self) -> &SyntaxNode {
2120 impl ast::TypeAscriptionOwner for Param {}
2121 impl ast::AttrsOwner for Param {}
2123 pub fn pat(&self) -> Option<Pat> {
2124 AstChildren::new(&self.syntax).next()
2127 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
2128 pub struct ParamList {
2129 pub(crate) syntax: SyntaxNode,
2131 impl AstNode for ParamList {
2132 fn can_cast(kind: SyntaxKind) -> bool {
2138 fn cast(syntax: SyntaxNode) -> Option<Self> {
2139 if Self::can_cast(syntax.kind()) {
2140 Some(Self { syntax })
2145 fn syntax(&self) -> &SyntaxNode {
2150 pub fn params(&self) -> AstChildren<Param> {
2151 AstChildren::new(&self.syntax)
2153 pub fn self_param(&self) -> Option<SelfParam> {
2154 AstChildren::new(&self.syntax).next()
2157 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
2158 pub struct ParenExpr {
2159 pub(crate) syntax: SyntaxNode,
2161 impl AstNode for ParenExpr {
2162 fn can_cast(kind: SyntaxKind) -> bool {
2168 fn cast(syntax: SyntaxNode) -> Option<Self> {
2169 if Self::can_cast(syntax.kind()) {
2170 Some(Self { syntax })
2175 fn syntax(&self) -> &SyntaxNode {
2180 pub fn expr(&self) -> Option<Expr> {
2181 AstChildren::new(&self.syntax).next()
2184 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
2185 pub struct ParenType {
2186 pub(crate) syntax: SyntaxNode,
2188 impl AstNode for ParenType {
2189 fn can_cast(kind: SyntaxKind) -> bool {
2195 fn cast(syntax: SyntaxNode) -> Option<Self> {
2196 if Self::can_cast(syntax.kind()) {
2197 Some(Self { syntax })
2202 fn syntax(&self) -> &SyntaxNode {
2207 pub fn type_ref(&self) -> Option<TypeRef> {
2208 AstChildren::new(&self.syntax).next()
2211 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
2216 PlaceholderPat(PlaceholderPat),
2217 DotDotPat(DotDotPat),
2219 RecordPat(RecordPat),
2220 TupleStructPat(TupleStructPat),
2224 LiteralPat(LiteralPat),
2226 impl From<RefPat> for Pat {
2227 fn from(node: RefPat) -> Pat {
2231 impl From<BoxPat> for Pat {
2232 fn from(node: BoxPat) -> Pat {
2236 impl From<BindPat> for Pat {
2237 fn from(node: BindPat) -> Pat {
2241 impl From<PlaceholderPat> for Pat {
2242 fn from(node: PlaceholderPat) -> Pat {
2243 Pat::PlaceholderPat(node)
2246 impl From<DotDotPat> for Pat {
2247 fn from(node: DotDotPat) -> Pat {
2248 Pat::DotDotPat(node)
2251 impl From<PathPat> for Pat {
2252 fn from(node: PathPat) -> Pat {
2256 impl From<RecordPat> for Pat {
2257 fn from(node: RecordPat) -> Pat {
2258 Pat::RecordPat(node)
2261 impl From<TupleStructPat> for Pat {
2262 fn from(node: TupleStructPat) -> Pat {
2263 Pat::TupleStructPat(node)
2266 impl From<TuplePat> for Pat {
2267 fn from(node: TuplePat) -> Pat {
2271 impl From<SlicePat> for Pat {
2272 fn from(node: SlicePat) -> Pat {
2276 impl From<RangePat> for Pat {
2277 fn from(node: RangePat) -> Pat {
2281 impl From<LiteralPat> for Pat {
2282 fn from(node: LiteralPat) -> Pat {
2283 Pat::LiteralPat(node)
2286 impl AstNode for Pat {
2287 fn can_cast(kind: SyntaxKind) -> bool {
2289 REF_PAT | BOX_PAT | BIND_PAT | PLACEHOLDER_PAT | DOT_DOT_PAT | PATH_PAT
2290 | RECORD_PAT | TUPLE_STRUCT_PAT | TUPLE_PAT | SLICE_PAT | RANGE_PAT | LITERAL_PAT => {
2296 fn cast(syntax: SyntaxNode) -> Option<Self> {
2297 let res = match syntax.kind() {
2298 REF_PAT => Pat::RefPat(RefPat { syntax }),
2299 BOX_PAT => Pat::BoxPat(BoxPat { syntax }),
2300 BIND_PAT => Pat::BindPat(BindPat { syntax }),
2301 PLACEHOLDER_PAT => Pat::PlaceholderPat(PlaceholderPat { syntax }),
2302 DOT_DOT_PAT => Pat::DotDotPat(DotDotPat { syntax }),
2303 PATH_PAT => Pat::PathPat(PathPat { syntax }),
2304 RECORD_PAT => Pat::RecordPat(RecordPat { syntax }),
2305 TUPLE_STRUCT_PAT => Pat::TupleStructPat(TupleStructPat { syntax }),
2306 TUPLE_PAT => Pat::TuplePat(TuplePat { syntax }),
2307 SLICE_PAT => Pat::SlicePat(SlicePat { syntax }),
2308 RANGE_PAT => Pat::RangePat(RangePat { syntax }),
2309 LITERAL_PAT => Pat::LiteralPat(LiteralPat { syntax }),
2314 fn syntax(&self) -> &SyntaxNode {
2316 Pat::RefPat(it) => &it.syntax,
2317 Pat::BoxPat(it) => &it.syntax,
2318 Pat::BindPat(it) => &it.syntax,
2319 Pat::PlaceholderPat(it) => &it.syntax,
2320 Pat::DotDotPat(it) => &it.syntax,
2321 Pat::PathPat(it) => &it.syntax,
2322 Pat::RecordPat(it) => &it.syntax,
2323 Pat::TupleStructPat(it) => &it.syntax,
2324 Pat::TuplePat(it) => &it.syntax,
2325 Pat::SlicePat(it) => &it.syntax,
2326 Pat::RangePat(it) => &it.syntax,
2327 Pat::LiteralPat(it) => &it.syntax,
2332 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
2334 pub(crate) syntax: SyntaxNode,
2336 impl AstNode for Path {
2337 fn can_cast(kind: SyntaxKind) -> bool {
2343 fn cast(syntax: SyntaxNode) -> Option<Self> {
2344 if Self::can_cast(syntax.kind()) {
2345 Some(Self { syntax })
2350 fn syntax(&self) -> &SyntaxNode {
2355 pub fn segment(&self) -> Option<PathSegment> {
2356 AstChildren::new(&self.syntax).next()
2358 pub fn qualifier(&self) -> Option<Path> {
2359 AstChildren::new(&self.syntax).next()
2362 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
2363 pub struct PathExpr {
2364 pub(crate) syntax: SyntaxNode,
2366 impl AstNode for PathExpr {
2367 fn can_cast(kind: SyntaxKind) -> bool {
2373 fn cast(syntax: SyntaxNode) -> Option<Self> {
2374 if Self::can_cast(syntax.kind()) {
2375 Some(Self { syntax })
2380 fn syntax(&self) -> &SyntaxNode {
2385 pub fn path(&self) -> Option<Path> {
2386 AstChildren::new(&self.syntax).next()
2389 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
2390 pub struct PathPat {
2391 pub(crate) syntax: SyntaxNode,
2393 impl AstNode for PathPat {
2394 fn can_cast(kind: SyntaxKind) -> bool {
2400 fn cast(syntax: SyntaxNode) -> Option<Self> {
2401 if Self::can_cast(syntax.kind()) {
2402 Some(Self { syntax })
2407 fn syntax(&self) -> &SyntaxNode {
2412 pub fn path(&self) -> Option<Path> {
2413 AstChildren::new(&self.syntax).next()
2416 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
2417 pub struct PathSegment {
2418 pub(crate) syntax: SyntaxNode,
2420 impl AstNode for PathSegment {
2421 fn can_cast(kind: SyntaxKind) -> bool {
2423 PATH_SEGMENT => true,
2427 fn cast(syntax: SyntaxNode) -> Option<Self> {
2428 if Self::can_cast(syntax.kind()) {
2429 Some(Self { syntax })
2434 fn syntax(&self) -> &SyntaxNode {
2439 pub fn name_ref(&self) -> Option<NameRef> {
2440 AstChildren::new(&self.syntax).next()
2442 pub fn type_arg_list(&self) -> Option<TypeArgList> {
2443 AstChildren::new(&self.syntax).next()
2445 pub fn param_list(&self) -> Option<ParamList> {
2446 AstChildren::new(&self.syntax).next()
2448 pub fn ret_type(&self) -> Option<RetType> {
2449 AstChildren::new(&self.syntax).next()
2451 pub fn path_type(&self) -> Option<PathType> {
2452 AstChildren::new(&self.syntax).next()
2455 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
2456 pub struct PathType {
2457 pub(crate) syntax: SyntaxNode,
2459 impl AstNode for PathType {
2460 fn can_cast(kind: SyntaxKind) -> bool {
2466 fn cast(syntax: SyntaxNode) -> Option<Self> {
2467 if Self::can_cast(syntax.kind()) {
2468 Some(Self { syntax })
2473 fn syntax(&self) -> &SyntaxNode {
2478 pub fn path(&self) -> Option<Path> {
2479 AstChildren::new(&self.syntax).next()
2482 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
2483 pub struct PlaceholderPat {
2484 pub(crate) syntax: SyntaxNode,
2486 impl AstNode for PlaceholderPat {
2487 fn can_cast(kind: SyntaxKind) -> bool {
2489 PLACEHOLDER_PAT => true,
2493 fn cast(syntax: SyntaxNode) -> Option<Self> {
2494 if Self::can_cast(syntax.kind()) {
2495 Some(Self { syntax })
2500 fn syntax(&self) -> &SyntaxNode {
2504 impl PlaceholderPat {}
2505 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
2506 pub struct PlaceholderType {
2507 pub(crate) syntax: SyntaxNode,
2509 impl AstNode for PlaceholderType {
2510 fn can_cast(kind: SyntaxKind) -> bool {
2512 PLACEHOLDER_TYPE => true,
2516 fn cast(syntax: SyntaxNode) -> Option<Self> {
2517 if Self::can_cast(syntax.kind()) {
2518 Some(Self { syntax })
2523 fn syntax(&self) -> &SyntaxNode {
2527 impl PlaceholderType {}
2528 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
2529 pub struct PointerType {
2530 pub(crate) syntax: SyntaxNode,
2532 impl AstNode for PointerType {
2533 fn can_cast(kind: SyntaxKind) -> bool {
2535 POINTER_TYPE => true,
2539 fn cast(syntax: SyntaxNode) -> Option<Self> {
2540 if Self::can_cast(syntax.kind()) {
2541 Some(Self { syntax })
2546 fn syntax(&self) -> &SyntaxNode {
2551 pub fn type_ref(&self) -> Option<TypeRef> {
2552 AstChildren::new(&self.syntax).next()
2555 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
2556 pub struct PrefixExpr {
2557 pub(crate) syntax: SyntaxNode,
2559 impl AstNode for PrefixExpr {
2560 fn can_cast(kind: SyntaxKind) -> bool {
2562 PREFIX_EXPR => true,
2566 fn cast(syntax: SyntaxNode) -> Option<Self> {
2567 if Self::can_cast(syntax.kind()) {
2568 Some(Self { syntax })
2573 fn syntax(&self) -> &SyntaxNode {
2578 pub fn expr(&self) -> Option<Expr> {
2579 AstChildren::new(&self.syntax).next()
2582 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
2583 pub struct RangeExpr {
2584 pub(crate) syntax: SyntaxNode,
2586 impl AstNode for RangeExpr {
2587 fn can_cast(kind: SyntaxKind) -> bool {
2593 fn cast(syntax: SyntaxNode) -> Option<Self> {
2594 if Self::can_cast(syntax.kind()) {
2595 Some(Self { syntax })
2600 fn syntax(&self) -> &SyntaxNode {
2605 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
2606 pub struct RangePat {
2607 pub(crate) syntax: SyntaxNode,
2609 impl AstNode for RangePat {
2610 fn can_cast(kind: SyntaxKind) -> bool {
2616 fn cast(syntax: SyntaxNode) -> Option<Self> {
2617 if Self::can_cast(syntax.kind()) {
2618 Some(Self { syntax })
2623 fn syntax(&self) -> &SyntaxNode {
2628 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
2629 pub struct RecordField {
2630 pub(crate) syntax: SyntaxNode,
2632 impl AstNode for RecordField {
2633 fn can_cast(kind: SyntaxKind) -> bool {
2635 RECORD_FIELD => true,
2639 fn cast(syntax: SyntaxNode) -> Option<Self> {
2640 if Self::can_cast(syntax.kind()) {
2641 Some(Self { syntax })
2646 fn syntax(&self) -> &SyntaxNode {
2651 pub fn name_ref(&self) -> Option<NameRef> {
2652 AstChildren::new(&self.syntax).next()
2654 pub fn expr(&self) -> Option<Expr> {
2655 AstChildren::new(&self.syntax).next()
2658 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
2659 pub struct RecordFieldDef {
2660 pub(crate) syntax: SyntaxNode,
2662 impl AstNode for RecordFieldDef {
2663 fn can_cast(kind: SyntaxKind) -> bool {
2665 RECORD_FIELD_DEF => true,
2669 fn cast(syntax: SyntaxNode) -> Option<Self> {
2670 if Self::can_cast(syntax.kind()) {
2671 Some(Self { syntax })
2676 fn syntax(&self) -> &SyntaxNode {
2680 impl ast::VisibilityOwner for RecordFieldDef {}
2681 impl ast::NameOwner for RecordFieldDef {}
2682 impl ast::AttrsOwner for RecordFieldDef {}
2683 impl ast::DocCommentsOwner for RecordFieldDef {}
2684 impl ast::TypeAscriptionOwner for RecordFieldDef {}
2685 impl RecordFieldDef {}
2686 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
2687 pub struct RecordFieldDefList {
2688 pub(crate) syntax: SyntaxNode,
2690 impl AstNode for RecordFieldDefList {
2691 fn can_cast(kind: SyntaxKind) -> bool {
2693 RECORD_FIELD_DEF_LIST => true,
2697 fn cast(syntax: SyntaxNode) -> Option<Self> {
2698 if Self::can_cast(syntax.kind()) {
2699 Some(Self { syntax })
2704 fn syntax(&self) -> &SyntaxNode {
2708 impl RecordFieldDefList {
2709 pub fn fields(&self) -> AstChildren<RecordFieldDef> {
2710 AstChildren::new(&self.syntax)
2713 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
2714 pub struct RecordFieldList {
2715 pub(crate) syntax: SyntaxNode,
2717 impl AstNode for RecordFieldList {
2718 fn can_cast(kind: SyntaxKind) -> bool {
2720 RECORD_FIELD_LIST => true,
2724 fn cast(syntax: SyntaxNode) -> Option<Self> {
2725 if Self::can_cast(syntax.kind()) {
2726 Some(Self { syntax })
2731 fn syntax(&self) -> &SyntaxNode {
2735 impl RecordFieldList {
2736 pub fn fields(&self) -> AstChildren<RecordField> {
2737 AstChildren::new(&self.syntax)
2739 pub fn spread(&self) -> Option<Expr> {
2740 AstChildren::new(&self.syntax).next()
2743 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
2744 pub struct RecordFieldPat {
2745 pub(crate) syntax: SyntaxNode,
2747 impl AstNode for RecordFieldPat {
2748 fn can_cast(kind: SyntaxKind) -> bool {
2750 RECORD_FIELD_PAT => true,
2754 fn cast(syntax: SyntaxNode) -> Option<Self> {
2755 if Self::can_cast(syntax.kind()) {
2756 Some(Self { syntax })
2761 fn syntax(&self) -> &SyntaxNode {
2765 impl ast::NameOwner for RecordFieldPat {}
2766 impl RecordFieldPat {
2767 pub fn pat(&self) -> Option<Pat> {
2768 AstChildren::new(&self.syntax).next()
2771 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
2772 pub struct RecordFieldPatList {
2773 pub(crate) syntax: SyntaxNode,
2775 impl AstNode for RecordFieldPatList {
2776 fn can_cast(kind: SyntaxKind) -> bool {
2778 RECORD_FIELD_PAT_LIST => true,
2782 fn cast(syntax: SyntaxNode) -> Option<Self> {
2783 if Self::can_cast(syntax.kind()) {
2784 Some(Self { syntax })
2789 fn syntax(&self) -> &SyntaxNode {
2793 impl RecordFieldPatList {
2794 pub fn record_field_pats(&self) -> AstChildren<RecordFieldPat> {
2795 AstChildren::new(&self.syntax)
2797 pub fn bind_pats(&self) -> AstChildren<BindPat> {
2798 AstChildren::new(&self.syntax)
2801 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
2802 pub struct RecordLit {
2803 pub(crate) syntax: SyntaxNode,
2805 impl AstNode for RecordLit {
2806 fn can_cast(kind: SyntaxKind) -> bool {
2812 fn cast(syntax: SyntaxNode) -> Option<Self> {
2813 if Self::can_cast(syntax.kind()) {
2814 Some(Self { syntax })
2819 fn syntax(&self) -> &SyntaxNode {
2824 pub fn path(&self) -> Option<Path> {
2825 AstChildren::new(&self.syntax).next()
2827 pub fn record_field_list(&self) -> Option<RecordFieldList> {
2828 AstChildren::new(&self.syntax).next()
2831 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
2832 pub struct RecordPat {
2833 pub(crate) syntax: SyntaxNode,
2835 impl AstNode for RecordPat {
2836 fn can_cast(kind: SyntaxKind) -> bool {
2842 fn cast(syntax: SyntaxNode) -> Option<Self> {
2843 if Self::can_cast(syntax.kind()) {
2844 Some(Self { syntax })
2849 fn syntax(&self) -> &SyntaxNode {
2854 pub fn record_field_pat_list(&self) -> Option<RecordFieldPatList> {
2855 AstChildren::new(&self.syntax).next()
2857 pub fn path(&self) -> Option<Path> {
2858 AstChildren::new(&self.syntax).next()
2861 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
2862 pub struct RefExpr {
2863 pub(crate) syntax: SyntaxNode,
2865 impl AstNode for RefExpr {
2866 fn can_cast(kind: SyntaxKind) -> bool {
2872 fn cast(syntax: SyntaxNode) -> Option<Self> {
2873 if Self::can_cast(syntax.kind()) {
2874 Some(Self { syntax })
2879 fn syntax(&self) -> &SyntaxNode {
2884 pub fn expr(&self) -> Option<Expr> {
2885 AstChildren::new(&self.syntax).next()
2888 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
2890 pub(crate) syntax: SyntaxNode,
2892 impl AstNode for RefPat {
2893 fn can_cast(kind: SyntaxKind) -> bool {
2899 fn cast(syntax: SyntaxNode) -> Option<Self> {
2900 if Self::can_cast(syntax.kind()) {
2901 Some(Self { syntax })
2906 fn syntax(&self) -> &SyntaxNode {
2911 pub fn pat(&self) -> Option<Pat> {
2912 AstChildren::new(&self.syntax).next()
2915 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
2916 pub struct ReferenceType {
2917 pub(crate) syntax: SyntaxNode,
2919 impl AstNode for ReferenceType {
2920 fn can_cast(kind: SyntaxKind) -> bool {
2922 REFERENCE_TYPE => true,
2926 fn cast(syntax: SyntaxNode) -> Option<Self> {
2927 if Self::can_cast(syntax.kind()) {
2928 Some(Self { syntax })
2933 fn syntax(&self) -> &SyntaxNode {
2937 impl ReferenceType {
2938 pub fn type_ref(&self) -> Option<TypeRef> {
2939 AstChildren::new(&self.syntax).next()
2942 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
2943 pub struct RetType {
2944 pub(crate) syntax: SyntaxNode,
2946 impl AstNode for RetType {
2947 fn can_cast(kind: SyntaxKind) -> bool {
2953 fn cast(syntax: SyntaxNode) -> Option<Self> {
2954 if Self::can_cast(syntax.kind()) {
2955 Some(Self { syntax })
2960 fn syntax(&self) -> &SyntaxNode {
2965 pub fn type_ref(&self) -> Option<TypeRef> {
2966 AstChildren::new(&self.syntax).next()
2969 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
2970 pub struct ReturnExpr {
2971 pub(crate) syntax: SyntaxNode,
2973 impl AstNode for ReturnExpr {
2974 fn can_cast(kind: SyntaxKind) -> bool {
2976 RETURN_EXPR => true,
2980 fn cast(syntax: SyntaxNode) -> Option<Self> {
2981 if Self::can_cast(syntax.kind()) {
2982 Some(Self { syntax })
2987 fn syntax(&self) -> &SyntaxNode {
2992 pub fn expr(&self) -> Option<Expr> {
2993 AstChildren::new(&self.syntax).next()
2996 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
2997 pub struct SelfParam {
2998 pub(crate) syntax: SyntaxNode,
3000 impl AstNode for SelfParam {
3001 fn can_cast(kind: SyntaxKind) -> bool {
3007 fn cast(syntax: SyntaxNode) -> Option<Self> {
3008 if Self::can_cast(syntax.kind()) {
3009 Some(Self { syntax })
3014 fn syntax(&self) -> &SyntaxNode {
3018 impl ast::TypeAscriptionOwner for SelfParam {}
3019 impl ast::AttrsOwner for SelfParam {}
3021 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
3022 pub struct SlicePat {
3023 pub(crate) syntax: SyntaxNode,
3025 impl AstNode for SlicePat {
3026 fn can_cast(kind: SyntaxKind) -> bool {
3032 fn cast(syntax: SyntaxNode) -> Option<Self> {
3033 if Self::can_cast(syntax.kind()) {
3034 Some(Self { syntax })
3039 fn syntax(&self) -> &SyntaxNode {
3044 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
3045 pub struct SliceType {
3046 pub(crate) syntax: SyntaxNode,
3048 impl AstNode for SliceType {
3049 fn can_cast(kind: SyntaxKind) -> bool {
3055 fn cast(syntax: SyntaxNode) -> Option<Self> {
3056 if Self::can_cast(syntax.kind()) {
3057 Some(Self { syntax })
3062 fn syntax(&self) -> &SyntaxNode {
3067 pub fn type_ref(&self) -> Option<TypeRef> {
3068 AstChildren::new(&self.syntax).next()
3071 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
3072 pub struct SourceFile {
3073 pub(crate) syntax: SyntaxNode,
3075 impl AstNode for SourceFile {
3076 fn can_cast(kind: SyntaxKind) -> bool {
3078 SOURCE_FILE => true,
3082 fn cast(syntax: SyntaxNode) -> Option<Self> {
3083 if Self::can_cast(syntax.kind()) {
3084 Some(Self { syntax })
3089 fn syntax(&self) -> &SyntaxNode {
3093 impl ast::ModuleItemOwner for SourceFile {}
3094 impl ast::FnDefOwner for SourceFile {}
3096 pub fn modules(&self) -> AstChildren<Module> {
3097 AstChildren::new(&self.syntax)
3100 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
3101 pub struct StaticDef {
3102 pub(crate) syntax: SyntaxNode,
3104 impl AstNode for StaticDef {
3105 fn can_cast(kind: SyntaxKind) -> bool {
3111 fn cast(syntax: SyntaxNode) -> Option<Self> {
3112 if Self::can_cast(syntax.kind()) {
3113 Some(Self { syntax })
3118 fn syntax(&self) -> &SyntaxNode {
3122 impl ast::VisibilityOwner for StaticDef {}
3123 impl ast::NameOwner for StaticDef {}
3124 impl ast::TypeParamsOwner for StaticDef {}
3125 impl ast::AttrsOwner for StaticDef {}
3126 impl ast::DocCommentsOwner for StaticDef {}
3127 impl ast::TypeAscriptionOwner for StaticDef {}
3129 pub fn body(&self) -> Option<Expr> {
3130 AstChildren::new(&self.syntax).next()
3133 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
3138 impl From<ExprStmt> for Stmt {
3139 fn from(node: ExprStmt) -> Stmt {
3140 Stmt::ExprStmt(node)
3143 impl From<LetStmt> for Stmt {
3144 fn from(node: LetStmt) -> Stmt {
3148 impl AstNode for Stmt {
3149 fn can_cast(kind: SyntaxKind) -> bool {
3151 EXPR_STMT | LET_STMT => true,
3155 fn cast(syntax: SyntaxNode) -> Option<Self> {
3156 let res = match syntax.kind() {
3157 EXPR_STMT => Stmt::ExprStmt(ExprStmt { syntax }),
3158 LET_STMT => Stmt::LetStmt(LetStmt { syntax }),
3163 fn syntax(&self) -> &SyntaxNode {
3165 Stmt::ExprStmt(it) => &it.syntax,
3166 Stmt::LetStmt(it) => &it.syntax,
3171 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
3172 pub struct StructDef {
3173 pub(crate) syntax: SyntaxNode,
3175 impl AstNode for StructDef {
3176 fn can_cast(kind: SyntaxKind) -> bool {
3182 fn cast(syntax: SyntaxNode) -> Option<Self> {
3183 if Self::can_cast(syntax.kind()) {
3184 Some(Self { syntax })
3189 fn syntax(&self) -> &SyntaxNode {
3193 impl ast::VisibilityOwner for StructDef {}
3194 impl ast::NameOwner for StructDef {}
3195 impl ast::TypeParamsOwner for StructDef {}
3196 impl ast::AttrsOwner for StructDef {}
3197 impl ast::DocCommentsOwner for StructDef {}
3199 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
3200 pub struct TokenTree {
3201 pub(crate) syntax: SyntaxNode,
3203 impl AstNode for TokenTree {
3204 fn can_cast(kind: SyntaxKind) -> bool {
3210 fn cast(syntax: SyntaxNode) -> Option<Self> {
3211 if Self::can_cast(syntax.kind()) {
3212 Some(Self { syntax })
3217 fn syntax(&self) -> &SyntaxNode {
3222 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
3223 pub struct TraitDef {
3224 pub(crate) syntax: SyntaxNode,
3226 impl AstNode for TraitDef {
3227 fn can_cast(kind: SyntaxKind) -> bool {
3233 fn cast(syntax: SyntaxNode) -> Option<Self> {
3234 if Self::can_cast(syntax.kind()) {
3235 Some(Self { syntax })
3240 fn syntax(&self) -> &SyntaxNode {
3244 impl ast::VisibilityOwner for TraitDef {}
3245 impl ast::NameOwner for TraitDef {}
3246 impl ast::AttrsOwner for TraitDef {}
3247 impl ast::DocCommentsOwner for TraitDef {}
3248 impl ast::TypeParamsOwner for TraitDef {}
3249 impl ast::TypeBoundsOwner for TraitDef {}
3251 pub fn item_list(&self) -> Option<ItemList> {
3252 AstChildren::new(&self.syntax).next()
3255 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
3256 pub struct TryBlockExpr {
3257 pub(crate) syntax: SyntaxNode,
3259 impl AstNode for TryBlockExpr {
3260 fn can_cast(kind: SyntaxKind) -> bool {
3262 TRY_BLOCK_EXPR => true,
3266 fn cast(syntax: SyntaxNode) -> Option<Self> {
3267 if Self::can_cast(syntax.kind()) {
3268 Some(Self { syntax })
3273 fn syntax(&self) -> &SyntaxNode {
3278 pub fn body(&self) -> Option<BlockExpr> {
3279 AstChildren::new(&self.syntax).next()
3282 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
3283 pub struct TryExpr {
3284 pub(crate) syntax: SyntaxNode,
3286 impl AstNode for TryExpr {
3287 fn can_cast(kind: SyntaxKind) -> bool {
3293 fn cast(syntax: SyntaxNode) -> Option<Self> {
3294 if Self::can_cast(syntax.kind()) {
3295 Some(Self { syntax })
3300 fn syntax(&self) -> &SyntaxNode {
3305 pub fn expr(&self) -> Option<Expr> {
3306 AstChildren::new(&self.syntax).next()
3309 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
3310 pub struct TupleExpr {
3311 pub(crate) syntax: SyntaxNode,
3313 impl AstNode for TupleExpr {
3314 fn can_cast(kind: SyntaxKind) -> bool {
3320 fn cast(syntax: SyntaxNode) -> Option<Self> {
3321 if Self::can_cast(syntax.kind()) {
3322 Some(Self { syntax })
3327 fn syntax(&self) -> &SyntaxNode {
3332 pub fn exprs(&self) -> AstChildren<Expr> {
3333 AstChildren::new(&self.syntax)
3336 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
3337 pub struct TupleFieldDef {
3338 pub(crate) syntax: SyntaxNode,
3340 impl AstNode for TupleFieldDef {
3341 fn can_cast(kind: SyntaxKind) -> bool {
3343 TUPLE_FIELD_DEF => true,
3347 fn cast(syntax: SyntaxNode) -> Option<Self> {
3348 if Self::can_cast(syntax.kind()) {
3349 Some(Self { syntax })
3354 fn syntax(&self) -> &SyntaxNode {
3358 impl ast::VisibilityOwner for TupleFieldDef {}
3359 impl ast::AttrsOwner for TupleFieldDef {}
3360 impl TupleFieldDef {
3361 pub fn type_ref(&self) -> Option<TypeRef> {
3362 AstChildren::new(&self.syntax).next()
3365 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
3366 pub struct TupleFieldDefList {
3367 pub(crate) syntax: SyntaxNode,
3369 impl AstNode for TupleFieldDefList {
3370 fn can_cast(kind: SyntaxKind) -> bool {
3372 TUPLE_FIELD_DEF_LIST => true,
3376 fn cast(syntax: SyntaxNode) -> Option<Self> {
3377 if Self::can_cast(syntax.kind()) {
3378 Some(Self { syntax })
3383 fn syntax(&self) -> &SyntaxNode {
3387 impl TupleFieldDefList {
3388 pub fn fields(&self) -> AstChildren<TupleFieldDef> {
3389 AstChildren::new(&self.syntax)
3392 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
3393 pub struct TuplePat {
3394 pub(crate) syntax: SyntaxNode,
3396 impl AstNode for TuplePat {
3397 fn can_cast(kind: SyntaxKind) -> bool {
3403 fn cast(syntax: SyntaxNode) -> Option<Self> {
3404 if Self::can_cast(syntax.kind()) {
3405 Some(Self { syntax })
3410 fn syntax(&self) -> &SyntaxNode {
3415 pub fn args(&self) -> AstChildren<Pat> {
3416 AstChildren::new(&self.syntax)
3419 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
3420 pub struct TupleStructPat {
3421 pub(crate) syntax: SyntaxNode,
3423 impl AstNode for TupleStructPat {
3424 fn can_cast(kind: SyntaxKind) -> bool {
3426 TUPLE_STRUCT_PAT => true,
3430 fn cast(syntax: SyntaxNode) -> Option<Self> {
3431 if Self::can_cast(syntax.kind()) {
3432 Some(Self { syntax })
3437 fn syntax(&self) -> &SyntaxNode {
3441 impl TupleStructPat {
3442 pub fn args(&self) -> AstChildren<Pat> {
3443 AstChildren::new(&self.syntax)
3445 pub fn path(&self) -> Option<Path> {
3446 AstChildren::new(&self.syntax).next()
3449 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
3450 pub struct TupleType {
3451 pub(crate) syntax: SyntaxNode,
3453 impl AstNode for TupleType {
3454 fn can_cast(kind: SyntaxKind) -> bool {
3460 fn cast(syntax: SyntaxNode) -> Option<Self> {
3461 if Self::can_cast(syntax.kind()) {
3462 Some(Self { syntax })
3467 fn syntax(&self) -> &SyntaxNode {
3472 pub fn fields(&self) -> AstChildren<TypeRef> {
3473 AstChildren::new(&self.syntax)
3476 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
3477 pub struct TypeAliasDef {
3478 pub(crate) syntax: SyntaxNode,
3480 impl AstNode for TypeAliasDef {
3481 fn can_cast(kind: SyntaxKind) -> bool {
3483 TYPE_ALIAS_DEF => true,
3487 fn cast(syntax: SyntaxNode) -> Option<Self> {
3488 if Self::can_cast(syntax.kind()) {
3489 Some(Self { syntax })
3494 fn syntax(&self) -> &SyntaxNode {
3498 impl ast::VisibilityOwner for TypeAliasDef {}
3499 impl ast::NameOwner for TypeAliasDef {}
3500 impl ast::TypeParamsOwner for TypeAliasDef {}
3501 impl ast::AttrsOwner for TypeAliasDef {}
3502 impl ast::DocCommentsOwner for TypeAliasDef {}
3503 impl ast::TypeBoundsOwner for TypeAliasDef {}
3505 pub fn type_ref(&self) -> Option<TypeRef> {
3506 AstChildren::new(&self.syntax).next()
3509 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
3510 pub struct TypeArg {
3511 pub(crate) syntax: SyntaxNode,
3513 impl AstNode for TypeArg {
3514 fn can_cast(kind: SyntaxKind) -> bool {
3520 fn cast(syntax: SyntaxNode) -> Option<Self> {
3521 if Self::can_cast(syntax.kind()) {
3522 Some(Self { syntax })
3527 fn syntax(&self) -> &SyntaxNode {
3532 pub fn type_ref(&self) -> Option<TypeRef> {
3533 AstChildren::new(&self.syntax).next()
3536 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
3537 pub struct TypeArgList {
3538 pub(crate) syntax: SyntaxNode,
3540 impl AstNode for TypeArgList {
3541 fn can_cast(kind: SyntaxKind) -> bool {
3543 TYPE_ARG_LIST => true,
3547 fn cast(syntax: SyntaxNode) -> Option<Self> {
3548 if Self::can_cast(syntax.kind()) {
3549 Some(Self { syntax })
3554 fn syntax(&self) -> &SyntaxNode {
3559 pub fn type_args(&self) -> AstChildren<TypeArg> {
3560 AstChildren::new(&self.syntax)
3562 pub fn lifetime_args(&self) -> AstChildren<LifetimeArg> {
3563 AstChildren::new(&self.syntax)
3565 pub fn assoc_type_args(&self) -> AstChildren<AssocTypeArg> {
3566 AstChildren::new(&self.syntax)
3569 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
3570 pub struct TypeBound {
3571 pub(crate) syntax: SyntaxNode,
3573 impl AstNode for TypeBound {
3574 fn can_cast(kind: SyntaxKind) -> bool {
3580 fn cast(syntax: SyntaxNode) -> Option<Self> {
3581 if Self::can_cast(syntax.kind()) {
3582 Some(Self { syntax })
3587 fn syntax(&self) -> &SyntaxNode {
3592 pub fn type_ref(&self) -> Option<TypeRef> {
3593 AstChildren::new(&self.syntax).next()
3596 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
3597 pub struct TypeBoundList {
3598 pub(crate) syntax: SyntaxNode,
3600 impl AstNode for TypeBoundList {
3601 fn can_cast(kind: SyntaxKind) -> bool {
3603 TYPE_BOUND_LIST => true,
3607 fn cast(syntax: SyntaxNode) -> Option<Self> {
3608 if Self::can_cast(syntax.kind()) {
3609 Some(Self { syntax })
3614 fn syntax(&self) -> &SyntaxNode {
3618 impl TypeBoundList {
3619 pub fn bounds(&self) -> AstChildren<TypeBound> {
3620 AstChildren::new(&self.syntax)
3623 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
3624 pub struct TypeParam {
3625 pub(crate) syntax: SyntaxNode,
3627 impl AstNode for TypeParam {
3628 fn can_cast(kind: SyntaxKind) -> bool {
3634 fn cast(syntax: SyntaxNode) -> Option<Self> {
3635 if Self::can_cast(syntax.kind()) {
3636 Some(Self { syntax })
3641 fn syntax(&self) -> &SyntaxNode {
3645 impl ast::NameOwner for TypeParam {}
3646 impl ast::AttrsOwner for TypeParam {}
3647 impl ast::TypeBoundsOwner for TypeParam {}
3649 pub fn default_type(&self) -> Option<TypeRef> {
3650 AstChildren::new(&self.syntax).next()
3653 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
3654 pub struct TypeParamList {
3655 pub(crate) syntax: SyntaxNode,
3657 impl AstNode for TypeParamList {
3658 fn can_cast(kind: SyntaxKind) -> bool {
3660 TYPE_PARAM_LIST => true,
3664 fn cast(syntax: SyntaxNode) -> Option<Self> {
3665 if Self::can_cast(syntax.kind()) {
3666 Some(Self { syntax })
3671 fn syntax(&self) -> &SyntaxNode {
3675 impl TypeParamList {
3676 pub fn type_params(&self) -> AstChildren<TypeParam> {
3677 AstChildren::new(&self.syntax)
3679 pub fn lifetime_params(&self) -> AstChildren<LifetimeParam> {
3680 AstChildren::new(&self.syntax)
3683 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
3685 ParenType(ParenType),
3686 TupleType(TupleType),
3687 NeverType(NeverType),
3689 PointerType(PointerType),
3690 ArrayType(ArrayType),
3691 SliceType(SliceType),
3692 ReferenceType(ReferenceType),
3693 PlaceholderType(PlaceholderType),
3694 FnPointerType(FnPointerType),
3696 ImplTraitType(ImplTraitType),
3697 DynTraitType(DynTraitType),
3699 impl From<ParenType> for TypeRef {
3700 fn from(node: ParenType) -> TypeRef {
3701 TypeRef::ParenType(node)
3704 impl From<TupleType> for TypeRef {
3705 fn from(node: TupleType) -> TypeRef {
3706 TypeRef::TupleType(node)
3709 impl From<NeverType> for TypeRef {
3710 fn from(node: NeverType) -> TypeRef {
3711 TypeRef::NeverType(node)
3714 impl From<PathType> for TypeRef {
3715 fn from(node: PathType) -> TypeRef {
3716 TypeRef::PathType(node)
3719 impl From<PointerType> for TypeRef {
3720 fn from(node: PointerType) -> TypeRef {
3721 TypeRef::PointerType(node)
3724 impl From<ArrayType> for TypeRef {
3725 fn from(node: ArrayType) -> TypeRef {
3726 TypeRef::ArrayType(node)
3729 impl From<SliceType> for TypeRef {
3730 fn from(node: SliceType) -> TypeRef {
3731 TypeRef::SliceType(node)
3734 impl From<ReferenceType> for TypeRef {
3735 fn from(node: ReferenceType) -> TypeRef {
3736 TypeRef::ReferenceType(node)
3739 impl From<PlaceholderType> for TypeRef {
3740 fn from(node: PlaceholderType) -> TypeRef {
3741 TypeRef::PlaceholderType(node)
3744 impl From<FnPointerType> for TypeRef {
3745 fn from(node: FnPointerType) -> TypeRef {
3746 TypeRef::FnPointerType(node)
3749 impl From<ForType> for TypeRef {
3750 fn from(node: ForType) -> TypeRef {
3751 TypeRef::ForType(node)
3754 impl From<ImplTraitType> for TypeRef {
3755 fn from(node: ImplTraitType) -> TypeRef {
3756 TypeRef::ImplTraitType(node)
3759 impl From<DynTraitType> for TypeRef {
3760 fn from(node: DynTraitType) -> TypeRef {
3761 TypeRef::DynTraitType(node)
3764 impl AstNode for TypeRef {
3765 fn can_cast(kind: SyntaxKind) -> bool {
3767 PAREN_TYPE | TUPLE_TYPE | NEVER_TYPE | PATH_TYPE | POINTER_TYPE | ARRAY_TYPE
3768 | SLICE_TYPE | REFERENCE_TYPE | PLACEHOLDER_TYPE | FN_POINTER_TYPE | FOR_TYPE
3769 | IMPL_TRAIT_TYPE | DYN_TRAIT_TYPE => true,
3773 fn cast(syntax: SyntaxNode) -> Option<Self> {
3774 let res = match syntax.kind() {
3775 PAREN_TYPE => TypeRef::ParenType(ParenType { syntax }),
3776 TUPLE_TYPE => TypeRef::TupleType(TupleType { syntax }),
3777 NEVER_TYPE => TypeRef::NeverType(NeverType { syntax }),
3778 PATH_TYPE => TypeRef::PathType(PathType { syntax }),
3779 POINTER_TYPE => TypeRef::PointerType(PointerType { syntax }),
3780 ARRAY_TYPE => TypeRef::ArrayType(ArrayType { syntax }),
3781 SLICE_TYPE => TypeRef::SliceType(SliceType { syntax }),
3782 REFERENCE_TYPE => TypeRef::ReferenceType(ReferenceType { syntax }),
3783 PLACEHOLDER_TYPE => TypeRef::PlaceholderType(PlaceholderType { syntax }),
3784 FN_POINTER_TYPE => TypeRef::FnPointerType(FnPointerType { syntax }),
3785 FOR_TYPE => TypeRef::ForType(ForType { syntax }),
3786 IMPL_TRAIT_TYPE => TypeRef::ImplTraitType(ImplTraitType { syntax }),
3787 DYN_TRAIT_TYPE => TypeRef::DynTraitType(DynTraitType { syntax }),
3792 fn syntax(&self) -> &SyntaxNode {
3794 TypeRef::ParenType(it) => &it.syntax,
3795 TypeRef::TupleType(it) => &it.syntax,
3796 TypeRef::NeverType(it) => &it.syntax,
3797 TypeRef::PathType(it) => &it.syntax,
3798 TypeRef::PointerType(it) => &it.syntax,
3799 TypeRef::ArrayType(it) => &it.syntax,
3800 TypeRef::SliceType(it) => &it.syntax,
3801 TypeRef::ReferenceType(it) => &it.syntax,
3802 TypeRef::PlaceholderType(it) => &it.syntax,
3803 TypeRef::FnPointerType(it) => &it.syntax,
3804 TypeRef::ForType(it) => &it.syntax,
3805 TypeRef::ImplTraitType(it) => &it.syntax,
3806 TypeRef::DynTraitType(it) => &it.syntax,
3811 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
3812 pub struct UnionDef {
3813 pub(crate) syntax: SyntaxNode,
3815 impl AstNode for UnionDef {
3816 fn can_cast(kind: SyntaxKind) -> bool {
3822 fn cast(syntax: SyntaxNode) -> Option<Self> {
3823 if Self::can_cast(syntax.kind()) {
3824 Some(Self { syntax })
3829 fn syntax(&self) -> &SyntaxNode {
3833 impl ast::VisibilityOwner for UnionDef {}
3834 impl ast::NameOwner for UnionDef {}
3835 impl ast::TypeParamsOwner for UnionDef {}
3836 impl ast::AttrsOwner for UnionDef {}
3837 impl ast::DocCommentsOwner for UnionDef {}
3839 pub fn record_field_def_list(&self) -> Option<RecordFieldDefList> {
3840 AstChildren::new(&self.syntax).next()
3843 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
3844 pub struct UseItem {
3845 pub(crate) syntax: SyntaxNode,
3847 impl AstNode for UseItem {
3848 fn can_cast(kind: SyntaxKind) -> bool {
3854 fn cast(syntax: SyntaxNode) -> Option<Self> {
3855 if Self::can_cast(syntax.kind()) {
3856 Some(Self { syntax })
3861 fn syntax(&self) -> &SyntaxNode {
3865 impl ast::AttrsOwner for UseItem {}
3867 pub fn use_tree(&self) -> Option<UseTree> {
3868 AstChildren::new(&self.syntax).next()
3871 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
3872 pub struct UseTree {
3873 pub(crate) syntax: SyntaxNode,
3875 impl AstNode for UseTree {
3876 fn can_cast(kind: SyntaxKind) -> bool {
3882 fn cast(syntax: SyntaxNode) -> Option<Self> {
3883 if Self::can_cast(syntax.kind()) {
3884 Some(Self { syntax })
3889 fn syntax(&self) -> &SyntaxNode {
3894 pub fn path(&self) -> Option<Path> {
3895 AstChildren::new(&self.syntax).next()
3897 pub fn use_tree_list(&self) -> Option<UseTreeList> {
3898 AstChildren::new(&self.syntax).next()
3900 pub fn alias(&self) -> Option<Alias> {
3901 AstChildren::new(&self.syntax).next()
3904 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
3905 pub struct UseTreeList {
3906 pub(crate) syntax: SyntaxNode,
3908 impl AstNode for UseTreeList {
3909 fn can_cast(kind: SyntaxKind) -> bool {
3911 USE_TREE_LIST => true,
3915 fn cast(syntax: SyntaxNode) -> Option<Self> {
3916 if Self::can_cast(syntax.kind()) {
3917 Some(Self { syntax })
3922 fn syntax(&self) -> &SyntaxNode {
3927 pub fn use_trees(&self) -> AstChildren<UseTree> {
3928 AstChildren::new(&self.syntax)
3931 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
3932 pub struct Visibility {
3933 pub(crate) syntax: SyntaxNode,
3935 impl AstNode for Visibility {
3936 fn can_cast(kind: SyntaxKind) -> bool {
3942 fn cast(syntax: SyntaxNode) -> Option<Self> {
3943 if Self::can_cast(syntax.kind()) {
3944 Some(Self { syntax })
3949 fn syntax(&self) -> &SyntaxNode {
3954 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
3955 pub struct WhereClause {
3956 pub(crate) syntax: SyntaxNode,
3958 impl AstNode for WhereClause {
3959 fn can_cast(kind: SyntaxKind) -> bool {
3961 WHERE_CLAUSE => true,
3965 fn cast(syntax: SyntaxNode) -> Option<Self> {
3966 if Self::can_cast(syntax.kind()) {
3967 Some(Self { syntax })
3972 fn syntax(&self) -> &SyntaxNode {
3977 pub fn predicates(&self) -> AstChildren<WherePred> {
3978 AstChildren::new(&self.syntax)
3981 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
3982 pub struct WherePred {
3983 pub(crate) syntax: SyntaxNode,
3985 impl AstNode for WherePred {
3986 fn can_cast(kind: SyntaxKind) -> bool {
3992 fn cast(syntax: SyntaxNode) -> Option<Self> {
3993 if Self::can_cast(syntax.kind()) {
3994 Some(Self { syntax })
3999 fn syntax(&self) -> &SyntaxNode {
4003 impl ast::TypeBoundsOwner for WherePred {}
4005 pub fn type_ref(&self) -> Option<TypeRef> {
4006 AstChildren::new(&self.syntax).next()
4009 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
4010 pub struct WhileExpr {
4011 pub(crate) syntax: SyntaxNode,
4013 impl AstNode for WhileExpr {
4014 fn can_cast(kind: SyntaxKind) -> bool {
4020 fn cast(syntax: SyntaxNode) -> Option<Self> {
4021 if Self::can_cast(syntax.kind()) {
4022 Some(Self { syntax })
4027 fn syntax(&self) -> &SyntaxNode {
4031 impl ast::LoopBodyOwner for WhileExpr {}
4033 pub fn condition(&self) -> Option<Condition> {
4034 AstChildren::new(&self.syntax).next()