rustc_hir::intravisit

Trait Visitor

source
pub trait Visitor<'v>: Sized {
    type Map: Map<'v> = <Self::NestedFilter as NestedFilter<'v>>::Map;
    type NestedFilter: NestedFilter<'v> = None;
    type Result: VisitorResult = ();

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

source

type Result: VisitorResult = ()

The result type of the visit_* methods. Can be either (), or ControlFlow<T>.

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) -> Self::Result

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 at rustc_hir::intravisit. 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) -> Self::Result

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) -> Self::Result

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) -> Self::Result

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) -> Self::Result

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>) -> Self::Result

source

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

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

source

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

source

fn visit_id(&mut self, _hir_id: HirId) -> Self::Result

source

fn visit_name(&mut self, _name: Symbol) -> Self::Result

source

fn visit_ident(&mut self, ident: Ident) -> Self::Result

source

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

source

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

source

fn visit_local(&mut self, l: &'v LetStmt<'v>) -> Self::Result

source

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

source

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

source

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

source

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

source

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

source

fn visit_array_length(&mut self, len: &'v ArrayLen<'v>) -> Self::Result

source

fn visit_anon_const(&mut self, c: &'v AnonConst) -> Self::Result

source

fn visit_inline_const(&mut self, c: &'v ConstBlock) -> Self::Result

source

fn visit_const_arg(&mut self, c: &'v ConstArg<'v>) -> Self::Result

source

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

source

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

source

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

source

fn visit_pattern_type_pattern(&mut self, _p: &'v Pat<'v>)

source

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

source

fn visit_const_param_default( &mut self, _param: HirId, ct: &'v ConstArg<'v>, ) -> Self::Result

source

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

source

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

source

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

source

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

source

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

source

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

source

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

source

fn visit_trait_item_ref(&mut self, ii: &'v TraitItemRef) -> Self::Result

source

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

source

fn visit_foreign_item_ref(&mut self, ii: &'v ForeignItemRef) -> Self::Result

source

fn visit_impl_item_ref(&mut self, ii: &'v ImplItemRef) -> Self::Result

source

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

source

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

source

fn visit_precise_capturing_arg( &mut self, arg: &'v PreciseCapturingArg<'v>, ) -> Self::Result

source

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

source

fn visit_opaque_ty(&mut self, opaque: &'v OpaqueTy<'v>) -> Self::Result

source

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

source

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

source

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

source

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

source

fn visit_label(&mut self, label: &'v Label) -> Self::Result

source

fn visit_infer(&mut self, inf: &'v InferArg) -> Self::Result

source

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

source

fn visit_lifetime(&mut self, lifetime: &'v Lifetime) -> Self::Result

source

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

source

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

source

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

source

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

source

fn visit_assoc_item_constraint( &mut self, constraint: &'v AssocItemConstraint<'v>, ) -> Self::Result

source

fn visit_attribute(&mut self, _attr: &'v Attribute) -> Self::Result

source

fn visit_associated_item_kind( &mut self, kind: &'v AssocItemKind, ) -> Self::Result

source

fn visit_defaultness(&mut self, defaultness: &'v Defaultness) -> Self::Result

source

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

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementors§