pub(crate) trait DefIdVisitor<'tcx> {
    type BreakTy = ();

    fn tcx(&self) -> TyCtxt<'tcx>;
    fn visit_def_id(
        &mut self,
        def_id: DefId,
        kind: &str,
        descr: &dyn Display
    ) -> ControlFlow<Self::BreakTy>; fn shallow(&self) -> bool { ... } fn skip_assoc_tys(&self) -> bool { ... } fn skeleton(&mut self) -> DefIdVisitorSkeleton<'_, 'tcx, Self> { ... } fn visit(
        &mut self,
        ty_fragment: impl TypeVisitable<'tcx>
    ) -> ControlFlow<Self::BreakTy> { ... } fn visit_trait(
        &mut self,
        trait_ref: TraitRef<'tcx>
    ) -> ControlFlow<Self::BreakTy> { ... } fn visit_projection_ty(
        &mut self,
        projection: AliasTy<'tcx>
    ) -> ControlFlow<Self::BreakTy> { ... } fn visit_predicates(
        &mut self,
        predicates: GenericPredicates<'tcx>
    ) -> ControlFlow<Self::BreakTy> { ... } }
Expand description

Generic infrastructure used to implement specific visitors below. Implemented to visit all DefIds in a type. Visiting DefIds is useful because visibilities and reachabilities are attached to them. The idea is to visit “all components of a type”, as documented in https://github.com/rust-lang/rfcs/blob/master/text/2145-type-privacy.md#how-to-determine-visibility-of-a-type. The default type visitor (TypeVisitor) does most of the job, but it has some shortcomings. First, it doesn’t have overridable fn visit_trait_ref, so we have to catch trait DefIds manually. Second, it doesn’t visit some type components like signatures of fn types, or traits in impl Trait, see individual comments in DefIdVisitorSkeleton::visit_ty.

Provided Associated Types§

Required Methods§

Provided Methods§

Not overridden, but used to actually visit types and traits.

Implementors§