pub trait TypeVisitable<I: Interner>: Debug {
// 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 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, 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 Arc<T>
impl<I: Interner, T: TypeVisitable<I>> TypeVisitable<I> for Arc<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>, S> TypeVisitable<I> for IndexSet<T, S>
impl<I: Interner, T: TypeVisitable<I>, S> TypeVisitable<I> for IndexSet<T, S>
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
Source§impl<I: Interner, T: TypeVisitable<I>, const N: usize> TypeVisitable<I> for SmallVec<[T; N]>
impl<I: Interner, T: TypeVisitable<I>, const N: usize> TypeVisitable<I> for SmallVec<[T; N]>
fn visit_with<V: TypeVisitor<I>>(&self, visitor: &mut V) -> V::Result
Implementors§
impl<I: Interner, T> !TypeVisitable<I> for EarlyBinder<I, T>
nightly only.For early binders, you should first call instantiate before using any visitors.