Struct rustc_privacy::EmbargoVisitor
source · pub(crate) struct EmbargoVisitor<'tcx> {
pub(crate) tcx: TyCtxt<'tcx>,
pub(crate) effective_visibilities: EffectiveVisibilities,
pub(crate) macro_reachable: FxHashSet<(LocalDefId, LocalDefId)>,
pub(crate) prev_level: Option<Level>,
pub(crate) changed: bool,
}
Expand description
The embargo visitor, used to determine the exports of the AST.
Fields§
§tcx: TyCtxt<'tcx>
§effective_visibilities: EffectiveVisibilities
Effective visibilities for reachable nodes.
macro_reachable: FxHashSet<(LocalDefId, LocalDefId)>
A set of pairs corresponding to modules, where the first module is reachable via a macro that’s defined in the second module. This cannot be represented as reachable because it can’t handle the following case:
pub mod n { // Should be Public
pub(crate) mod p { // Should not be accessible
pub fn f() -> i32 { 12 } // Must be Reachable
}
}
pub macro m() {
n::p::f()
}
prev_level: Option<Level>
Previous visibility level; None
means unreachable.
changed: bool
Has something changed in the level map?
Implementations§
source§impl<'tcx> EmbargoVisitor<'tcx>
impl<'tcx> EmbargoVisitor<'tcx>
pub(crate) fn get(&self, def_id: LocalDefId) -> Option<Level>
sourcepub(crate) fn update(
&mut self,
def_id: LocalDefId,
level: Option<Level>
) -> Option<Level>
pub(crate) fn update(
&mut self,
def_id: LocalDefId,
level: Option<Level>
) -> Option<Level>
Updates node level and returns the updated level.
pub(crate) fn reach(
&mut self,
def_id: LocalDefId,
level: Option<Level>
) -> ReachEverythingInTheInterfaceVisitor<'_, 'tcx>
pub(crate) fn update_reachability_from_macro(
&mut self,
local_def_id: LocalDefId,
md: &MacroDef
)
sourcepub(crate) fn update_macro_reachable(
&mut self,
module_def_id: LocalDefId,
defining_mod: LocalDefId
) -> bool
pub(crate) fn update_macro_reachable(
&mut self,
module_def_id: LocalDefId,
defining_mod: LocalDefId
) -> bool
Updates the item as being reachable through a macro defined in the given
module. Returns true
if the level has changed.
pub(crate) fn update_macro_reachable_mod(
&mut self,
module_def_id: LocalDefId,
defining_mod: LocalDefId
)
pub(crate) fn update_macro_reachable_def(
&mut self,
def_id: LocalDefId,
def_kind: DefKind,
vis: Visibility,
module: LocalDefId
)
Trait Implementations§
source§impl<'tcx> Visitor<'tcx> for EmbargoVisitor<'tcx>
impl<'tcx> Visitor<'tcx> for EmbargoVisitor<'tcx>
source§fn nested_visit_map(&mut self) -> Self::Map
fn nested_visit_map(&mut self) -> Self::Map
We want to visit items in the context of their containing module and so forth, so supply a crate for doing a deep walk.
§type NestedFilter = All
type NestedFilter = All
NestedFilter
for details. If you override this type, you
must also override nested_visit_map
. Read moresource§fn visit_item(&mut self, item: &'tcx Item<'tcx>)
fn visit_item(&mut self, item: &'tcx Item<'tcx>)
visit_nested_item
for details. Read morefn visit_block(&mut self, b: &'tcx Block<'tcx>)
type Map = <Self::NestedFilter as NestedFilter<'v>>::Map
source§fn visit_nested_item(&mut self, id: ItemId)
fn visit_nested_item(&mut self, id: ItemId)
Self::NestedFilter
is nested_filter::None
, this method does
nothing. You probably don’t want to override this method –
instead, override Self::NestedFilter
or use the “shallow” or
“deep” visit patterns described on
itemlikevisit::ItemLikeVisitor
. The only reason to override
this method is if you want a nested pattern but cannot supply a
Map
; see nested_visit_map
for advice. Read moresource§fn visit_nested_trait_item(&mut self, id: TraitItemId)
fn visit_nested_trait_item(&mut self, id: TraitItemId)
visit_nested_item()
, but for trait items. See
visit_nested_item()
for advice on when to override this
method. Read moresource§fn visit_nested_impl_item(&mut self, id: ImplItemId)
fn visit_nested_impl_item(&mut self, id: ImplItemId)
visit_nested_item()
, but for impl items. See
visit_nested_item()
for advice on when to override this
method. Read moresource§fn visit_nested_foreign_item(&mut self, id: ForeignItemId)
fn visit_nested_foreign_item(&mut self, id: ForeignItemId)
visit_nested_item()
, but for foreign items. See
visit_nested_item()
for advice on when to override this
method. Read moresource§fn visit_nested_body(&mut self, id: BodyId)
fn visit_nested_body(&mut self, id: BodyId)
visit_nested_item
, does nothing by default unless you override
Self::NestedFilter
. Read morefn visit_param(&mut self, param: &'v Param<'v>)
fn visit_body(&mut self, b: &'v Body<'v>)
fn visit_id(&mut self, _hir_id: HirId)
fn visit_name(&mut self, _name: Symbol)
fn visit_ident(&mut self, ident: Ident)
fn visit_mod(&mut self, m: &'v Mod<'v>, _s: Span, n: HirId)
fn visit_foreign_item(&mut self, i: &'v ForeignItem<'v>)
fn visit_local(&mut self, l: &'v Local<'v>)
fn visit_stmt(&mut self, s: &'v Stmt<'v>)
fn visit_arm(&mut self, a: &'v Arm<'v>)
fn visit_pat(&mut self, p: &'v Pat<'v>)
fn visit_pat_field(&mut self, f: &'v PatField<'v>)
fn visit_array_length(&mut self, len: &'v ArrayLen)
fn visit_anon_const(&mut self, c: &'v AnonConst)
fn visit_expr(&mut self, ex: &'v Expr<'v>)
fn visit_let_expr(&mut self, lex: &'v Let<'v>)
fn visit_expr_field(&mut self, field: &'v ExprField<'v>)
fn visit_ty(&mut self, t: &'v Ty<'v>)
fn visit_generic_param(&mut self, p: &'v GenericParam<'v>)
fn visit_const_param_default(&mut self, _param: HirId, ct: &'v AnonConst)
fn visit_generics(&mut self, g: &'v Generics<'v>)
fn visit_where_predicate(&mut self, predicate: &'v WherePredicate<'v>)
fn visit_fn_ret_ty(&mut self, ret_ty: &'v FnRetTy<'v>)
fn visit_fn_decl(&mut self, fd: &'v FnDecl<'v>)
fn visit_fn(
&mut self,
fk: FnKind<'v>,
fd: &'v FnDecl<'v>,
b: BodyId,
_: Span,
id: HirId
)
fn visit_use(
&mut self,
path: &'v Path<'v, SmallVec<[Res<HirId>; 3]>>,
hir_id: HirId
)
fn visit_trait_item(&mut self, ti: &'v TraitItem<'v>)
fn visit_trait_item_ref(&mut self, ii: &'v TraitItemRef)
fn visit_impl_item(&mut self, ii: &'v ImplItem<'v>)
fn visit_foreign_item_ref(&mut self, ii: &'v ForeignItemRef)
fn visit_impl_item_ref(&mut self, ii: &'v ImplItemRef)
fn visit_trait_ref(&mut self, t: &'v TraitRef<'v>)
fn visit_param_bound(&mut self, bounds: &'v GenericBound<'v>)
fn visit_poly_trait_ref(&mut self, t: &'v PolyTraitRef<'v>)
fn visit_variant_data(&mut self, s: &'v VariantData<'v>)
fn visit_field_def(&mut self, s: &'v FieldDef<'v>)
fn visit_enum_def(&mut self, enum_definition: &'v EnumDef<'v>, item_id: HirId)
fn visit_variant(&mut self, v: &'v Variant<'v>)
fn visit_label(&mut self, label: &'v Label)
fn visit_infer(&mut self, inf: &'v InferArg)
fn visit_generic_arg(&mut self, generic_arg: &'v GenericArg<'v>)
fn visit_lifetime(&mut self, lifetime: &'v Lifetime)
fn visit_qpath(&mut self, qpath: &'v QPath<'v>, id: HirId, _span: Span)
fn visit_path(&mut self, path: &Path<'v, Res<HirId>>, _id: HirId)
fn visit_path_segment(&mut self, path_segment: &'v PathSegment<'v>)
fn visit_generic_args(&mut self, generic_args: &'v GenericArgs<'v>)
fn visit_assoc_type_binding(&mut self, type_binding: &'v TypeBinding<'v>)
fn visit_attribute(&mut self, _attr: &'v Attribute)
fn visit_associated_item_kind(&mut self, kind: &'v AssocItemKind)
fn visit_defaultness(&mut self, defaultness: &'v Defaultness)
fn visit_inline_asm(&mut self, asm: &'v InlineAsm<'v>, id: HirId)
Auto Trait Implementations§
impl<'tcx> !RefUnwindSafe for EmbargoVisitor<'tcx>
impl<'tcx> !Send for EmbargoVisitor<'tcx>
impl<'tcx> !Sync for EmbargoVisitor<'tcx>
impl<'tcx> Unpin for EmbargoVisitor<'tcx>
impl<'tcx> !UnwindSafe for EmbargoVisitor<'tcx>
Blanket Implementations§
Layout§
Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...)
attributes. Please see the Rust Reference’s “Type Layout” chapter for details on type layout guarantees.
Size: 80 bytes