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: LocalDefId
    ) { ... } 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§

source

type Map: Map<'v> = <Self::NestedFilter as NestedFilter<'v>>::Map

source

type NestedFilter: NestedFilter<'v> = None

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§

source

fn nested_visit_map(&mut self) -> Self::Map

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

source

fn visit_nested_item(&mut self, id: ItemId)

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.

source

fn visit_nested_trait_item(&mut self, id: TraitItemId)

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

source

fn visit_nested_impl_item(&mut self, id: ImplItemId)

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

source

fn visit_nested_foreign_item(&mut self, id: ForeignItemId)

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

source

fn visit_nested_body(&mut self, id: BodyId)

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

source

fn visit_param(&mut self, param: &'v Param<'v>)

source

fn visit_item(&mut self, i: &'v Item<'v>)

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

source

fn visit_body(&mut self, b: &'v Body<'v>)

source

fn visit_id(&mut self, _hir_id: HirId)

source

fn visit_name(&mut self, _name: Symbol)

source

fn visit_ident(&mut self, ident: Ident)

source

fn visit_mod(&mut self, m: &'v Mod<'v>, _s: Span, n: HirId)

source

fn visit_foreign_item(&mut self, i: &'v ForeignItem<'v>)

source

fn visit_local(&mut self, l: &'v Local<'v>)

source

fn visit_block(&mut self, b: &'v Block<'v>)

source

fn visit_stmt(&mut self, s: &'v Stmt<'v>)

source

fn visit_arm(&mut self, a: &'v Arm<'v>)

source

fn visit_pat(&mut self, p: &'v Pat<'v>)

source

fn visit_pat_field(&mut self, f: &'v PatField<'v>)

source

fn visit_array_length(&mut self, len: &'v ArrayLen)

source

fn visit_anon_const(&mut self, c: &'v AnonConst)

source

fn visit_expr(&mut self, ex: &'v Expr<'v>)

source

fn visit_let_expr(&mut self, lex: &'v Let<'v>)

source

fn visit_expr_field(&mut self, field: &'v ExprField<'v>)

source

fn visit_ty(&mut self, t: &'v Ty<'v>)

source

fn visit_generic_param(&mut self, p: &'v GenericParam<'v>)

source

fn visit_const_param_default(&mut self, _param: HirId, ct: &'v AnonConst)

source

fn visit_generics(&mut self, g: &'v Generics<'v>)

source

fn visit_where_predicate(&mut self, predicate: &'v WherePredicate<'v>)

source

fn visit_fn_ret_ty(&mut self, ret_ty: &'v FnRetTy<'v>)

source

fn visit_fn_decl(&mut self, fd: &'v FnDecl<'v>)

source

fn visit_fn(
    &mut self,
    fk: FnKind<'v>,
    fd: &'v FnDecl<'v>,
    b: BodyId,
    _: Span,
    id: LocalDefId
)

source

fn visit_use(&mut self, path: &'v UsePath<'v>, hir_id: HirId)

source

fn visit_trait_item(&mut self, ti: &'v TraitItem<'v>)

source

fn visit_trait_item_ref(&mut self, ii: &'v TraitItemRef)

source

fn visit_impl_item(&mut self, ii: &'v ImplItem<'v>)

source

fn visit_foreign_item_ref(&mut self, ii: &'v ForeignItemRef)

source

fn visit_impl_item_ref(&mut self, ii: &'v ImplItemRef)

source

fn visit_trait_ref(&mut self, t: &'v TraitRef<'v>)

source

fn visit_param_bound(&mut self, bounds: &'v GenericBound<'v>)

source

fn visit_poly_trait_ref(&mut self, t: &'v PolyTraitRef<'v>)

source

fn visit_variant_data(&mut self, s: &'v VariantData<'v>)

source

fn visit_field_def(&mut self, s: &'v FieldDef<'v>)

source

fn visit_enum_def(&mut self, enum_definition: &'v EnumDef<'v>, item_id: HirId)

source

fn visit_variant(&mut self, v: &'v Variant<'v>)

source

fn visit_label(&mut self, label: &'v Label)

source

fn visit_infer(&mut self, inf: &'v InferArg)

source

fn visit_generic_arg(&mut self, generic_arg: &'v GenericArg<'v>)

source

fn visit_lifetime(&mut self, lifetime: &'v Lifetime)

source

fn visit_qpath(&mut self, qpath: &'v QPath<'v>, id: HirId, _span: Span)

source

fn visit_path(&mut self, path: &Path<'v>, _id: HirId)

source

fn visit_path_segment(&mut self, path_segment: &'v PathSegment<'v>)

source

fn visit_generic_args(&mut self, generic_args: &'v GenericArgs<'v>)

source

fn visit_assoc_type_binding(&mut self, type_binding: &'v TypeBinding<'v>)

source

fn visit_attribute(&mut self, _attr: &'v Attribute)

source

fn visit_associated_item_kind(&mut self, kind: &'v AssocItemKind)

source

fn visit_defaultness(&mut self, defaultness: &'v Defaultness)

source

fn visit_inline_asm(&mut self, asm: &'v InlineAsm<'v>, id: HirId)

Implementors§