Struct rustc_passes::check_attr::CheckAttrVisitor
source · [−]struct CheckAttrVisitor<'tcx> {
tcx: TyCtxt<'tcx>,
}Fields
tcx: TyCtxt<'tcx>Implementations
sourceimpl CheckAttrVisitor<'_>
impl CheckAttrVisitor<'_>
sourcefn check_attributes(
&self,
hir_id: HirId,
span: Span,
target: Target,
item: Option<ItemLike<'_>>
)
fn check_attributes(
&self,
hir_id: HirId,
span: Span,
target: Target,
item: Option<ItemLike<'_>>
)
Checks any attribute.
fn inline_attr_str_error_with_macro_def(
&self,
hir_id: HirId,
attr: &Attribute,
sym: &str
)
fn inline_attr_str_error_without_macro_def(
&self,
hir_id: HirId,
attr: &Attribute,
sym: &str
)
sourcefn check_inline(
&self,
hir_id: HirId,
attr: &Attribute,
span: Span,
target: Target
) -> bool
fn check_inline(
&self,
hir_id: HirId,
attr: &Attribute,
span: Span,
target: Target
) -> bool
Checks if an #[inline] is applied to a function or a closure. Returns true if valid.
fn check_generic_attr(
&self,
hir_id: HirId,
attr: &Attribute,
target: Target,
allowed_targets: &[Target]
)
sourcefn check_naked(
&self,
hir_id: HirId,
attr: &Attribute,
span: Span,
target: Target
) -> bool
fn check_naked(
&self,
hir_id: HirId,
attr: &Attribute,
span: Span,
target: Target
) -> bool
Checks if #[naked] is applied to a function definition.
sourcefn check_cmse_nonsecure_entry(
&self,
attr: &Attribute,
span: Span,
target: Target
) -> bool
fn check_cmse_nonsecure_entry(
&self,
attr: &Attribute,
span: Span,
target: Target
) -> bool
Checks if #[cmse_nonsecure_entry] is applied to a function definition.
sourcefn check_track_caller(
&self,
hir_id: HirId,
attr_span: Span,
attrs: &[Attribute],
span: Span,
target: Target
) -> bool
fn check_track_caller(
&self,
hir_id: HirId,
attr_span: Span,
attrs: &[Attribute],
span: Span,
target: Target
) -> bool
Checks if a #[track_caller] is applied to a non-naked function. Returns true if valid.
sourcefn check_non_exhaustive(
&self,
hir_id: HirId,
attr: &Attribute,
span: Span,
target: Target
) -> bool
fn check_non_exhaustive(
&self,
hir_id: HirId,
attr: &Attribute,
span: Span,
target: Target
) -> bool
Checks if the #[non_exhaustive] attribute on an item is valid. Returns true if valid.
sourcefn check_marker(
&self,
hir_id: HirId,
attr: &Attribute,
span: Span,
target: Target
) -> bool
fn check_marker(
&self,
hir_id: HirId,
attr: &Attribute,
span: Span,
target: Target
) -> bool
Checks if the #[marker] attribute on an item is valid. Returns true if valid.
sourcefn check_rustc_must_implement_one_of(
&self,
attr: &Attribute,
span: Span,
target: Target
) -> bool
fn check_rustc_must_implement_one_of(
&self,
attr: &Attribute,
span: Span,
target: Target
) -> bool
Checks if the #[rustc_must_implement_one_of] attribute on a target is valid. Returns true if valid.
sourcefn check_target_feature(
&self,
hir_id: HirId,
attr: &Attribute,
span: Span,
target: Target
) -> bool
fn check_target_feature(
&self,
hir_id: HirId,
attr: &Attribute,
span: Span,
target: Target
) -> bool
Checks if the #[target_feature] attribute on item is valid. Returns true if valid.
fn doc_attr_str_error(&self, meta: &NestedMetaItem, attr_name: &str)
fn check_doc_alias_value(
&self,
meta: &NestedMetaItem,
doc_alias: &str,
hir_id: HirId,
target: Target,
is_list: bool,
aliases: &mut FxHashMap<String, Span>
) -> bool
fn check_doc_alias(
&self,
meta: &NestedMetaItem,
hir_id: HirId,
target: Target,
aliases: &mut FxHashMap<String, Span>
) -> bool
fn check_doc_keyword(&self, meta: &NestedMetaItem, hir_id: HirId) -> bool
sourcefn check_doc_inline(
&self,
attr: &Attribute,
meta: &NestedMetaItem,
hir_id: HirId,
target: Target,
specified_inline: &mut Option<(bool, Span)>
) -> bool
fn check_doc_inline(
&self,
attr: &Attribute,
meta: &NestedMetaItem,
hir_id: HirId,
target: Target,
specified_inline: &mut Option<(bool, Span)>
) -> bool
Checks #[doc(inline)]/#[doc(no_inline)] attributes. Returns true if valid.
A doc inlining attribute is invalid if it is applied to a non-use item, or
if there are conflicting attributes for one item.
specified_inline is used to keep track of whether we have
already seen an inlining attribute for this item.
If so, specified_inline holds the value and the span of
the first inline/no_inline attribute.
sourcefn check_attr_not_crate_level(
&self,
meta: &NestedMetaItem,
hir_id: HirId,
attr_name: &str
) -> bool
fn check_attr_not_crate_level(
&self,
meta: &NestedMetaItem,
hir_id: HirId,
attr_name: &str
) -> bool
Checks that an attribute is not used at the crate level. Returns true if valid.
sourcefn check_attr_crate_level(
&self,
attr: &Attribute,
meta: &NestedMetaItem,
hir_id: HirId
) -> bool
fn check_attr_crate_level(
&self,
attr: &Attribute,
meta: &NestedMetaItem,
hir_id: HirId
) -> bool
Checks that an attribute is used at the crate level. Returns true if valid.
sourcefn check_test_attr(&self, meta: &NestedMetaItem, hir_id: HirId) -> bool
fn check_test_attr(&self, meta: &NestedMetaItem, hir_id: HirId) -> bool
Checks that doc(test(...)) attribute contains only valid attributes. Returns true if
valid.
sourcefn check_doc_attrs(
&self,
attr: &Attribute,
hir_id: HirId,
target: Target,
specified_inline: &mut Option<(bool, Span)>,
aliases: &mut FxHashMap<String, Span>
) -> bool
fn check_doc_attrs(
&self,
attr: &Attribute,
hir_id: HirId,
target: Target,
specified_inline: &mut Option<(bool, Span)>,
aliases: &mut FxHashMap<String, Span>
) -> bool
Runs various checks on #[doc] attributes. Returns true if valid.
specified_inline should be initialized to None and kept for the scope
of one item. Read the documentation of check_doc_inline for more information.
sourcefn check_pass_by_value(
&self,
attr: &Attribute,
span: Span,
target: Target
) -> bool
fn check_pass_by_value(
&self,
attr: &Attribute,
span: Span,
target: Target
) -> bool
Warns against some misuses of #[pass_by_value]
sourcefn check_must_use(
&self,
hir_id: HirId,
attr: &Attribute,
span: Span,
_target: Target
) -> bool
fn check_must_use(
&self,
hir_id: HirId,
attr: &Attribute,
span: Span,
_target: Target
) -> bool
Warns against some misuses of #[must_use]
sourcefn check_must_not_suspend(
&self,
attr: &Attribute,
span: Span,
target: Target
) -> bool
fn check_must_not_suspend(
&self,
attr: &Attribute,
span: Span,
target: Target
) -> bool
Checks if #[must_not_suspend] is applied to a function. Returns true if valid.
sourcefn check_cold(
&self,
hir_id: HirId,
attr: &Attribute,
span: Span,
target: Target
)
fn check_cold(
&self,
hir_id: HirId,
attr: &Attribute,
span: Span,
target: Target
)
Checks if #[cold] is applied to a non-function. Returns true if valid.
sourcefn check_link(
&self,
hir_id: HirId,
attr: &Attribute,
span: Span,
target: Target
)
fn check_link(
&self,
hir_id: HirId,
attr: &Attribute,
span: Span,
target: Target
)
Checks if #[link] is applied to an item other than a foreign module.
sourcefn check_link_name(
&self,
hir_id: HirId,
attr: &Attribute,
span: Span,
target: Target
)
fn check_link_name(
&self,
hir_id: HirId,
attr: &Attribute,
span: Span,
target: Target
)
Checks if #[link_name] is applied to an item other than a foreign function or static.
sourcefn check_no_link(
&self,
hir_id: HirId,
attr: &Attribute,
span: Span,
target: Target
) -> bool
fn check_no_link(
&self,
hir_id: HirId,
attr: &Attribute,
span: Span,
target: Target
) -> bool
Checks if #[no_link] is applied to an extern crate. Returns true if valid.
fn is_impl_item(&self, hir_id: HirId) -> bool
sourcefn check_export_name(
&self,
hir_id: HirId,
attr: &Attribute,
span: Span,
target: Target
) -> bool
fn check_export_name(
&self,
hir_id: HirId,
attr: &Attribute,
span: Span,
target: Target
) -> bool
Checks if #[export_name] is applied to a function or static. Returns true if valid.
fn check_rustc_layout_scalar_valid_range(
&self,
attr: &Attribute,
span: Span,
target: Target
) -> bool
sourcefn check_rustc_legacy_const_generics(
&self,
attr: &Attribute,
span: Span,
target: Target,
item: Option<ItemLike<'_>>
) -> bool
fn check_rustc_legacy_const_generics(
&self,
attr: &Attribute,
span: Span,
target: Target,
item: Option<ItemLike<'_>>
) -> bool
Checks if #[rustc_legacy_const_generics] is applied to a function and has a valid argument.
fn check_rustc_lint_query_instability(
&self,
attr: &Attribute,
span: Span,
target: Target
) -> bool
sourcefn check_rustc_dirty_clean(&self, attr: &Attribute) -> bool
fn check_rustc_dirty_clean(&self, attr: &Attribute) -> bool
Checks that the dep-graph debugging attributes are only present when the query-dep-graph option is passed to the compiler.
sourcefn check_link_section(
&self,
hir_id: HirId,
attr: &Attribute,
span: Span,
target: Target
)
fn check_link_section(
&self,
hir_id: HirId,
attr: &Attribute,
span: Span,
target: Target
)
Checks if #[link_section] is applied to a function or static.
sourcefn check_no_mangle(
&self,
hir_id: HirId,
attr: &Attribute,
span: Span,
target: Target
)
fn check_no_mangle(
&self,
hir_id: HirId,
attr: &Attribute,
span: Span,
target: Target
)
Checks if #[no_mangle] is applied to a function or static.
sourcefn check_repr(
&self,
attrs: &[Attribute],
span: Span,
target: Target,
item: Option<ItemLike<'_>>,
hir_id: HirId
)
fn check_repr(
&self,
attrs: &[Attribute],
span: Span,
target: Target,
item: Option<ItemLike<'_>>,
hir_id: HirId
)
Checks if the #[repr] attributes on item are valid.
fn check_used(&self, attrs: &[Attribute], target: Target)
sourcefn check_allow_internal_unstable(
&self,
hir_id: HirId,
attr: &Attribute,
span: Span,
target: Target,
attrs: &[Attribute]
) -> bool
fn check_allow_internal_unstable(
&self,
hir_id: HirId,
attr: &Attribute,
span: Span,
target: Target,
attrs: &[Attribute]
) -> bool
Outputs an error for #[allow_internal_unstable] which can only be applied to macros.
(Allows proc_macro functions)
sourcefn check_rustc_allow_const_fn_unstable(
&self,
hir_id: HirId,
attr: &Attribute,
span: Span,
target: Target
) -> bool
fn check_rustc_allow_const_fn_unstable(
&self,
hir_id: HirId,
attr: &Attribute,
span: Span,
target: Target
) -> bool
Outputs an error for #[allow_internal_unstable] which can only be applied to macros.
(Allows proc_macro functions)
sourcefn check_default_method_body_is_const(
&self,
attr: &Attribute,
span: Span,
target: Target
) -> bool
fn check_default_method_body_is_const(
&self,
attr: &Attribute,
span: Span,
target: Target
) -> bool
default_method_body_is_const should only be applied to trait methods with default bodies.
fn check_stability_promotable(
&self,
attr: &Attribute,
_span: Span,
target: Target
) -> bool
fn check_deprecated(
&self,
hir_id: HirId,
attr: &Attribute,
_span: Span,
target: Target
)
fn check_macro_use(&self, hir_id: HirId, attr: &Attribute, target: Target)
fn check_macro_export(&self, hir_id: HirId, attr: &Attribute, target: Target)
fn check_plugin_registrar(
&self,
hir_id: HirId,
attr: &Attribute,
target: Target
)
Trait Implementations
sourceimpl<'tcx> Visitor<'tcx> for CheckAttrVisitor<'tcx>
impl<'tcx> Visitor<'tcx> for CheckAttrVisitor<'tcx>
type NestedFilter = OnlyBodies
sourcefn nested_visit_map(&mut self) -> Self::Map
fn nested_visit_map(&mut self) -> Self::Map
The default versions of the visit_nested_XXX routines invoke
this method to get a map to use. By selecting an enum variant,
you control which kinds of nested HIR are visited; see
NestedVisitorMap for details. By “nested HIR”, we are
referring to bits of HIR that are not directly embedded within
one another but rather indirectly, through a table in the
crate. This is done to control dependencies during incremental
compilation: the non-inline bits of HIR can be tracked and
hashed separately. Read more
sourcefn visit_item(&mut self, item: &'tcx Item<'tcx>)
fn visit_item(&mut self, item: &'tcx Item<'tcx>)
Visits the top-level item and (optionally) nested items / impl items. See
visit_nested_item for details. Read more
fn visit_generic_param(&mut self, generic_param: &'tcx GenericParam<'tcx>)
fn visit_trait_item(&mut self, trait_item: &'tcx TraitItem<'tcx>)
fn visit_field_def(&mut self, struct_field: &'tcx FieldDef<'tcx>)
fn visit_arm(&mut self, arm: &'tcx Arm<'tcx>)
fn visit_foreign_item(&mut self, f_item: &'tcx ForeignItem<'tcx>)
fn visit_impl_item(&mut self, impl_item: &'tcx ImplItem<'tcx>)
fn visit_stmt(&mut self, stmt: &'tcx Stmt<'tcx>)
fn visit_expr(&mut self, expr: &'tcx Expr<'tcx>)
fn visit_variant(
&mut self,
variant: &'tcx Variant<'tcx>,
generics: &'tcx Generics<'tcx>,
item_id: HirId
)
fn visit_param(&mut self, param: &'tcx Param<'tcx>)
type Map: Map<'v> = <Self::NestedFilter as NestedFilter<'v>>::Map
sourcefn visit_nested_item(&mut self, id: ItemId)
fn visit_nested_item(&mut self, id: ItemId)
Invoked when a nested item is encountered. By default does
nothing unless you override nested_visit_map to return other than
None, in which case it will walk the item. You probably
don’t want to override this method – instead, override
nested_visit_map 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 more
sourcefn visit_nested_trait_item(&mut self, id: TraitItemId)
fn visit_nested_trait_item(&mut self, id: TraitItemId)
Like visit_nested_item(), but for trait items. See
visit_nested_item() for advice on when to override this
method. Read more
sourcefn visit_nested_impl_item(&mut self, id: ImplItemId)
fn visit_nested_impl_item(&mut self, id: ImplItemId)
Like visit_nested_item(), but for impl items. See
visit_nested_item() for advice on when to override this
method. Read more
sourcefn visit_nested_foreign_item(&mut self, id: ForeignItemId)
fn visit_nested_foreign_item(&mut self, id: ForeignItemId)
Like visit_nested_item(), but for foreign items. See
visit_nested_item() for advice on when to override this
method. Read more
sourcefn visit_nested_body(&mut self, id: BodyId)
fn visit_nested_body(&mut self, id: BodyId)
Invoked to visit the body of a function, method or closure. Like
visit_nested_item, does nothing by default unless you override
nested_visit_map to return other than None, in which case it will walk
the body. Read more
fn visit_body(&mut self, b: &'v Body<'v>)
sourcefn as_deep_visitor(&mut self) -> DeepVisitor<'_, Self>
fn as_deep_visitor(&mut self) -> DeepVisitor<'_, Self>
When invoking visit_all_item_likes(), you need to supply an
item-like visitor. This method converts an “intra-visit”
visitor into an item-like visitor that walks the entire tree.
If you use this, you probably don’t want to process the
contents of nested item-like things, since the outer loop will
visit them as well. Read more
fn visit_id(&mut self, _hir_id: HirId)
fn visit_name(&mut self, _span: Span, _name: Symbol)
fn visit_ident(&mut self, ident: Ident)
fn visit_mod(&mut self, m: &'v Mod<'v>, _s: Span, n: HirId)
fn visit_local(&mut self, l: &'v Local<'v>)
fn visit_block(&mut self, b: &'v Block<'v>)
fn visit_pat(&mut self, p: &'v Pat<'v>)
fn visit_array_length(&mut self, len: &'v ArrayLen)
fn visit_anon_const(&mut self, c: &'v AnonConst)
fn visit_let_expr(&mut self, lex: &'v Let<'v>)
fn visit_ty(&mut self, t: &'v Ty<'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_decl(&mut self, fd: &'v FnDecl<'v>)
fn visit_fn(
&mut self,
fk: FnKind<'v>,
fd: &'v FnDecl<'v>,
b: BodyId,
s: Span,
id: HirId
)
fn visit_use(&mut self, path: &'v Path<'v>, hir_id: HirId)
fn visit_trait_item_ref(&mut self, ii: &'v TraitItemRef)
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>,
m: TraitBoundModifier
)
fn visit_variant_data(
&mut self,
s: &'v VariantData<'v>,
Symbol,
&'v Generics<'v>,
_parent_id: HirId,
Span
)
fn visit_enum_def(
&mut self,
enum_definition: &'v EnumDef<'v>,
generics: &'v Generics<'v>,
item_id: HirId,
Span
)
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: &'v Path<'v>, _id: HirId)
fn visit_path_segment(
&mut self,
path_span: Span,
path_segment: &'v PathSegment<'v>
)
fn visit_generic_args(
&mut self,
path_span: Span,
generic_args: &'v GenericArgs<'v>
)
fn visit_assoc_type_binding(&mut self, type_binding: &'v TypeBinding<'v>)
fn visit_attribute(&mut self, _id: HirId, _attr: &'v Attribute)
fn visit_vis(&mut self, vis: &'v Spanned<VisibilityKind<'v>>)
fn visit_associated_item_kind(&mut self, kind: &'v AssocItemKind)
fn visit_defaultness(&mut self, defaultness: &'v Defaultness)
Auto Trait Implementations
impl<'tcx> !RefUnwindSafe for CheckAttrVisitor<'tcx>
impl<'tcx> !Send for CheckAttrVisitor<'tcx>
impl<'tcx> !Sync for CheckAttrVisitor<'tcx>
impl<'tcx> Unpin for CheckAttrVisitor<'tcx>
impl<'tcx> !UnwindSafe for CheckAttrVisitor<'tcx>
Blanket Implementations
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcepub fn borrow_mut(&mut self) -> &mut T
pub fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
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: 8 bytes