struct CheckAttrVisitor<'tcx> {
    tcx: TyCtxt<'tcx>,
    abort: Cell<bool>,
}

Fields§

§tcx: TyCtxt<'tcx>§abort: Cell<bool>

Implementations§

source§

impl CheckAttrVisitor<'_>

source

fn check_attributes( &self, hir_id: HirId, span: Span, target: Target, item: Option<ItemLike<'_>> )

Checks any attribute.

source

fn inline_attr_str_error_with_macro_def( &self, hir_id: HirId, attr: &Attribute, sym: &str )

source

fn inline_attr_str_error_without_macro_def( &self, hir_id: HirId, attr: &Attribute, sym: &str )

source

fn check_do_not_recommend(&self, attr_span: Span, target: Target) -> bool

Checks if #[do_not_recommend] is applied on a trait impl.

source

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

source

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.

source

fn check_coverage( &self, hir_id: HirId, attr: &Attribute, span: Span, target: Target ) -> bool

Checks if a #[coverage] is applied directly to a function

source

fn check_generic_attr( &self, hir_id: HirId, attr: &Attribute, target: Target, allowed_target: Target )

source

fn check_naked( &self, hir_id: HirId, attr: &Attribute, span: Span, target: Target ) -> bool

Checks if #[naked] is applied to a function definition.

source

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.

source

fn check_object_lifetime_default(&self, hir_id: HirId)

Debugging aid for object_lifetime_default query.

source

fn check_collapse_debuginfo( &self, attr: &Attribute, span: Span, target: Target ) -> bool

Checks if #[collapse_debuginfo] is applied to a macro.

source

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.

source

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.

source

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.

source

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.

source

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.

source

fn doc_attr_str_error(&self, meta: &NestedMetaItem, attr_name: &str)

source

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

source

fn check_doc_alias( &self, meta: &NestedMetaItem, hir_id: HirId, target: Target, aliases: &mut FxHashMap<String, Span> ) -> bool

source

fn check_doc_keyword(&self, meta: &NestedMetaItem, hir_id: HirId) -> bool

source

fn check_doc_fake_variadic(&self, meta: &NestedMetaItem, hir_id: HirId) -> bool

source

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.

source

fn check_doc_masked( &self, attr: &Attribute, meta: &NestedMetaItem, hir_id: HirId, target: Target ) -> bool

source

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.

source

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.

source

fn check_test_attr(&self, meta: &NestedMetaItem, hir_id: HirId) -> bool

Checks that doc(test(...)) attribute contains only valid attributes. Returns true if valid.

source

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.

source

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.

source

fn check_pass_by_value( &self, attr: &Attribute, span: Span, target: Target ) -> bool

Warns against some misuses of #[pass_by_value]

source

fn check_allow_incoherent_impl( &self, attr: &Attribute, span: Span, target: Target ) -> bool

source

fn check_has_incoherent_inherent_impls( &self, attr: &Attribute, span: Span, target: Target ) -> bool

source

fn check_ffi_pure( &self, attr_span: Span, attrs: &[Attribute], target: Target ) -> bool

source

fn check_ffi_const(&self, attr_span: Span, target: Target) -> bool

source

fn check_ffi_returns_twice(&self, attr_span: Span, target: Target) -> bool

source

fn check_must_use( &self, hir_id: HirId, attr: &Attribute, target: Target ) -> bool

Warns against some misuses of #[must_use]

source

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.

source

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.

Checks if #[link] is applied to an item other than a foreign module.

Checks if #[link_name] is applied to an item other than a foreign function or static.

Checks if #[no_link] is applied to an extern crate. Returns true if valid.

source

fn is_impl_item(&self, hir_id: HirId) -> bool

source

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.

source

fn check_rustc_layout_scalar_valid_range( &self, attr: &Attribute, span: Span, target: Target ) -> bool

source

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.

source

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.

source

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.

source

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.

source

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.

source

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.

source

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.

source

fn check_must_be_applied_to_trait( &self, attr: &Attribute, span: Span, target: Target ) -> bool

Checks if the attribute is applied to a trait.

Checks if #[link_section] is applied to a function or static.

source

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.

source

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.

source

fn check_used(&self, attrs: &[Attribute], target: Target)

source

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)

source

fn check_debugger_visualizer(&self, attr: &Attribute, target: Target) -> bool

Checks if the items on the #[debugger_visualizer] attribute are valid.

source

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)

source

fn check_rustc_safe_intrinsic( &self, hir_id: HirId, attr: &Attribute, span: Span, target: Target ) -> bool

source

fn check_rustc_std_internal_symbol( &self, attr: &Attribute, span: Span, target: Target ) -> bool

source

fn check_stability_promotable( &self, attr: &Attribute, _span: Span, target: Target ) -> bool

source

fn check_confusables(&self, attr: &Attribute, target: Target) -> bool

source

fn check_deprecated( &self, hir_id: HirId, attr: &Attribute, _span: Span, target: Target )

source

fn check_macro_use(&self, hir_id: HirId, attr: &Attribute, target: Target)

source

fn check_macro_export(&self, hir_id: HirId, attr: &Attribute, target: Target)

source

fn check_plugin_registrar( &self, hir_id: HirId, attr: &Attribute, target: Target )

source

fn check_unused_attribute(&self, hir_id: HirId, attr: &Attribute)

