[−][src]Trait rustc_privacy::DefIdVisitor

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

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.

Required methods

fn tcx(&self) -> TyCtxt<'tcx>

fn visit_def_id(
    &mut self,
    def_id: DefId,
    kind: &str,
    descr: &dyn Display
) -> ControlFlow<()>

Loading content...

Provided methods

fn shallow(&self) -> bool

fn skip_assoc_tys(&self) -> bool

fn skeleton(&mut self) -> DefIdVisitorSkeleton<'_, 'tcx, Self>

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

fn visit(&mut self, ty_fragment: impl TypeFoldable<'tcx>) -> ControlFlow<()>

fn visit_trait(&mut self, trait_ref: TraitRef<'tcx>) -> ControlFlow<()>

fn visit_predicates(
    &mut self,
    predicates: GenericPredicates<'tcx>
) -> ControlFlow<()>

Loading content...

Implementors

impl<'a, 'tcx, VL: VisibilityLike> DefIdVisitor<'tcx> for FindMin<'a, 'tcx, VL>[src]

impl<'tcx> DefIdVisitor<'tcx> for SearchInterfaceForPrivateItemsVisitor<'tcx>[src]

impl<'tcx> DefIdVisitor<'tcx> for TypePrivacyVisitor<'tcx>[src]

impl<'tcx, '_> DefIdVisitor<'tcx> for ReachEverythingInTheInterfaceVisitor<'_, 'tcx>[src]

Loading content...