Struct rustc_passes::check_attr::CheckAttrVisitor
source · struct CheckAttrVisitor<'tcx> {
tcx: TyCtxt<'tcx>,
abort: Cell<bool>,
}
Fields§
§tcx: TyCtxt<'tcx>
§abort: Cell<bool>
Implementations§
source§impl 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_do_not_recommend(&self, attr_span: Span, target: Target) -> bool
fn check_do_not_recommend(&self, attr_span: Span, target: Target) -> bool
Checks if #[do_not_recommend]
is applied on a trait impl.
sourcefn check_diagnostic_on_unimplemented(
&self,
attr_span: Span,
hir_id: HirId,
target: Target
)
fn check_diagnostic_on_unimplemented( &self, attr_span: Span, hir_id: HirId, target: Target )
Checks if #[diagnostic::on_unimplemented]
is applied to a trait definition
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.
sourcefn check_coverage(
&self,
hir_id: HirId,
attr: &Attribute,
span: Span,
target: Target
) -> bool
fn check_coverage( &self, hir_id: HirId, attr: &Attribute, span: Span, target: Target ) -> bool
Checks if a #[coverage]
is applied directly to a function
fn check_generic_attr( &self, hir_id: HirId, attr: &Attribute, target: Target, allowed_target: 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,
hir_id: HirId,
attr: &Attribute,
span: Span,
target: Target
) -> bool
fn check_cmse_nonsecure_entry( &self, hir_id: HirId, attr: &Attribute, span: Span, target: Target ) -> bool
Checks if #[cmse_nonsecure_entry]
is applied to a function definition.
sourcefn check_object_lifetime_default(&self, hir_id: HirId)
fn check_object_lifetime_default(&self, hir_id: HirId)
Debugging aid for object_lifetime_default
query.
sourcefn check_collapse_debuginfo(
&self,
attr: &Attribute,
span: Span,
target: Target
) -> bool
fn check_collapse_debuginfo( &self, attr: &Attribute, span: Span, target: Target ) -> bool
Checks if #[collapse_debuginfo]
is applied to a macro.
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_target_feature(
&self,
hir_id: HirId,
attr: &Attribute,
span: Span,
target: Target,
attrs: &[Attribute]
) -> bool
fn check_target_feature( &self, hir_id: HirId, attr: &Attribute, span: Span, target: Target, attrs: &[Attribute] ) -> bool
Checks if the #[target_feature]
attribute on item
is valid. Returns true
if valid.
sourcefn check_thread_local(
&self,
attr: &Attribute,
span: Span,
target: Target
) -> bool
fn check_thread_local( &self, attr: &Attribute, span: Span, target: Target ) -> bool
Checks if the #[thread_local]
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: Symbol, 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
fn check_doc_fake_variadic(&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.
fn check_doc_masked( &self, attr: &Attribute, meta: &NestedMetaItem, hir_id: HirId, target: Target ) -> bool
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_cfg_hide(&self, meta: &NestedMetaItem, hir_id: HirId) -> bool
fn check_doc_cfg_hide(&self, meta: &NestedMetaItem, hir_id: HirId) -> bool
Check that the #![doc(cfg_hide(...))]
attribute only contains a list of 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]
fn check_allow_incoherent_impl( &self, attr: &Attribute, span: Span, target: Target ) -> bool
fn check_has_incoherent_inherent_impls( &self, attr: &Attribute, span: Span, target: Target ) -> bool
fn check_ffi_pure( &self, attr_span: Span, attrs: &[Attribute], target: Target ) -> bool
fn check_ffi_const(&self, attr_span: Span, target: Target) -> bool
fn check_ffi_returns_twice(&self, attr_span: Span, target: Target) -> bool
sourcefn check_must_use(
&self,
hir_id: HirId,
attr: &Attribute,
target: Target
) -> bool
fn check_must_use( &self, hir_id: HirId, attr: &Attribute, 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,
hir_id: HirId,
attr: &Attribute,
span: Span,
target: Target,
item: Option<ItemLike<'_>>
) -> bool
fn check_rustc_legacy_const_generics( &self, hir_id: HirId, 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.
sourcefn check_applied_to_fn_or_method(
&self,
hir_id: HirId,
attr: &Attribute,
span: Span,
target: Target
) -> bool
fn check_applied_to_fn_or_method( &self, hir_id: HirId, attr: &Attribute, span: Span, target: Target ) -> bool
Helper function for checking that the provided attribute is only applied to a function or method.
sourcefn check_rustc_lint_query_instability(
&self,
hir_id: HirId,
attr: &Attribute,
span: Span,
target: Target
) -> bool
fn check_rustc_lint_query_instability( &self, hir_id: HirId, attr: &Attribute, span: Span, target: Target ) -> bool
Checks that the #[rustc_lint_query_instability]
attribute is only applied to a function
or method.
sourcefn check_rustc_lint_diagnostics(
&self,
hir_id: HirId,
attr: &Attribute,
span: Span,
target: Target
) -> bool
fn check_rustc_lint_diagnostics( &self, hir_id: HirId, attr: &Attribute, span: Span, target: Target ) -> bool
Checks that the #[rustc_lint_diagnostics]
attribute is only applied to a function or
method.
sourcefn check_rustc_lint_opt_ty(
&self,
attr: &Attribute,
span: Span,
target: Target
) -> bool
fn check_rustc_lint_opt_ty( &self, attr: &Attribute, span: Span, target: Target ) -> bool
Checks that the #[rustc_lint_opt_ty]
attribute is only applied to a struct.
sourcefn check_rustc_lint_opt_deny_field_access(
&self,
attr: &Attribute,
span: Span,
target: Target
) -> bool
fn check_rustc_lint_opt_deny_field_access( &self, attr: &Attribute, span: Span, target: Target ) -> bool
Checks that the #[rustc_lint_opt_deny_field_access]
attribute is only applied to a field.
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_must_be_applied_to_trait(
&self,
attr: &Attribute,
span: Span,
target: Target
) -> bool
fn check_must_be_applied_to_trait( &self, attr: &Attribute, span: Span, target: Target ) -> bool
Checks if the attribute is applied to a trait.
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_debugger_visualizer(&self, attr: &Attribute, target: Target) -> bool
fn check_debugger_visualizer(&self, attr: &Attribute, target: Target) -> bool
Checks if the items on the #[debugger_visualizer]
attribute are valid.
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)
fn check_rustc_safe_intrinsic( &self, hir_id: HirId, attr: &Attribute, span: Span, target: Target ) -> bool
fn check_rustc_std_internal_symbol( &self, attr: &Attribute, span: Span, target: Target ) -> bool
fn check_stability_promotable( &self, attr: &Attribute, _span: Span, target: Target ) -> bool
fn check_link_ordinal( &self, attr: &Attribute, _span: Span, target: Target ) -> bool
fn check_confusables(&self, attr: &Attribute, 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 )
fn check_unused_attribute(&self, hir_id: HirId, attr: &Attribute)
sourcefn check_proc_macro(&self, hir_id: HirId, target: Target, kind: ProcMacroKind)
fn check_proc_macro(&self, hir_id: HirId, target: Target, kind: ProcMacroKind)
A best effort attempt to create an error for a mismatching proc macro signature.
If this best effort goes wrong, it will just emit a worse error later (see #102923)
Trait Implementations§
source§impl<'tcx> Visitor<'tcx> for CheckAttrVisitor<'tcx>
impl<'tcx> Visitor<'tcx> for CheckAttrVisitor<'tcx>
§type NestedFilter = OnlyBodies
type NestedFilter = OnlyBodies
NestedFilter
for details. If you override this type, you
must also override nested_visit_map
. Read moresource§fn nested_visit_map(&mut self) -> Self::Map
fn nested_visit_map(&mut self) -> Self::Map
type NestedFilter
is set to visit nested items, this method
must also be overridden to provide a map to retrieve nested items.source§fn visit_item(&mut self, item: &'tcx Item<'tcx>)
fn visit_item(&mut self, item: &'tcx Item<'tcx>)
visit_nested_item
for details.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_expr_field(&mut self, field: &'tcx ExprField<'tcx>)
fn visit_variant(&mut self, variant: &'tcx Variant<'tcx>)
fn visit_param(&mut self, param: &'tcx Param<'tcx>)
fn visit_pat_field(&mut self, field: &'tcx PatField<'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 at
rustc_hir::intravisit
. 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.source§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.source§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.source§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.source§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
.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_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_inline_const(&mut self, c: &'v ConstBlock)
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_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: LocalDefId )
fn visit_use( &mut self, path: &'v Path<'v, SmallVec<[Res<HirId>; 3]>>, 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>)
fn visit_variant_data(&mut self, s: &'v VariantData<'v>)
fn visit_enum_def(&mut self, enum_definition: &'v EnumDef<'v>, item_id: HirId)
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 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§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
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: 16 bytes