1 // Copyright (C) 2020-2025 Free Software Foundation, Inc.
3 // This file is part of GCC.
5 // GCC is free software; you can redistribute it and/or modify it under
6 // the terms of the GNU General Public License as published by the Free
7 // Software Foundation; either version 3, or (at your option) any later
10 // GCC is distributed in the hope that it will be useful, but WITHOUT ANY
11 // WARRANTY; without even the implied warranty of MERCHANTABILITY or
12 // FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15 // You should have received a copy of the GNU General Public License
16 // along with GCC; see the file COPYING3. If not see
17 // <http://www.gnu.org/licenses/>.
19 #include "rust-ast-visitor.h"
20 #include "rust-ast-full-decls.h"
22 #include "rust-path.h"
23 #include "rust-token.h"
24 #include "rust-expr.h"
25 #include "rust-macro.h"
26 #include "rust-pattern.h"
27 #include "rust-stmt.h"
28 #include "rust-type.h"
34 DefaultASTVisitor::visit (AST::Crate
&crate
)
36 visit_inner_attrs (crate
);
37 for (auto &item
: crate
.items
)
42 DefaultASTVisitor::visit (AST::Token
&tok
)
46 DefaultASTVisitor::visit (AST::DelimTokenTree
&delim_tok_tree
)
48 for (auto &token
: delim_tok_tree
.get_token_trees ())
53 DefaultASTVisitor::visit (AST::AttrInputMetaItemContainer
&input
)
55 for (auto &item
: input
.get_items ())
60 DefaultASTVisitor::visit (AST::IdentifierExpr
&ident_expr
)
62 visit_outer_attrs (ident_expr
);
66 DefaultASTVisitor::visit (AST::Lifetime
&lifetime
)
70 DefaultASTVisitor::visit (AST::LifetimeParam
&lifetime_param
)
72 visit (lifetime_param
.get_outer_attribute ());
73 visit (lifetime_param
.get_lifetime ());
74 for (auto &lifetime_bound
: lifetime_param
.get_lifetime_bounds ())
75 visit (lifetime_bound
);
79 DefaultASTVisitor::visit (AST::ConstGenericParam
&const_param
)
81 visit (const_param
.get_outer_attribute ());
82 if (const_param
.has_type ())
83 visit (const_param
.get_type ());
84 if (const_param
.has_default_value ())
85 visit (const_param
.get_default_value ());
89 DefaultASTVisitor::visit (AST::PathInExpression
&path
)
91 visit_outer_attrs (path
);
92 for (auto &segment
: path
.get_segments ())
97 DefaultASTVisitor::visit (AST::TypePathSegment
&segment
)
101 DefaultASTVisitor::visit (GenericArgsBinding
&binding
)
103 visit (binding
.get_type ());
107 DefaultASTVisitor::visit (AST::TypePathSegmentGeneric
&segment
)
109 visit (segment
.get_generic_args ());
113 DefaultASTVisitor::visit (AST::TypePathFunction
&tpf
)
115 for (auto &input
: tpf
.get_params ())
117 if (tpf
.has_return_type ())
118 visit (tpf
.get_return_type ());
122 DefaultASTVisitor::visit (AST::PathIdentSegment
&segment
)
126 DefaultASTVisitor::visit (AST::TypePathSegmentFunction
&segment
)
128 visit (segment
.get_type_path_function ());
129 visit (segment
.get_ident_segment ());
133 DefaultASTVisitor::visit (AST::GenericArgs
&args
)
135 for (auto &lifetime
: args
.get_lifetime_args ())
138 for (auto &generic
: args
.get_generic_args ())
141 for (auto &binding
: args
.get_binding_args ())
146 DefaultASTVisitor::visit (AST::PathExprSegment
&segment
)
148 visit (segment
.get_ident_segment ());
149 if (segment
.has_generic_args ())
150 visit (segment
.get_generic_args ());
153 DefaultASTVisitor::visit (AST::TypePath
&path
)
155 for (auto &segment
: path
.get_segments ())
160 DefaultASTVisitor::visit (AST::QualifiedPathInExpression
&path
)
162 visit_outer_attrs (path
);
163 visit (path
.get_qualified_path_type ());
165 for (auto &segment
: path
.get_segments ())
170 DefaultASTVisitor::visit (AST::QualifiedPathType
&path
)
172 visit (path
.get_type ());
173 if (path
.has_as_clause ())
174 visit (path
.get_as_type_path ());
178 DefaultASTVisitor::visit (AST::QualifiedPathInType
&path
)
180 visit (path
.get_qualified_path_type ());
181 visit (path
.get_associated_segment ());
183 for (auto &segment
: path
.get_segments ())
188 DefaultASTVisitor::visit (AST::LiteralExpr
&expr
)
190 visit_outer_attrs (expr
);
194 DefaultASTVisitor::visit (AST::AttrInputLiteral
&attr_input
)
196 visit (attr_input
.get_literal ());
200 DefaultASTVisitor::visit (AST::AttrInputMacro
&attr_input
)
202 visit (attr_input
.get_macro ());
206 DefaultASTVisitor::visit (AST::MetaItemLitExpr
&meta_item
)
208 visit (meta_item
.get_literal ());
212 DefaultASTVisitor::visit (AST::SimplePathSegment
&segment
)
216 DefaultASTVisitor::visit (AST::SimplePath
&path
)
218 for (auto &segment
: path
.get_segments ())
223 DefaultASTVisitor::visit (AST::MetaItemPathLit
&meta_item
)
225 visit (meta_item
.get_path ());
226 visit (meta_item
.get_literal ());
230 DefaultASTVisitor::visit (AST::BorrowExpr
&expr
)
232 visit_outer_attrs (expr
);
233 visit (expr
.get_borrowed_expr ());
237 DefaultASTVisitor::visit (AST::DereferenceExpr
&expr
)
239 visit_outer_attrs (expr
);
240 visit (expr
.get_dereferenced_expr ());
244 DefaultASTVisitor::visit (AST::ErrorPropagationExpr
&expr
)
246 visit_outer_attrs (expr
);
250 DefaultASTVisitor::visit (AST::NegationExpr
&expr
)
252 visit_outer_attrs (expr
);
253 visit (expr
.get_negated_expr ());
257 DefaultASTVisitor::visit (AST::ArithmeticOrLogicalExpr
&expr
)
259 visit_outer_attrs (expr
);
260 visit (expr
.get_left_expr ());
261 visit (expr
.get_right_expr ());
265 DefaultASTVisitor::visit (AST::ComparisonExpr
&expr
)
267 visit_outer_attrs (expr
);
268 visit (expr
.get_left_expr ());
269 visit (expr
.get_right_expr ());
273 DefaultASTVisitor::visit (AST::LazyBooleanExpr
&expr
)
275 visit_outer_attrs (expr
);
276 visit (expr
.get_left_expr ());
277 visit (expr
.get_right_expr ());
281 DefaultASTVisitor::visit (AST::TypeCastExpr
&expr
)
283 visit_outer_attrs (expr
);
284 visit (expr
.get_casted_expr ());
285 visit (expr
.get_type_to_cast_to ());
289 DefaultASTVisitor::visit (AST::AssignmentExpr
&expr
)
291 visit_outer_attrs (expr
);
292 visit (expr
.get_left_expr ());
293 visit (expr
.get_right_expr ());
297 DefaultASTVisitor::visit (AST::CompoundAssignmentExpr
&expr
)
299 visit_outer_attrs (expr
);
300 visit (expr
.get_left_expr ());
301 visit (expr
.get_right_expr ());
305 DefaultASTVisitor::visit (AST::GroupedExpr
&expr
)
307 visit_outer_attrs (expr
);
308 visit_inner_attrs (expr
);
309 visit (expr
.get_expr_in_parens ());
313 DefaultASTVisitor::visit (AST::ArrayElemsValues
&elems
)
315 for (auto &value
: elems
.get_values ())
320 DefaultASTVisitor::visit (AST::ArrayElemsCopied
&elems
)
322 visit (elems
.get_elem_to_copy ());
323 visit (elems
.get_num_copies ());
327 DefaultASTVisitor::visit (AST::ArrayExpr
&expr
)
329 visit_outer_attrs (expr
);
330 visit_inner_attrs (expr
);
331 visit (expr
.get_array_elems ());
335 DefaultASTVisitor::visit (AST::ArrayIndexExpr
&expr
)
337 visit_outer_attrs (expr
);
338 visit (expr
.get_array_expr ());
339 visit (expr
.get_index_expr ());
343 DefaultASTVisitor::visit (AST::TupleExpr
&expr
)
345 visit_outer_attrs (expr
);
346 visit_inner_attrs (expr
);
347 for (auto &elem
: expr
.get_tuple_elems ())
352 DefaultASTVisitor::visit (AST::TupleIndexExpr
&expr
)
354 visit_outer_attrs (expr
);
355 visit (expr
.get_tuple_expr ());
359 DefaultASTVisitor::visit (AST::StructExprStruct
&expr
)
361 visit_outer_attrs (expr
);
362 visit_inner_attrs (expr
);
363 visit (expr
.get_struct_name ());
367 DefaultASTVisitor::visit (AST::StructExprFieldIdentifier
&field
)
371 DefaultASTVisitor::visit (AST::StructExprFieldIdentifierValue
&field
)
373 visit (field
.get_value ());
377 DefaultASTVisitor::visit (AST::StructExprFieldIndexValue
&field
)
379 visit (field
.get_value ());
383 DefaultASTVisitor::visit (AST::StructBase
&base
)
385 visit (base
.get_base_struct ());
389 DefaultASTVisitor::visit (AST::StructExprStructFields
&expr
)
391 visit_outer_attrs (expr
);
392 visit_inner_attrs (expr
);
393 if (expr
.has_struct_base ())
394 visit (expr
.get_struct_base ());
395 for (auto &field
: expr
.get_fields ())
400 DefaultASTVisitor::visit (AST::StructExprStructBase
&expr
)
402 visit_outer_attrs (expr
);
403 visit_inner_attrs (expr
);
404 visit (expr
.get_struct_base ());
408 DefaultASTVisitor::visit (AST::CallExpr
&expr
)
410 visit_outer_attrs (expr
);
411 visit (expr
.get_function_expr ());
412 for (auto ¶m
: expr
.get_params ())
417 DefaultASTVisitor::visit (AST::MethodCallExpr
&expr
)
419 visit_outer_attrs (expr
);
420 visit (expr
.get_receiver_expr ());
421 visit (expr
.get_method_name ());
422 for (auto ¶m
: expr
.get_params ())
427 DefaultASTVisitor::visit (AST::FieldAccessExpr
&expr
)
429 visit_outer_attrs (expr
);
430 visit (expr
.get_receiver_expr ());
434 DefaultASTVisitor::visit (AST::ClosureExprInner
&expr
)
436 visit_outer_attrs (expr
);
437 for (auto ¶m
: expr
.get_params ())
439 visit (expr
.get_definition_expr ());
443 DefaultASTVisitor::visit (AST::BlockExpr
&expr
)
445 visit_outer_attrs (expr
);
446 visit_inner_attrs (expr
);
447 for (auto &stmt
: expr
.get_statements ())
449 if (expr
.has_tail_expr ())
450 visit (expr
.get_tail_expr ());
454 DefaultASTVisitor::visit (AST::ClosureExprInnerTyped
&expr
)
456 visit_outer_attrs (expr
);
457 for (auto ¶m
: expr
.get_params ())
459 visit (expr
.get_return_type ());
460 visit (expr
.get_definition_block ());
464 DefaultASTVisitor::visit (AST::ClosureParam
¶m
)
466 visit_outer_attrs (param
);
467 visit (param
.get_pattern ());
468 if (param
.has_type_given ())
469 visit (param
.get_type ());
473 DefaultASTVisitor::visit (AST::ContinueExpr
&expr
)
475 visit_outer_attrs (expr
);
476 visit (expr
.get_label ());
480 DefaultASTVisitor::visit (AST::BreakExpr
&expr
)
482 visit_outer_attrs (expr
);
483 if (expr
.has_label ())
484 visit (expr
.get_label ());
486 if (expr
.has_break_expr ())
487 visit (expr
.get_break_expr ());
491 DefaultASTVisitor::visit (AST::RangeFromToExpr
&expr
)
493 visit (expr
.get_from_expr ());
494 visit (expr
.get_to_expr ());
498 DefaultASTVisitor::visit (AST::RangeFromExpr
&expr
)
500 visit (expr
.get_from_expr ());
504 DefaultASTVisitor::visit (AST::RangeToExpr
&expr
)
506 visit (expr
.get_to_expr ());
510 DefaultASTVisitor::visit (AST::RangeFullExpr
&expr
)
514 DefaultASTVisitor::visit (AST::RangeFromToInclExpr
&expr
)
516 visit (expr
.get_from_expr ());
517 visit (expr
.get_to_expr ());
521 DefaultASTVisitor::visit (AST::RangeToInclExpr
&expr
)
523 visit (expr
.get_to_expr ());
527 DefaultASTVisitor::visit (AST::ReturnExpr
&expr
)
529 visit_outer_attrs (expr
);
530 if (expr
.has_returned_expr ())
531 visit (expr
.get_returned_expr ());
535 DefaultASTVisitor::visit (AST::UnsafeBlockExpr
&expr
)
537 visit_outer_attrs (expr
);
538 visit (expr
.get_block_expr ());
542 DefaultASTVisitor::visit (AST::LoopLabel
&label
)
544 visit (label
.get_lifetime ());
548 DefaultASTVisitor::visit (AST::LoopExpr
&expr
)
550 visit_outer_attrs (expr
);
551 visit (expr
.get_loop_label ());
552 visit (expr
.get_loop_block ());
556 DefaultASTVisitor::visit (AST::WhileLoopExpr
&expr
)
558 visit_outer_attrs (expr
);
559 visit (expr
.get_predicate_expr ());
560 visit (expr
.get_loop_label ());
561 visit (expr
.get_loop_block ());
565 DefaultASTVisitor::visit (AST::WhileLetLoopExpr
&expr
)
567 visit_outer_attrs (expr
);
568 for (auto &pattern
: expr
.get_patterns ())
570 visit (expr
.get_scrutinee_expr ());
571 visit (expr
.get_loop_label ());
572 visit (expr
.get_loop_block ());
576 DefaultASTVisitor::visit (AST::ForLoopExpr
&expr
)
578 visit_outer_attrs (expr
);
579 visit (expr
.get_pattern ());
580 visit (expr
.get_iterator_expr ());
581 visit (expr
.get_loop_label ());
582 visit (expr
.get_loop_block ());
586 DefaultASTVisitor::visit (AST::IfExpr
&expr
)
588 visit_outer_attrs (expr
);
589 visit (expr
.get_condition_expr ());
590 visit (expr
.get_if_block ());
594 DefaultASTVisitor::visit (AST::IfExprConseqElse
&expr
)
596 visit (reinterpret_cast<AST::IfExpr
&> (expr
));
597 visit (expr
.get_else_block ());
601 DefaultASTVisitor::visit (AST::IfLetExpr
&expr
)
603 visit_outer_attrs (expr
);
604 for (auto &pattern
: expr
.get_patterns ())
606 visit (expr
.get_value_expr ());
607 visit (expr
.get_if_block ());
611 DefaultASTVisitor::visit (AST::IfLetExprConseqElse
&expr
)
613 visit (reinterpret_cast<AST::IfLetExpr
&> (expr
));
614 visit (expr
.get_else_block ());
618 DefaultASTVisitor::visit (AST::MatchArm
&arm
)
620 visit_outer_attrs (arm
);
621 for (auto &pattern
: arm
.get_patterns ())
623 if (arm
.has_match_arm_guard ())
624 visit (arm
.get_guard_expr ());
628 DefaultASTVisitor::visit (AST::MatchCase
&arm
)
630 visit (arm
.get_arm ());
631 visit (arm
.get_expr ());
635 DefaultASTVisitor::visit (AST::MatchExpr
&expr
)
637 visit_outer_attrs (expr
);
638 visit_inner_attrs (expr
);
639 visit (expr
.get_scrutinee_expr ());
640 for (auto &arm
: expr
.get_match_cases ())
645 DefaultASTVisitor::visit (AST::AwaitExpr
&expr
)
647 visit_outer_attrs (expr
);
648 visit (expr
.get_awaited_expr ());
652 DefaultASTVisitor::visit (AST::AsyncBlockExpr
&expr
)
654 visit_outer_attrs (expr
);
655 visit (expr
.get_block_expr ());
659 DefaultASTVisitor::visit (AST::TypeParam
¶m
)
661 visit (param
.get_outer_attribute ());
662 for (auto &bound
: param
.get_type_param_bounds ())
664 if (param
.has_type ())
665 visit (param
.get_type ());
669 DefaultASTVisitor::visit (AST::LifetimeWhereClauseItem
&item
)
671 visit (item
.get_lifetime ());
672 for (auto &bound
: item
.get_lifetime_bounds ())
677 DefaultASTVisitor::visit (AST::TypeBoundWhereClauseItem
&item
)
679 for (auto &lifetime
: item
.get_for_lifetimes ())
681 visit (item
.get_type ());
682 for (auto ¶m
: item
.get_type_param_bounds ())
687 DefaultASTVisitor::visit (AST::Visibility
&vis
)
689 visit (vis
.get_path ());
693 DefaultASTVisitor::visit (AST::FunctionQualifiers
&qualifiers
)
697 DefaultASTVisitor::visit (AST::WhereClause
&where
)
699 for (auto &item
: where
.get_items ())
703 DefaultASTVisitor::visit (AST::FunctionParam
¶m
)
705 visit_outer_attrs (param
);
706 if (param
.has_name ())
707 visit (param
.get_pattern ());
709 visit (param
.get_type ());
713 DefaultASTVisitor::visit (AST::SelfParam
¶m
)
715 visit_outer_attrs (param
);
717 if (param
.has_lifetime ())
718 visit (param
.get_lifetime ());
720 if (param
.has_type ())
721 visit (param
.get_type ());
725 DefaultASTVisitor::visit (AST::Module
&module
)
727 visit_outer_attrs (module
);
728 visit (module
.get_visibility ());
729 visit_inner_attrs (module
);
730 for (auto &item
: module
.get_items ())
735 DefaultASTVisitor::visit (AST::ExternCrate
&crate
)
737 visit_outer_attrs (crate
);
738 visit (crate
.get_visibility ());
742 DefaultASTVisitor::visit (AST::UseTreeGlob
&use_tree
)
744 visit (use_tree
.get_path ());
748 DefaultASTVisitor::visit (AST::UseTreeList
&use_tree
)
750 visit (use_tree
.get_path ());
754 DefaultASTVisitor::visit (AST::UseTreeRebind
&use_tree
)
756 visit (use_tree
.get_path ());
760 DefaultASTVisitor::visit (AST::UseDeclaration
&use_decl
)
762 visit (use_decl
.get_tree ());
766 DefaultASTVisitor::visit (AST::Function
&function
)
768 visit_outer_attrs (function
);
769 visit (function
.get_visibility ());
770 visit (function
.get_qualifiers ());
771 for (auto &generic
: function
.get_generic_params ())
773 if (function
.has_self_param ())
774 visit (function
.get_self_param ());
775 for (auto ¶m
: function
.get_function_params ())
777 if (function
.has_return_type ())
778 visit (function
.get_return_type ());
779 if (function
.has_where_clause ())
780 visit (function
.get_where_clause ());
781 if (function
.has_body ())
782 visit (*function
.get_definition ());
786 DefaultASTVisitor::visit (AST::TypeAlias
&type_alias
)
788 visit_outer_attrs (type_alias
);
789 visit (type_alias
.get_visibility ());
790 for (auto &generic
: type_alias
.get_generic_params ())
792 if (type_alias
.has_where_clause ())
793 visit (type_alias
.get_where_clause ());
794 visit (type_alias
.get_type_aliased ());
798 DefaultASTVisitor::visit (AST::StructField
&field
)
800 visit_outer_attrs (field
);
801 visit (field
.get_visibility ());
802 visit (field
.get_field_type ());
806 DefaultASTVisitor::visit (AST::StructStruct
&struct_item
)
808 visit_outer_attrs (struct_item
);
809 visit (struct_item
.get_visibility ());
810 for (auto &generic
: struct_item
.get_generic_params ())
812 if (struct_item
.has_where_clause ())
813 visit (struct_item
.get_where_clause ());
814 for (auto &field
: struct_item
.get_fields ())
819 DefaultASTVisitor::visit (AST::TupleField
&field
)
821 visit_outer_attrs (field
);
822 visit (field
.get_visibility ());
823 visit (field
.get_field_type ());
827 DefaultASTVisitor::visit (AST::TupleStruct
&tuple_struct
)
829 visit_outer_attrs (tuple_struct
);
830 visit (tuple_struct
.get_visibility ());
831 for (auto &generic
: tuple_struct
.get_generic_params ())
833 if (tuple_struct
.has_where_clause ())
834 visit (tuple_struct
.get_where_clause ());
835 for (auto &field
: tuple_struct
.get_fields ())
840 DefaultASTVisitor::visit (AST::EnumItem
&item
)
842 visit_outer_attrs (item
);
843 visit (item
.get_visibility ());
847 DefaultASTVisitor::visit (AST::EnumItemTuple
&item
)
849 visit (reinterpret_cast<EnumItem
&> (item
));
850 for (auto &field
: item
.get_tuple_fields ())
855 DefaultASTVisitor::visit (AST::EnumItemStruct
&item
)
857 visit (reinterpret_cast<EnumItem
&> (item
));
858 for (auto &field
: item
.get_struct_fields ())
863 DefaultASTVisitor::visit (AST::EnumItemDiscriminant
&item
)
865 visit (reinterpret_cast<EnumItem
&> (item
));
866 visit (item
.get_expr ());
870 DefaultASTVisitor::visit (AST::Enum
&enum_item
)
872 visit_outer_attrs (enum_item
);
873 visit (enum_item
.get_visibility ());
874 for (auto &generic
: enum_item
.get_generic_params ())
876 if (enum_item
.has_where_clause ())
877 visit (enum_item
.get_where_clause ());
878 for (auto &item
: enum_item
.get_variants ())
883 DefaultASTVisitor::visit (AST::Union
&union_item
)
885 visit_outer_attrs (union_item
);
886 visit (union_item
.get_visibility ());
887 for (auto &generic
: union_item
.get_generic_params ())
889 if (union_item
.has_where_clause ())
890 visit (union_item
.get_where_clause ());
891 for (auto &variant
: union_item
.get_variants ())
896 DefaultASTVisitor::visit (AST::ConstantItem
&const_item
)
898 visit_outer_attrs (const_item
);
899 visit (const_item
.get_visibility ());
900 visit (const_item
.get_type ());
901 if (const_item
.has_expr ())
902 visit (const_item
.get_expr ());
906 DefaultASTVisitor::visit (AST::StaticItem
&static_item
)
908 visit_outer_attrs (static_item
);
909 visit (static_item
.get_visibility ());
910 visit (static_item
.get_type ());
911 visit (static_item
.get_expr ());
915 DefaultASTVisitor::visit (AST::TraitItemConst
&item
)
917 visit_outer_attrs (item
);
918 visit (item
.get_type ());
919 if (item
.has_expr ())
920 visit (item
.get_expr ());
924 DefaultASTVisitor::visit (AST::TraitItemType
&item
)
926 visit_outer_attrs (item
);
927 for (auto &bound
: item
.get_type_param_bounds ())
932 DefaultASTVisitor::visit (AST::Trait
&trait
)
934 visit_outer_attrs (trait
);
935 visit (trait
.get_visibility ());
937 visit_inner_attrs (trait
);
939 for (auto &generic
: trait
.get_generic_params ())
942 if (trait
.has_where_clause ())
943 visit (trait
.get_where_clause ());
945 for (auto &bound
: trait
.get_type_param_bounds ())
948 for (auto &item
: trait
.get_trait_items ())
953 DefaultASTVisitor::visit (AST::InherentImpl
&impl
)
955 visit_outer_attrs (impl
);
956 visit (impl
.get_visibility ());
958 for (auto &generic
: impl
.get_generic_params ())
960 if (impl
.has_where_clause ())
961 visit (impl
.get_where_clause ());
962 visit (impl
.get_type ());
963 visit_inner_attrs (impl
);
964 for (auto &item
: impl
.get_impl_items ())
969 DefaultASTVisitor::visit (AST::TraitImpl
&impl
)
971 visit_outer_attrs (impl
);
972 visit (impl
.get_visibility ());
974 for (auto &generic
: impl
.get_generic_params ())
976 if (impl
.has_where_clause ())
977 visit (impl
.get_where_clause ());
978 visit (impl
.get_type ());
979 visit_inner_attrs (impl
);
980 for (auto &item
: impl
.get_impl_items ())
985 DefaultASTVisitor::visit (AST::ExternalTypeItem
&item
)
987 visit_outer_attrs (item
);
988 visit (item
.get_visibility ());
992 DefaultASTVisitor::visit (AST::ExternalStaticItem
&item
)
994 visit_outer_attrs (item
);
995 visit (item
.get_visibility ());
996 visit (item
.get_type ());
1000 DefaultASTVisitor::visit (AST::NamedFunctionParam
¶m
)
1002 visit_outer_attrs (param
);
1003 if (!param
.is_variadic ())
1004 visit (param
.get_type ());
1008 DefaultASTVisitor::visit (AST::ExternBlock
&block
)
1010 visit_outer_attrs (block
);
1011 visit (block
.get_visibility ());
1012 visit_inner_attrs (block
);
1013 for (auto &item
: block
.get_extern_items ())
1018 DefaultASTVisitor::visit (AST::MacroMatchFragment
&match
)
1022 DefaultASTVisitor::visit (AST::MacroMatchRepetition
&match
)
1024 for (auto &m
: match
.get_matches ())
1029 DefaultASTVisitor::visit (AST::MacroMatcher
&matcher
)
1031 for (auto &m
: matcher
.get_matches ())
1036 DefaultASTVisitor::visit (AST::MacroTranscriber
&transcriber
)
1038 visit (transcriber
.get_token_tree ());
1042 DefaultASTVisitor::visit (AST::MacroRule
&rule
)
1044 visit (rule
.get_matcher ());
1045 visit (rule
.get_transcriber ());
1048 DefaultASTVisitor::visit (AST::MacroRulesDefinition
&rules_def
)
1050 visit_outer_attrs (rules_def
);
1051 for (auto &rule
: rules_def
.get_macro_rules ())
1056 DefaultASTVisitor::visit (AST::MacroInvocData
&data
)
1058 visit (data
.get_path ());
1059 visit (data
.get_delim_tok_tree ());
1062 DefaultASTVisitor::visit (AST::MacroInvocation
¯o_invoc
)
1064 visit_outer_attrs (macro_invoc
);
1065 visit (macro_invoc
.get_invoc_data ());
1069 DefaultASTVisitor::visit (AST::MetaItemPath
&meta_item
)
1071 visit (meta_item
.get_path ());
1075 DefaultASTVisitor::visit (AST::MetaItemSeq
&meta_item
)
1077 visit (meta_item
.get_path ());
1078 for (auto &inner
: meta_item
.get_seq ())
1083 DefaultASTVisitor::visit (AST::MetaWord
&meta_item
)
1087 DefaultASTVisitor::visit (AST::MetaNameValueStr
&meta_item
)
1091 DefaultASTVisitor::visit (AST::MetaListPaths
&meta_item
)
1093 for (auto &path
: meta_item
.get_paths ())
1098 DefaultASTVisitor::visit (AST::MetaListNameValueStr
&meta_item
)
1100 for (auto &str
: meta_item
.get_values ())
1105 DefaultASTVisitor::visit (AST::LiteralPattern
&pattern
)
1109 DefaultASTVisitor::visit (AST::IdentifierPattern
&pattern
)
1111 if (pattern
.has_pattern_to_bind ())
1112 visit (pattern
.get_pattern_to_bind ());
1116 DefaultASTVisitor::visit (AST::WildcardPattern
&pattern
)
1120 DefaultASTVisitor::visit (AST::RestPattern
&pattern
)
1124 DefaultASTVisitor::visit (AST::RangePatternBoundLiteral
&bound
)
1128 DefaultASTVisitor::visit (AST::RangePatternBoundPath
&bound
)
1130 visit (bound
.get_path ());
1134 DefaultASTVisitor::visit (AST::RangePatternBoundQualPath
&bound
)
1136 visit (bound
.get_qualified_path ());
1140 DefaultASTVisitor::visit (AST::RangePattern
&pattern
)
1142 if (pattern
.get_has_lower_bound ())
1143 visit (pattern
.get_lower_bound ());
1144 if (pattern
.get_has_upper_bound ())
1145 visit (pattern
.get_upper_bound ());
1149 DefaultASTVisitor::visit (AST::ReferencePattern
&pattern
)
1151 visit (pattern
.get_referenced_pattern ());
1155 DefaultASTVisitor::visit (AST::StructPatternFieldTuplePat
&field
)
1157 visit_outer_attrs (field
);
1158 visit (field
.get_index_pattern ());
1162 DefaultASTVisitor::visit (AST::StructPatternFieldIdentPat
&field
)
1164 visit_outer_attrs (field
);
1165 visit (field
.get_ident_pattern ());
1169 DefaultASTVisitor::visit (AST::StructPatternFieldIdent
&field
)
1171 visit_outer_attrs (field
);
1175 DefaultASTVisitor::visit (AST::StructPatternElements
&spe
)
1177 for (auto &field
: spe
.get_struct_pattern_fields ())
1179 for (auto &attribute
: spe
.get_etc_outer_attrs ())
1184 DefaultASTVisitor::visit (AST::StructPattern
&pattern
)
1186 visit (pattern
.get_path ());
1187 visit (pattern
.get_struct_pattern_elems ());
1191 DefaultASTVisitor::visit (AST::TupleStructItemsNoRange
&tuple_items
)
1193 for (auto &pattern
: tuple_items
.get_patterns ())
1198 DefaultASTVisitor::visit (AST::TupleStructItemsRange
&tuple_items
)
1200 for (auto &lower
: tuple_items
.get_lower_patterns ())
1202 for (auto &upper
: tuple_items
.get_upper_patterns ())
1207 DefaultASTVisitor::visit (AST::TupleStructPattern
&pattern
)
1209 visit (pattern
.get_path ());
1210 visit (pattern
.get_items ());
1214 DefaultASTVisitor::visit (AST::TuplePatternItemsMultiple
&tuple_items
)
1216 for (auto &pattern
: tuple_items
.get_patterns ())
1221 DefaultASTVisitor::visit (AST::TuplePatternItemsRanged
&tuple_items
)
1223 for (auto &lower
: tuple_items
.get_lower_patterns ())
1225 for (auto &upper
: tuple_items
.get_upper_patterns ())
1230 DefaultASTVisitor::visit (AST::TuplePattern
&pattern
)
1232 visit (pattern
.get_items ());
1236 DefaultASTVisitor::visit (AST::GroupedPattern
&pattern
)
1238 visit (pattern
.get_pattern_in_parens ());
1242 DefaultASTVisitor::visit (AST::SlicePattern
&pattern
)
1244 for (auto &item
: pattern
.get_items ())
1249 DefaultASTVisitor::visit (AST::AltPattern
&pattern
)
1251 for (auto &alt
: pattern
.get_alts ())
1256 DefaultASTVisitor::visit (AST::EmptyStmt
&stmt
)
1260 DefaultASTVisitor::visit (AST::LetStmt
&stmt
)
1262 visit_outer_attrs (stmt
);
1263 visit (stmt
.get_pattern ());
1264 if (stmt
.has_type ())
1265 visit (stmt
.get_type ());
1266 if (stmt
.has_init_expr ())
1267 visit (stmt
.get_init_expr ());
1271 DefaultASTVisitor::visit (AST::ExprStmt
&stmt
)
1273 visit (stmt
.get_expr ());
1277 DefaultASTVisitor::visit (AST::TraitBound
&bound
)
1279 for (auto &lifetime
: bound
.get_for_lifetimes ())
1281 visit (bound
.get_type_path ());
1285 DefaultASTVisitor::visit (AST::ImplTraitType
&type
)
1287 for (auto &bound
: type
.get_type_param_bounds ())
1292 DefaultASTVisitor::visit (AST::TraitObjectType
&type
)
1294 for (auto &bound
: type
.get_type_param_bounds ())
1299 DefaultASTVisitor::visit (AST::ParenthesisedType
&type
)
1301 visit (type
.get_type_in_parens ());
1305 DefaultASTVisitor::visit (AST::ImplTraitTypeOneBound
&type
)
1307 visit (type
.get_trait_bound ());
1311 DefaultASTVisitor::visit (AST::TraitObjectTypeOneBound
&type
)
1313 visit (type
.get_trait_bound ());
1317 DefaultASTVisitor::visit (AST::TupleType
&type
)
1319 for (auto &elem
: type
.get_elems ())
1324 DefaultASTVisitor::visit (AST::NeverType
&type
)
1328 DefaultASTVisitor::visit (AST::RawPointerType
&type
)
1330 visit (type
.get_type_pointed_to ());
1334 DefaultASTVisitor::visit (AST::ReferenceType
&type
)
1336 visit (type
.get_lifetime ());
1337 visit (type
.get_base_type ());
1341 DefaultASTVisitor::visit (AST::ArrayType
&type
)
1343 visit (type
.get_elem_type ());
1344 visit (type
.get_size_expr ());
1348 DefaultASTVisitor::visit (AST::SliceType
&type
)
1350 visit (type
.get_elem_type ());
1354 DefaultASTVisitor::visit (AST::InferredType
&type
)
1358 DefaultASTVisitor::visit (AST::MaybeNamedParam
¶m
)
1360 visit_outer_attrs (param
);
1361 visit (param
.get_type ());
1365 DefaultASTVisitor::visit (AST::BareFunctionType
&type
)
1367 for (auto &lifetime
: type
.get_for_lifetimes ())
1369 visit (type
.get_function_qualifiers ());
1370 for (auto ¶m
: type
.get_function_params ())
1372 if (type
.is_variadic ())
1373 for (auto attr
: type
.get_variadic_attr ())
1375 if (type
.has_return_type ())
1376 visit (type
.get_return_type ());
1380 DefaultASTVisitor::visit (AST::FormatArgs
&)
1382 // FIXME: Do we have anything to do? any subnodes to visit? Probably, right?
1386 DefaultASTVisitor::visit (AST::VariadicParam
¶m
)
1388 if (param
.has_pattern ())
1389 visit (param
.get_pattern ());
1393 ContextualASTVisitor::visit (AST::Crate
&crate
)
1395 push_context (Context::CRATE
);
1396 DefaultASTVisitor::visit (crate
);
1401 ContextualASTVisitor::visit (AST::InherentImpl
&impl
)
1403 push_context (Context::INHERENT_IMPL
);
1404 DefaultASTVisitor::visit (impl
);
1409 ContextualASTVisitor::visit (AST::TraitImpl
&impl
)
1411 push_context (Context::TRAIT_IMPL
);
1412 DefaultASTVisitor::visit (impl
);
1417 ContextualASTVisitor::visit (AST::Trait
&trait
)
1419 push_context (Context::TRAIT
);
1420 DefaultASTVisitor::visit (trait
);