pub trait Visitor<'v>: Sized {
    type Map: Map<'v> = <Self::NestedFilter as NestedFilter<'v>>::Map;
    type NestedFilter: NestedFilter<'v> = None;

Show 59 methods fn nested_visit_map(&mut self) -> Self::Map { ... } fn visit_nested_item(&mut self, id: ItemId) { ... } fn visit_nested_trait_item(&mut self, id: TraitItemId) { ... } fn visit_nested_impl_item(&mut self, id: ImplItemId) { ... } fn visit_nested_foreign_item(&mut self, id: ForeignItemId) { ... } fn visit_nested_body(&mut self, id: BodyId) { ... } fn visit_param(&mut self, param: &'v Param<'v>) { ... } fn visit_item(&mut self, i: &'v Item<'v>) { ... } fn visit_body(&mut self, b: &'v Body<'v>) { ... } fn visit_id(&mut self, _hir_id: HirId) { ... } fn visit_name(&mut self, _name: Symbol) { ... } fn visit_ident(&mut self, ident: Ident) { ... } fn visit_mod(&mut self, m: &'v Mod<'v>, _s: Span, n: HirId) { ... } fn visit_foreign_item(&mut self, i: &'v ForeignItem<'v>) { ... } fn visit_local(&mut self, l: &'v Local<'v>) { ... } fn visit_block(&mut self, b: &'v Block<'v>) { ... } fn visit_stmt(&mut self, s: &'v Stmt<'v>) { ... } fn visit_arm(&mut self, a: &'v Arm<'v>) { ... } fn visit_pat(&mut self, p: &'v Pat<'v>) { ... } fn visit_pat_field(&mut self, f: &'v PatField<'v>) { ... } fn visit_array_length(&mut self, len: &'v ArrayLen) { ... } fn visit_anon_const(&mut self, c: &'v AnonConst) { ... } fn visit_expr(&mut self, ex: &'v Expr<'v>) { ... } fn visit_let_expr(&mut self, lex: &'v Let<'v>) { ... } fn visit_expr_field(&mut self, field: &'v ExprField<'v>) { ... } fn visit_ty(&mut self, t: &'v Ty<'v>) { ... } fn visit_generic_param(&mut self, p: &'v GenericParam<'v>) { ... } fn visit_const_param_default(&mut self, _param: HirId, ct: &'v AnonConst) { ... } fn visit_generics(&mut self, g: &'v Generics<'v>) { ... } fn visit_where_predicate(&mut self, predicate: &'v WherePredicate<'v>) { ... } fn visit_fn_ret_ty(&mut self, ret_ty: &'v FnRetTy<'v>) { ... } fn visit_fn_decl(&mut self, fd: &'v FnDecl<'v>) { ... } fn visit_fn(
        &mut self,
        fk: FnKind<'v>,
        fd: &'v FnDecl<'v>,
        b: BodyId,
        _: Span,
        id: HirId
    ) { ... } fn visit_use(&mut self, path: &'v UsePath<'v>, hir_id: HirId) { ... } fn visit_trait_item(&mut self, ti: &'v TraitItem<'v>) { ... } fn visit_trait_item_ref(&mut self, ii: &'v TraitItemRef) { ... } fn visit_impl_item(&mut self, ii: &'v ImplItem<'v>) { ... } fn visit_foreign_item_ref(&mut self, ii: &'v ForeignItemRef) { ... } fn visit_impl_item_ref(&mut self, ii: &'v ImplItemRef) { ... } fn visit_trait_ref(&mut self, t: &'v TraitRef<'v>) { ... } fn visit_param_bound(&mut self, bounds: &'v GenericBound<'v>) { ... } fn visit_poly_trait_ref(&mut self, t: &'v PolyTraitRef<'v>) { ... } fn visit_variant_data(&mut self, s: &'v VariantData<'v>) { ... } fn visit_field_def(&mut self, s: &'v FieldDef<'v>) { ... } fn visit_enum_def(&mut self, enum_definition: &'v EnumDef<'v>, item_id: HirId) { ... } fn visit_variant(&mut self, v: &'v Variant<'v>) { ... } fn visit_label(&mut self, label: &'v Label) { ... } fn visit_infer(&mut self, inf: &'v InferArg) { ... } fn visit_generic_arg(&mut self, generic_arg: &'v GenericArg<'v>) { ... } fn visit_lifetime(&mut self, lifetime: &'v Lifetime) { ... } fn visit_qpath(&mut self, qpath: &'v QPath<'v>, id: HirId, _span: Span) { ... } fn visit_path(&mut self, path: &Path<'v>, _id: HirId) { ... } fn visit_path_segment(&mut self, path_segment: &'v PathSegment<'v>) { ... } fn visit_generic_args(&mut self, generic_args: &'v GenericArgs<'v>) { ... } fn visit_assoc_type_binding(&mut self, type_binding: &'v TypeBinding<'v>) { ... } fn visit_attribute(&mut self, _attr: &'v Attribute) { ... } fn visit_associated_item_kind(&mut self, kind: &'v AssocItemKind) { ... } fn visit_defaultness(&mut self, defaultness: &'v Defaultness) { ... } fn visit_inline_asm(&mut self, asm: &'v InlineAsm<'v>, id: HirId) { ... }
}
Expand description

Each method of the Visitor trait is a hook to be potentially overridden. Each method’s default implementation recursively visits the substructure of the input via the corresponding walk method; e.g., the visit_mod method by default calls intravisit::walk_mod.

Note that this visitor does NOT visit nested items by default (this is why the module is called intravisit, to distinguish it from the AST’s visit module, which acts differently). If you simply want to visit all items in the crate in some order, you should call tcx.hir().visit_all_item_likes_in_crate. Otherwise, see the comment on visit_nested_item for details on how to visit nested items.

If you want to ensure that your code handles every variant explicitly, you need to override each method. (And you also need to monitor future changes to Visitor in case a new method with a new default implementation gets introduced.)

Provided Associated Types§

Override this type to control which nested HIR are visited; see NestedFilter for details. If you override this type, you must also override nested_visit_map.

If for some reason you want the nested behavior, but don’t have a Map at your disposal: then override the visit_nested_XXX methods. If a new visit_nested_XXX variant is added in the future, it will cause a panic which can be detected and fixed appropriately.

Provided Methods§

If type NestedFilter is set to visit nested items, this method must also be overridden to provide a map to retrieve nested items.

Invoked when a nested item is encountered. By default, when Self::NestedFilter is nested_filter::None, this method does nothing. You probably don’t want to override this method – instead, override Self::NestedFilter or use the “shallow” or “deep” visit patterns described on itemlikevisit::ItemLikeVisitor. The only reason to override this method is if you want a nested pattern but cannot supply a Map; see nested_visit_map for advice.

Like visit_nested_item(), but for trait items. See visit_nested_item() for advice on when to override this method.

Like visit_nested_item(), but for impl items. See visit_nested_item() for advice on when to override this method.

Like visit_nested_item(), but for foreign items. See visit_nested_item() for advice on when to override this method.

Invoked to visit the body of a function, method or closure. Like visit_nested_item, does nothing by default unless you override Self::NestedFilter.

Visits the top-level item and (optionally) nested items / impl items. See visit_nested_item for details.

Implementors§