pub trait AstVisitable: Any {
// Required methods
fn drive<V: VisitAst>(&self, v: &mut V) -> ControlFlow<V::Break>;
fn drive_mut<V: VisitAstMut>(&mut self, v: &mut V) -> ControlFlow<V::Break>;
fn drive_two<V: ZipAst>(
&self,
other: &Self,
v: &mut V,
) -> ControlFlow<V::Break>;
// Provided methods
fn name(&self) -> &'static str { ... }
fn dyn_visit<T: AstVisitable>(&self, f: impl FnMut(&T))
where Self: Sized { ... }
fn dyn_visit_mut<T: AstVisitable>(&mut self, f: impl FnMut(&mut T))
where Self: Sized { ... }
}Expand description
An overrideable visitor trait that can be used to conveniently traverse the whole contents of an item. This is useful when e.g. dealing with types, which show up pretty much everywhere in the ast.
This defines three traits:
AstVisitableis a trait implemented by all the types listed below; it has adrive[_mut]method that takes aVisitAst[Mut]visitor and calls its methods on all the relevant subvalues ofselfencountered.VisitAst[Mut]is a (pair of) visitor trait(s) that can be implemented by visitors. To define a visitor, implementVisitAst[Mut]and override the methods you need.
This trait has a drive[_mut] method that knows how to drive a VisitAst[Mut] visitor. This
trait is implemented for all the listed types. If listed as override, the corresponding
visitor trait has an overrideable method to visit this type. If listed as drive, the type
will only be visited by recursing into its contents.
Morally this represents the predicate for<V: VisitAst[Mut]> Self: Drive[Mut]<AstVisitableWrapper<V>>
Required Methods§
Sourcefn drive<V: VisitAst>(&self, v: &mut V) -> ControlFlow<V::Break>
fn drive<V: VisitAst>(&self, v: &mut V) -> ControlFlow<V::Break>
Recursively visit this type with the provided visitor. This calls the visitor’s visit_$any
method if it exists, otherwise visit_inner.
Sourcefn drive_mut<V: VisitAstMut>(&mut self, v: &mut V) -> ControlFlow<V::Break>
fn drive_mut<V: VisitAstMut>(&mut self, v: &mut V) -> ControlFlow<V::Break>
Recursively visit this type with the provided visitor. This calls the visitor’s visit_$any
method if it exists, otherwise visit_inner.
Provided Methods§
Sourcefn dyn_visit<T: AstVisitable>(&self, f: impl FnMut(&T))where
Self: Sized,
fn dyn_visit<T: AstVisitable>(&self, f: impl FnMut(&T))where
Self: Sized,
Visit all occurrences of that type inside self, in pre-order traversal.
Sourcefn dyn_visit_mut<T: AstVisitable>(&mut self, f: impl FnMut(&mut T))where
Self: Sized,
fn dyn_visit_mut<T: AstVisitable>(&mut self, f: impl FnMut(&mut T))where
Self: Sized,
Visit all occurrences of that type inside self, in pre-order traversal.
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".
Implementations on Foreign Types§
Source§impl AstVisitable for ()
impl AstVisitable for ()
Source§impl AstVisitable for PathBuf
impl AstVisitable for PathBuf
Source§impl AstVisitable for RangeInclusive<IntegerValue>
impl AstVisitable for RangeInclusive<IntegerValue>
Source§impl AstVisitable for String
impl AstVisitable for String
Source§impl AstVisitable for Ustrwhere
Ustr: PartialEq,
impl AstVisitable for Ustrwhere
Ustr: PartialEq,
Source§impl AstVisitable for bool
impl AstVisitable for bool
Source§impl AstVisitable for char
impl AstVisitable for char
Source§impl AstVisitable for i128
impl AstVisitable for i128
Source§impl AstVisitable for u8
impl AstVisitable for u8
Source§impl AstVisitable for u32
impl AstVisitable for u32
Source§impl AstVisitable for u64
impl AstVisitable for u64
Source§impl AstVisitable for u128
impl AstVisitable for u128
Source§impl AstVisitable for usize
impl AstVisitable for usize
Source§impl<A: AstVisitable, B: AstVisitable, C: AstVisitable> AstVisitable for (A, B, C)
impl<A: AstVisitable, B: AstVisitable, C: AstVisitable> AstVisitable for (A, B, C)
Source§impl<A: AstVisitable, B: AstVisitable> AstVisitable for (A, B)
impl<A: AstVisitable, B: AstVisitable> AstVisitable for (A, B)
Source§impl<A: AstVisitable, B: AstVisitable> AstVisitable for Result<A, B>
impl<A: AstVisitable, B: AstVisitable> AstVisitable for Result<A, B>
Source§impl<T: AstVisitable> AstVisitable for Box<T>
impl<T: AstVisitable> AstVisitable for Box<T>
Source§impl<T: AstVisitable> AstVisitable for Option<T>
impl<T: AstVisitable> AstVisitable for Option<T>
Source§impl<T: AstVisitable> AstVisitable for Vec<T>
impl<T: AstVisitable> AstVisitable for Vec<T>
Implementors§
impl AstVisitable for Abi
impl AstVisitable for AbortKind
impl AstVisitable for AggregateKind
impl AstVisitable for Assert
impl AstVisitable for AssocConstId
impl AstVisitable for AssocItemId
impl AstVisitable for AssocItemNames
impl AstVisitable for AssocTypeId
impl AstVisitable for AttrInfo
impl AstVisitable for Attribute
impl AstVisitable for AttributeKind
impl AstVisitable for BinOp
impl AstVisitable for BinderKind
impl AstVisitable for Block
impl AstVisitable for BlockData
impl AstVisitable for charon_lib::ast::bodies::structured::BlockId
impl AstVisitable for charon_lib::ast::bodies::unstructured::BlockId
impl AstVisitable for Body
impl AstVisitable for BorrowKind
impl AstVisitable for BorrowckStatement
impl AstVisitable for BranchId
impl AstVisitable for BuiltinAdt
impl AstVisitable for BuiltinAssertKind
impl AstVisitable for BuiltinImplDatawhere
BuiltinImplData: PartialEq,
impl AstVisitable for BuiltinPathElemwhere
BuiltinPathElem: PartialEq,
impl AstVisitable for Byte
impl AstVisitable for Call
impl AstVisitable for CastKind
impl AstVisitable for CliOpts
impl AstVisitable for ClosureInfo
impl AstVisitable for ClosureKind
impl AstVisitable for ConstGenericParam
impl AstVisitable for ConstGenericVarId
impl AstVisitable for ConstantExpr
impl AstVisitable for ConstantExprKind
impl AstVisitable for DeBruijnId
impl AstVisitable for DeclarationGroup
impl AstVisitable for DeprecatedSincewhere
DeprecatedSince: PartialEq,
impl AstVisitable for Deprecation
impl AstVisitable for Disambiguator
impl AstVisitable for Discriminator
impl AstVisitable for DropKind
impl AstVisitable for DynPredicate
impl AstVisitable for Error
impl AstVisitable for charon_lib::ast::bodies::structured::ExprBody
impl AstVisitable for charon_lib::ast::bodies::unstructured::ExprBody
impl AstVisitable for Field
impl AstVisitable for FieldId
impl AstVisitable for File
impl AstVisitable for FileId
impl AstVisitable for FileName
impl AstVisitable for FloatTy
impl AstVisitable for FloatValue
impl AstVisitable for FnOperand
impl AstVisitable for FnPtr
impl AstVisitable for FnPtrKind
impl AstVisitable for FunDecl
impl AstVisitable for FunDeclId
impl AstVisitable for FunDeclRef
impl AstVisitable for FunSig
impl AstVisitable for FunSource
impl AstVisitable for GenericArgs
impl AstVisitable for GenericParams
impl AstVisitable for GlobalDecl
impl AstVisitable for GlobalDeclId
impl AstVisitable for GlobalDeclRef
impl AstVisitable for GlobalKindwhere
GlobalKind: PartialEq,
impl AstVisitable for GlobalSource
impl AstVisitable for Ident
impl AstVisitable for ImplElem
impl AstVisitable for InhabitedPredicate
impl AstVisitable for InhabitedPredicateKind
impl AstVisitable for charon_lib::ast::meta::attrs::InlineAttr
impl AstVisitable for charon_lib::ast::from_rustc::InlineAttr
impl AstVisitable for IntTy
impl AstVisitable for IntegerTy
impl AstVisitable for IntegerValue
impl AstVisitable for ItemByVal
impl AstVisitable for ItemId
impl AstVisitable for ItemMeta
impl AstVisitable for ItemOpacitywhere
ItemOpacity: PartialEq,
impl AstVisitable for LangItem
impl AstVisitable for Layout
impl AstVisitable for LifetimeMutabilitywhere
LifetimeMutability: PartialEq,
impl AstVisitable for Loc
impl AstVisitable for Local
impl AstVisitable for LocalId
impl AstVisitable for Locals
impl AstVisitable for MaybeAssocItemId
impl AstVisitable for MetadataValue
impl AstVisitable for Name
impl AstVisitable for NullOp
impl AstVisitable for OffsetExpr
impl AstVisitable for OffsetGuarantee
impl AstVisitable for Operand
impl AstVisitable for OptimizeAttrwhere
OptimizeAttr: PartialEq,
impl AstVisitable for OverflowModewhere
OverflowMode: PartialEq,
impl AstVisitable for PathElem
impl AstVisitable for Place
impl AstVisitable for PlaceKind
impl AstVisitable for PredicateOrigin
impl AstVisitable for ProjectionElem
impl AstVisitable for PtrMetadata
impl AstVisitable for RawAttribute
impl AstVisitable for RefKind
impl AstVisitable for Region
impl AstVisitable for RegionId
impl AstVisitable for RegionParam
impl AstVisitable for ReprOptionswhere
ReprOptions: PartialEq,
impl AstVisitable for Rvalue
impl AstVisitable for ScalarTy
impl AstVisitable for SerializedSpan
impl AstVisitable for Size
impl AstVisitable for SizeExpr
impl AstVisitable for SizeExprKind
impl AstVisitable for Span
impl AstVisitable for SpanData
impl AstVisitable for charon_lib::ast::bodies::structured::Statement
impl AstVisitable for charon_lib::ast::bodies::unstructured::Statement
impl AstVisitable for StatementId
impl AstVisitable for charon_lib::ast::bodies::structured::StatementKind
impl AstVisitable for charon_lib::ast::bodies::unstructured::StatementKind
impl AstVisitable for SwitchData
impl AstVisitable for SwitchScrutinee
impl AstVisitable for TargetInfo
impl AstVisitable for Terminator
impl AstVisitable for TerminatorKind
impl AstVisitable for TraitAssocConst
impl AstVisitable for TraitAssocTy
impl AstVisitable for TraitAssocTyImpl
impl AstVisitable for TraitClauseId
impl AstVisitable for TraitDecl
impl AstVisitable for TraitDeclId
impl AstVisitable for TraitDeclRef
impl AstVisitable for TraitDeclSource
impl AstVisitable for TraitImpl
impl AstVisitable for TraitImplId
impl AstVisitable for TraitImplRef
impl AstVisitable for TraitImplSource
impl AstVisitable for TraitItemName
impl AstVisitable for TraitMethod
impl AstVisitable for TraitMethodId
impl AstVisitable for TraitParam
impl AstVisitable for TraitRef
impl AstVisitable for TraitRefContents
impl AstVisitable for TraitRefKind
impl AstVisitable for TraitTypeConstraint
impl AstVisitable for TranslatedCrate
impl AstVisitable for Ty
impl AstVisitable for TyKind
impl AstVisitable for TypeDecl
impl AstVisitable for TypeDeclId
impl AstVisitable for TypeDeclKind
impl AstVisitable for TypeDeclRef
impl AstVisitable for TypeParam
impl AstVisitable for TypePattern
impl AstVisitable for TypeSource
impl AstVisitable for TypeVarId
impl AstVisitable for UIntTy
impl AstVisitable for UnOp
impl AstVisitable for UnsizingMetadata
impl AstVisitable for VTableField
impl AstVisitable for Variance
impl AstVisitable for Variant
impl AstVisitable for VariantId
impl AstVisitable for VariantLayout
impl AstVisitable for WithRetag
impl<A: AstVisitable, B: AstVisitable> AstVisitable for OutlivesPred<A, B>
impl<I: Idx, T: AstVisitable> AstVisitable for IndexMap<I, T>
impl<I: Idx, T: AstVisitable> AstVisitable for IndexVec<I, T>
impl<Id: AstVisitable> AstVisitable for DeclRef<Id>
impl<K: AstVisitable + Hash + Eq, T: AstVisitable> AstVisitable for SeqHashMap<K, T>
Manual impl that visits the keys and values