Skip to main content Crate rustc_privacy Copy item path Source pub(crate) use diagnostics::FieldIsPrivate ; π pub(crate) use diagnostics::FieldIsPrivateLabel ; π pub(crate) use diagnostics::FromPrivateDependencyInPublicInterface ; π pub(crate) use diagnostics::InPublicInterface ; π pub(crate) use diagnostics::ItemIsPrivate ; π pub(crate) use diagnostics::PrivateInterfacesOrBoundsLint ; π pub(crate) use diagnostics::ReportEffectiveVisibility ; π pub(crate) use diagnostics::UnnameableTypesLint ; π pub(crate) use diagnostics::UnnamedItemIsPrivate ; π pub(crate) use rustc_middle::ty::print::PrintTraitRefExt as _; π pub(crate) use std::marker::PhantomData ; π pub(crate) use std::ops::ControlFlow ; π pub(crate) use debug_assert_matches ; π pub(crate) use fmt ; π pub(crate) use VisitorResult ; π pub(crate) use try_visit ; π pub(crate) use rustc_attr_ir::find_attr ; π pub(crate) use FxHashMap ; π pub(crate) use FxHashSet ; π pub(crate) use rustc_data_structures::indexmap::IndexSet ; π pub(crate) use rustc_data_structures::intern::Interned ; π pub(crate) use MultiSpan ; π pub(crate) use listify ; π pub(crate) use CtorOf ; π pub(crate) use DefKind ; π pub(crate) use Res ; π pub(crate) use DefId ; π pub(crate) use LocalDefId ; π pub(crate) use LocalModId ; π pub(crate) use self ; π pub(crate) use InferKind ; π pub(crate) use Visitor ; π pub(crate) use self as hir; π pub(crate) use AmbigArg ; π pub(crate) use ForeignItemId ; π pub(crate) use ItemId ; π pub(crate) use OwnerId ; π pub(crate) use PatKind ; π pub(crate) use EXPORTED_PRIVATE_DEPENDENCIES ; π pub(crate) use PRIVATE_BOUNDS ; π pub(crate) use PRIVATE_INTERFACES ; π pub(crate) use UNNAMEABLE_TYPES ; π pub(crate) use EffectiveVisibilities ; π pub(crate) use EffectiveVisibility ; π pub(crate) use Level ; π pub(crate) use rustc_middle::query::Providers ; π pub(crate) use self ; π pub(crate) use AssocContainer ; π pub(crate) use Const ; π pub(crate) use GenericParamDefKind ; π pub(crate) use PredicateProxy ; π pub(crate) use TraitRef ; π pub(crate) use Ty ; π pub(crate) use TyCtxt ; π pub(crate) use TypeSuperVisitable ; π pub(crate) use TypeVisitable ; π pub(crate) use TypeVisitor ; π pub(crate) use Ident ; π pub(crate) use Span ; π pub(crate) use Symbol ; π pub(crate) use bug ; π pub(crate) use kw ; π pub(crate) use span_bug ; π pub(crate) use sym ; π pub(crate) use tracing::debug ; π diagnostics π DefIdVisitorSkeleton DefIdsToImplsCollector π Visitor that collects correspondence map between defs and
enclosing impls. EmbargoVisitor π The embargo visitor, used to determine the exports of the AST. FindMin π Visitor used to determine impl visibility and reachability. LazyDefPathStr π NamePrivacyVisitor π Name privacy visitor, checks privacy and reports violations. PrivateItemsInPublicInterfacesChecker π ReachEverythingInTheInterfaceVisitor π SearchInterfaceForPrivateItemsVisitor π SearchInterfaceForPrivateItemsVisitor traverses an itemβs interface and
finds any private components in it. TestReachabilityVisitor Visitor, used for EffectiveVisibilities table checking TypePrivacyVisitor π Type privacy visitor, checks types for privacy and reports violations. DefIdVisitor 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://rust-lang.github.io/rfcs/2145-type-privacy.html#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. VisibilityLike π assoc_has_type_of π check_mod_privacy π check_private_in_public π effective_visibilities π min π provide DefIdsToImpls π