source

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>

§

type NestedFilter = OnlyBodies

Override this type to control which nested HIR are visited; see NestedFilter for details. If you override this type, you must also override nested_visit_map. Read more
source§

fn nested_visit_map(&mut self) -> Self::Map

If 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>)

Visits the top-level item and (optionally) nested items / impl items. See visit_nested_item for details.
source§

fn visit_generic_param(&mut self, generic_param: &'tcx GenericParam<'tcx>)

source§

fn visit_trait_item(&mut self, trait_item: &'tcx TraitItem<'tcx>)

source§

fn visit_field_def(&mut self, struct_field: &'tcx FieldDef<'tcx>)

source§

fn visit_arm(&mut self, arm: &'tcx Arm<'tcx>)

source§

fn visit_foreign_item(&mut self, f_item: &'tcx ForeignItem<'tcx>)

source§

fn visit_impl_item(&mut self, impl_item: &'tcx ImplItem<'tcx>)

source§

fn visit_stmt(&mut self, stmt: &'tcx Stmt<'tcx>)

source§

fn visit_expr(&mut self, expr: &'tcx Expr<'tcx>)

source§

fn visit_expr_field(&mut self, field: &'tcx ExprField<'tcx>)

source§

fn visit_variant(&mut self, variant: &'tcx Variant<'tcx>)

source§

fn visit_param(&mut self, param: &'tcx Param<'tcx>)

source§

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)

Invoked when a nested item is encountered. By default, when 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)

Like 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)

Like 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)

Like 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)

Invoked to visit the body of a function, method or closure. Like visit_nested_item, does nothing by default unless you override Self::NestedFilter.
source§

fn visit_body(&mut self, b: &'v Body<'v>)

source§

fn visit_id(&mut self, _hir_id: HirId)

source§

fn visit_name(&mut self, _name: Symbol)

source§

fn visit_ident(&mut self, ident: Ident)

source§

fn visit_mod(&mut self, m: &'v Mod<'v>, _s: Span, n: HirId)

source§

fn visit_local(&mut self, l: &'v Local<'v>)

source§

fn visit_block(&mut self, b: &'v Block<'v>)

source§

fn visit_pat(&mut self, p: &'v Pat<'v>)

source§

fn visit_array_length(&mut self, len: &'v ArrayLen)

source§

fn visit_anon_const(&mut self, c: &'v AnonConst)

source§

fn visit_inline_const(&mut self, c: &'v ConstBlock)

source§

fn visit_let_expr(&mut self, lex: &'v Let<'v>)

source§

fn visit_ty(&mut self, t: &'v Ty<'v>)

source§

fn visit_const_param_default(&mut self, _param: HirId, ct: &'v AnonConst)

source§

fn visit_generics(&mut self, g: &'v Generics<'v>)

source§

fn visit_where_predicate(&mut self, predicate: &'v WherePredicate<'v>)

source§

fn visit_fn_ret_ty(&mut self, ret_ty: &'v FnRetTy<'v>)

source§

fn visit_fn_decl(&mut self, fd: &'v FnDecl<'v>)

source§

fn visit_fn( &mut self, fk: FnKind<'v>, fd: &'v FnDecl<'v>, b: BodyId, _: Span, id: LocalDefId )

source§

fn visit_use( &mut self, path: &'v Path<'v, SmallVec<[Res<HirId>; 3]>>, hir_id: HirId )

source§

fn visit_trait_item_ref(&mut self, ii: &'v TraitItemRef)

source§

fn visit_foreign_item_ref(&mut self, ii: &'v ForeignItemRef)

source§

fn visit_impl_item_ref(&mut self, ii: &'v ImplItemRef)

source§

fn visit_trait_ref(&mut self, t: &'v TraitRef<'v>)

source§

fn visit_param_bound(&mut self, bounds: &'v GenericBound<'v>)

source§

fn visit_poly_trait_ref(&mut self, t: &'v PolyTraitRef<'v>)

source§

fn visit_variant_data(&mut self, s: &'v VariantData<'v>)

source§

fn visit_enum_def(&mut self, enum_definition: &'v EnumDef<'v>, item_id: HirId)

source§

fn visit_label(&mut self, label: &'v Label)

source§

fn visit_infer(&mut self, inf: &'v InferArg)

source§

fn visit_generic_arg(&mut self, generic_arg: &'v GenericArg<'v>)

source§

fn visit_lifetime(&mut self, lifetime: &'v Lifetime)

source§

fn visit_qpath(&mut self, qpath: &'v QPath<'v>, id: HirId, _span: Span)

source§

fn visit_path(&mut self, path: &Path<'v, Res<HirId>>, _id: HirId)

source§

fn visit_path_segment(&mut self, path_segment: &'v PathSegment<'v>)

source§

fn visit_generic_args(&mut self, generic_args: &'v GenericArgs<'v>)

source§

fn visit_assoc_type_binding(&mut self, type_binding: &'v TypeBinding<'v>)

source§

fn visit_attribute(&mut self, _attr: &'v Attribute)

source§

fn visit_associated_item_kind(&mut self, kind: &'v AssocItemKind)

source§

fn visit_defaultness(&mut self, defaultness: &'v Defaultness)

source§

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> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for Twhere U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T, U> TryFrom<U> for Twhere U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.

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