pub trait TypeVisitable<I: Interner>: Debug + Clone {
// Required method
fn visit_with<V: TypeVisitor<I>>(&self, visitor: &mut V) -> V::Result;
}
Expand description
This trait is implemented for every type that can be visited, providing the skeleton of the traversal.
To implement this conveniently, use the derive macro located in
rustc_macros
.
Required Methods§
Sourcefn visit_with<V: TypeVisitor<I>>(&self, visitor: &mut V) -> V::Result
fn visit_with<V: TypeVisitor<I>>(&self, visitor: &mut V) -> V::Result
The entry point for visiting. To visit a value t
with a visitor v
call: t.visit_with(v)
.
For most types, this just traverses the value, calling visit_with
on
each field/element.
For types of interest (such as Ty
), the implementation of this method
that calls a visitor method specifically for that type (such as
V::visit_ty
). This is where control transfers from TypeVisitable
to
TypeVisitor
.
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.
Implementations on Foreign Types§
Source§impl<I: Interner> TypeVisitable<I> for Movability
impl<I: Interner> TypeVisitable<I> for Movability
fn visit_with<F: TypeVisitor<I>>(&self, _: &mut F) -> F::Result
Source§impl<I: Interner> TypeVisitable<I> for Mutability
impl<I: Interner> TypeVisitable<I> for Mutability
fn visit_with<F: TypeVisitor<I>>(&self, _: &mut F) -> F::Result
Source§impl<I: Interner> TypeVisitable<I> for bool
impl<I: Interner> TypeVisitable<I> for bool
fn visit_with<F: TypeVisitor<I>>(&self, _: &mut F) -> F::Result
Source§impl<I: Interner> TypeVisitable<I> for u16
impl<I: Interner> TypeVisitable<I> for u16
fn visit_with<F: TypeVisitor<I>>(&self, _: &mut F) -> F::Result
Source§impl<I: Interner> TypeVisitable<I> for u32
impl<I: Interner> TypeVisitable<I> for u32
fn visit_with<F: TypeVisitor<I>>(&self, _: &mut F) -> F::Result
Source§impl<I: Interner> TypeVisitable<I> for u64
impl<I: Interner> TypeVisitable<I> for u64
fn visit_with<F: TypeVisitor<I>>(&self, _: &mut F) -> F::Result
Source§impl<I: Interner> TypeVisitable<I> for ()
impl<I: Interner> TypeVisitable<I> for ()
fn visit_with<F: TypeVisitor<I>>(&self, _: &mut F) -> F::Result
Source§impl<I: Interner> TypeVisitable<I> for usize
impl<I: Interner> TypeVisitable<I> for usize
fn visit_with<F: TypeVisitor<I>>(&self, _: &mut F) -> F::Result
Source§impl<I: Interner> TypeVisitable<I> for String
impl<I: Interner> TypeVisitable<I> for String
fn visit_with<F: TypeVisitor<I>>(&self, _: &mut F) -> F::Result
Source§impl<I: Interner, A: TypeVisitable<I>, B: TypeVisitable<I>, C: TypeVisitable<I>> TypeVisitable<I> for (A, B, C)
impl<I: Interner, A: TypeVisitable<I>, B: TypeVisitable<I>, C: TypeVisitable<I>> TypeVisitable<I> for (A, B, C)
fn visit_with<V: TypeVisitor<I>>(&self, visitor: &mut V) -> V::Result
Source§impl<I: Interner, T: TypeVisitable<I>> TypeVisitable<I> for &[T]
impl<I: Interner, T: TypeVisitable<I>> TypeVisitable<I> for &[T]
fn visit_with<V: TypeVisitor<I>>(&self, visitor: &mut V) -> V::Result
Source§impl<I: Interner, T: TypeVisitable<I>> TypeVisitable<I> for Option<T>
impl<I: Interner, T: TypeVisitable<I>> TypeVisitable<I> for Option<T>
fn visit_with<V: TypeVisitor<I>>(&self, visitor: &mut V) -> V::Result
Source§impl<I: Interner, T: TypeVisitable<I>> TypeVisitable<I> for Box<[T]>
impl<I: Interner, T: TypeVisitable<I>> TypeVisitable<I> for Box<[T]>
fn visit_with<V: TypeVisitor<I>>(&self, visitor: &mut V) -> V::Result
Source§impl<I: Interner, T: TypeVisitable<I>> TypeVisitable<I> for Box<T>
impl<I: Interner, T: TypeVisitable<I>> TypeVisitable<I> for Box<T>
fn visit_with<V: TypeVisitor<I>>(&self, visitor: &mut V) -> V::Result
Source§impl<I: Interner, T: TypeVisitable<I>> TypeVisitable<I> for Vec<T>
impl<I: Interner, T: TypeVisitable<I>> TypeVisitable<I> for Vec<T>
fn visit_with<V: TypeVisitor<I>>(&self, visitor: &mut V) -> V::Result
Source§impl<I: Interner, T: TypeVisitable<I>> TypeVisitable<I> for ThinVec<T>
impl<I: Interner, T: TypeVisitable<I>> TypeVisitable<I> for ThinVec<T>
fn visit_with<V: TypeVisitor<I>>(&self, visitor: &mut V) -> V::Result
Source§impl<I: Interner, T: TypeVisitable<I>, E: TypeVisitable<I>> TypeVisitable<I> for Result<T, E>
impl<I: Interner, T: TypeVisitable<I>, E: TypeVisitable<I>> TypeVisitable<I> for Result<T, E>
fn visit_with<V: TypeVisitor<I>>(&self, visitor: &mut V) -> V::Result
Source§impl<I: Interner, T: TypeVisitable<I>, Ix: Idx> TypeVisitable<I> for IndexVec<Ix, T>
impl<I: Interner, T: TypeVisitable<I>, Ix: Idx> TypeVisitable<I> for IndexVec<Ix, T>
fn visit_with<V: TypeVisitor<I>>(&self, visitor: &mut V) -> V::Result
Source§impl<I: Interner, T: TypeVisitable<I>, U: TypeVisitable<I>> TypeVisitable<I> for (T, U)
impl<I: Interner, T: TypeVisitable<I>, U: TypeVisitable<I>> TypeVisitable<I> for (T, U)
fn visit_with<V: TypeVisitor<I>>(&self, visitor: &mut V) -> V::Result
Implementors§
impl<I> TypeVisitable<I> for CanonicalTyVarKindwhere
I: Interner,
impl<I> TypeVisitable<I> for CanonicalVarKind<I>where
I: Interner,
I::PlaceholderTy: TypeVisitable<I>,
I::PlaceholderRegion: TypeVisitable<I>,
I::PlaceholderConst: TypeVisitable<I>,
impl<I> TypeVisitable<I> for ClauseKind<I>where
I: Interner,
TraitPredicate<I>: TypeVisitable<I>,
OutlivesPredicate<I, I::Region>: TypeVisitable<I>,
OutlivesPredicate<I, I::Ty>: TypeVisitable<I>,
ProjectionPredicate<I>: TypeVisitable<I>,
I::Const: TypeVisitable<I>,
I::Ty: TypeVisitable<I>,
I::GenericArg: TypeVisitable<I>,
HostEffectPredicate<I>: TypeVisitable<I>,
impl<I> TypeVisitable<I> for ExistentialPredicate<I>where
I: Interner,
ExistentialTraitRef<I>: TypeVisitable<I>,
ExistentialProjection<I>: TypeVisitable<I>,
I::DefId: TypeVisitable<I>,
impl<I> TypeVisitable<I> for PredicateKind<I>where
I: Interner,
ClauseKind<I>: TypeVisitable<I>,
I::DefId: TypeVisitable<I>,
SubtypePredicate<I>: TypeVisitable<I>,
CoercePredicate<I>: TypeVisitable<I>,
I::Const: TypeVisitable<I>,
NormalizesTo<I>: TypeVisitable<I>,
I::Term: TypeVisitable<I>,
impl<I> TypeVisitable<I> for TypingMode<I>
impl<I> TypeVisitable<I> for TypeError<I>where
I: Interner,
ExpectedFound<I::Const>: TypeVisitable<I>,
I::Region: TypeVisitable<I>,
I::BoundRegion: TypeVisitable<I>,
ExpectedFound<I::Ty>: TypeVisitable<I>,
ExpectedFound<I::DefId>: TypeVisitable<I>,
I::Ty: TypeVisitable<I>,
I::Const: TypeVisitable<I>,
ExpectedFound<I::BoundExistentialPredicates>: TypeVisitable<I>,
I::DefId: TypeVisitable<I>,
impl<I> TypeVisitable<I> for ProbeKind<I>
impl<I> TypeVisitable<I> for ExternalConstraintsData<I>where
I: Interner,
Vec<OutlivesPredicate<I, I::GenericArg>>: TypeVisitable<I>,
Vec<(OpaqueTypeKey<I>, I::Ty)>: TypeVisitable<I>,
NestedNormalizationGoals<I>: TypeVisitable<I>,
impl<I> TypeVisitable<I> for NestedNormalizationGoals<I>
impl<I> TypeVisitable<I> for PredefinedOpaquesData<I>
impl<I> TypeVisitable<I> for Response<I>where
I: Interner,
CanonicalVarValues<I>: TypeVisitable<I>,
I::ExternalConstraints: TypeVisitable<I>,
impl<I> TypeVisitable<I> for AliasTerm<I>
impl<I> TypeVisitable<I> for AliasTy<I>
impl<I> TypeVisitable<I> for CanonicalVarInfo<I>
impl<I> TypeVisitable<I> for CanonicalVarValues<I>
impl<I> TypeVisitable<I> for ClosureArgs<I>
impl<I> TypeVisitable<I> for CoercePredicate<I>
impl<I> TypeVisitable<I> for CoroutineArgs<I>
impl<I> TypeVisitable<I> for CoroutineClosureArgs<I>
impl<I> TypeVisitable<I> for CoroutineClosureSignature<I>
impl<I> TypeVisitable<I> for ExistentialProjection<I>where
I: Interner,
I::DefId: TypeVisitable<I>,
I::GenericArgs: TypeVisitable<I>,
I::Term: TypeVisitable<I>,
impl<I> TypeVisitable<I> for ExistentialTraitRef<I>
impl<I> TypeVisitable<I> for FnHeader<I>
impl<I> TypeVisitable<I> for FnSig<I>
impl<I> TypeVisitable<I> for FnSigTys<I>
impl<I> TypeVisitable<I> for GenSig<I>
impl<I> TypeVisitable<I> for HostEffectPredicate<I>
impl<I> TypeVisitable<I> for NormalizesTo<I>
impl<I> TypeVisitable<I> for OpaqueTypeKey<I>
impl<I> TypeVisitable<I> for ProjectionPredicate<I>
impl<I> TypeVisitable<I> for SubtypePredicate<I>
impl<I> TypeVisitable<I> for TraitPredicate<I>
impl<I> TypeVisitable<I> for TraitRef<I>
impl<I> TypeVisitable<I> for TypeAndMut<I>
impl<I> TypeVisitable<I> for UnevaluatedConst<I>
impl<I> TypeVisitable<I> for UnsafeBinderInner<I>
impl<I, A> TypeVisitable<I> for OutlivesPredicate<I, A>
impl<I, P> TypeVisitable<I> for Goal<I, P>
impl<I, P> TypeVisitable<I> for QueryInput<I, P>
impl<I, T> TypeVisitable<I> for State<I, T>
impl<I, V> TypeVisitable<I> for Canonical<I, V>
impl<I: Interner> TypeVisitable<I> for AliasRelationDirection
impl<I: Interner> TypeVisitable<I> for AliasTyKind
impl<I: Interner> TypeVisitable<I> for BoundConstness
impl<I: Interner> TypeVisitable<I> for FloatTy
impl<I: Interner> TypeVisitable<I> for InferTy
impl<I: Interner> TypeVisitable<I> for IntVarValue
impl<I: Interner> TypeVisitable<I> for PredicatePolarity
impl<I: Interner> TypeVisitable<I> for Variance
impl<I: Interner> TypeVisitable<I> for BuiltinImplSource
impl<I: Interner> TypeVisitable<I> for Certainty
impl<I: Interner> TypeVisitable<I> for GoalSource
impl<I: Interner> TypeVisitable<I> for MaybeCause
impl<I: Interner> TypeVisitable<I> for NoSolution
impl<I: Interner> TypeVisitable<I> for DebruijnIndex
impl<I: Interner> TypeVisitable<I> for RegionVid
impl<I: Interner> TypeVisitable<I> for UniverseIndex
impl<I: Interner, T> !TypeVisitable<I> for EarlyBinder<I, T>
For early binders, you should first call instantiate
before using any visitors.