rustc_passes::check_attr

Struct CheckAttrVisitor

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

Fields§

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

Implementations§

Source§

impl<'tcx> CheckAttrVisitor<'tcx>

Source

fn dcx(&self) -> DiagCtxtHandle<'tcx>

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, hir_id: HirId, target: Target)

Checks if #[diagnostic::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, )

Checks if an #[inline] is applied to a function or a closure.

Source

fn check_coverage(&self, attr: &Attribute, span: Span, target: Target)

Checks that #[coverage(..)] is applied to a function/closure/method, or to an impl block or module.

Source

fn check_optimize( &self, hir_id: HirId, attr: &Attribute, span: Span, target: Target, )

Checks that #[optimize(..)] is applied to a function/closure/method, or to an impl block or module.

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, attrs: &[Attribute], )

Checks if #[naked] 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)

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

Checks if a #[track_caller] is applied to a function.

Source

fn check_non_exhaustive( &self, hir_id: HirId, attr: &Attribute, span: Span, target: Target, )

Checks if the #[non_exhaustive] attribute on an item is valid.

Source

fn check_marker( &self, hir_id: HirId, attr: &Attribute, span: Span, target: Target, )

Checks if the #[marker] attribute on an item is valid.

Source

fn check_target_feature( &self, hir_id: HirId, attr: &Attribute, span: Span, target: Target, attrs: &[Attribute], )

Checks if the #[target_feature] attribute on item is valid.

Source

fn check_thread_local(&self, attr: &Attribute, span: Span, target: Target)

Checks if the #[thread_local] attribute on item is valid.

Source

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

Source

fn check_doc_alias_value( &self, meta: &MetaItemInner, doc_alias: Symbol, hir_id: HirId, target: Target, is_list: bool, aliases: &mut FxHashMap<String, Span>, )

Source

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

Source

fn check_doc_keyword(&self, meta: &MetaItemInner, hir_id: HirId)

Source

fn check_doc_fake_variadic(&self, meta: &MetaItemInner, hir_id: HirId)

Source

fn check_doc_search_unbox(&self, meta: &MetaItemInner, hir_id: HirId)

Source

fn check_doc_inline( &self, attr: &Attribute, meta: &MetaItemInner, hir_id: HirId, target: Target, specified_inline: &mut Option<(bool, Span)>, )

Checks #[doc(inline)]/#[doc(no_inline)] attributes.

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: &MetaItemInner, hir_id: HirId, target: Target, )

Source

fn check_attr_not_crate_level( &self, meta: &MetaItemInner, 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: &MetaItemInner, 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: &MetaItemInner, hir_id: HirId)

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

Source

fn check_doc_cfg_hide(&self, meta: &MetaItemInner, hir_id: HirId)

Check that the #![doc(cfg_hide(...))] attribute only contains a list of attributes.

Source

fn check_doc_attrs( &self, attr: &Attribute, hir_id: HirId, target: Target, specified_inline: &mut Option<(bool, Span)>, aliases: &mut FxHashMap<String, Span>, )

Runs various checks on #[doc] attributes.

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)

Warns against some misuses of #[pass_by_value]

Source

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

Source

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

Source

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

Source

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

Source

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

Warns against some misuses of #[must_use]

Source

fn check_must_not_suspend(&self, attr: &Attribute, span: Span, target: Target)

Checks if #[must_not_suspend] is applied to a struct, enum, union, or trait.

Source

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

Checks if #[may_dangle] is applied to a lifetime or type generic parameter in Drop impl.

Source

fn check_cold( &self, hir_id: HirId, attr: &Attribute, span: Span, target: Target, )

Checks if #[cold] is applied to a non-function.

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.

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

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

Source

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

Source

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

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

Helper function for checking that the provided attribute is only applied to a function or method.

Source

fn check_rustc_lint_opt_ty(&self, attr: &Attribute, span: Span, target: Target)

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

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)

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

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_align_value(&self, item: &MetaItemInner)

Source

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

Source

fn check_allow_internal_unstable( &self, hir_id: HirId, attr: &Attribute, span: Span, target: Target, attrs: &[Attribute], )

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)

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

Outputs an error for #[allow_internal_unstable] which can only be applied to macros. (Allows proc_macro functions)

Source

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

Source

fn check_stability_promotable(&self, attr: &Attribute, target: Target)

Source

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

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

Source

fn check_coroutine(&self, attr: &Attribute, target: Target)

Source

fn check_linkage(&self, attr: &Attribute, span: Span, target: Target)

Source

fn check_rustc_pub_transparent( &self, attr_span: Span, span: Span, attrs: &[Attribute], )

Source

fn check_autodiff( &self, _hir_id: HirId, _attr: &Attribute, span: Span, target: Target, )

Checks if #[autodiff] is applied to an item other than a function item.

Trait Implementations§

Source§

impl<'tcx> Visitor<'tcx> for CheckAttrVisitor<'tcx>

Source§

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

§

type Result = ()

The result type of the visit_* methods. Can be either (), or ControlFlow<T>.
§

fn visit_nested_item(&mut self, id: ItemId) -> Self::Result

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.
§

fn visit_nested_trait_item(&mut self, id: TraitItemId) -> Self::Result

Like visit_nested_item(), but for trait items. See visit_nested_item() for advice on when to override this method.
§

fn visit_nested_impl_item(&mut self, id: ImplItemId) -> Self::Result

Like visit_nested_item(), but for impl items. See visit_nested_item() for advice on when to override this method.
§

fn visit_nested_foreign_item(&mut self, id: ForeignItemId) -> Self::Result

Like visit_nested_item(), but for foreign items. See visit_nested_item() for advice on when to override this method.
§

fn visit_nested_body(&mut self, id: BodyId) -> Self::Result

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

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

§

fn visit_id(&mut self, _hir_id: HirId) -> Self::Result

§

fn visit_name(&mut self, _name: Symbol) -> Self::Result

§

fn visit_ident(&mut self, ident: Ident) -> Self::Result

§

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

§

fn visit_local(&mut self, l: &'v LetStmt<'v>) -> Self::Result

§

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

§

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

§

fn visit_array_length(&mut self, len: &'v ArrayLen<'v>) -> Self::Result

§

fn visit_anon_const(&mut self, c: &'v AnonConst) -> Self::Result

§

fn visit_inline_const(&mut self, c: &'v ConstBlock) -> Self::Result

§

fn visit_const_arg(&mut self, c: &'v ConstArg<'v>) -> Self::Result

§

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

§

fn visit_pattern_type_pattern(&mut self, _p: &'v Pat<'v>)

§

fn visit_const_param_default( &mut self, _param: HirId, ct: &'v ConstArg<'v>, ) -> Self::Result

§

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

§

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

§

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

§

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

§

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

§

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

§

fn visit_trait_item_ref(&mut self, ii: &'v TraitItemRef) -> Self::Result

§

fn visit_foreign_item_ref(&mut self, ii: &'v ForeignItemRef) -> Self::Result

§

fn visit_impl_item_ref(&mut self, ii: &'v ImplItemRef) -> Self::Result

§

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

§

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

§

fn visit_precise_capturing_arg( &mut self, arg: &'v PreciseCapturingArg<'v>, ) -> Self::Result

§

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

§

fn visit_opaque_ty(&mut self, opaque: &'v OpaqueTy<'v>) -> Self::Result

§

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

§

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

§

fn visit_label(&mut self, label: &'v Label) -> Self::Result

§

fn visit_infer(&mut self, inf: &'v InferArg) -> Self::Result

§

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

§

fn visit_lifetime(&mut self, lifetime: &'v Lifetime) -> Self::Result

§

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

§

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

§

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

§

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

§

fn visit_assoc_item_constraint( &mut self, constraint: &'v AssocItemConstraint<'v>, ) -> Self::Result

§

fn visit_attribute(&mut self, _attr: &'v Attribute) -> Self::Result

§

fn visit_associated_item_kind( &mut self, kind: &'v AssocItemKind, ) -> Self::Result

§

fn visit_defaultness(&mut self, defaultness: &'v Defaultness) -> Self::Result

§

fn visit_inline_asm( &mut self, asm: &'v InlineAsm<'v>, id: HirId, ) -> Self::Result

Auto Trait Implementations§

§

impl<'tcx> DynSend for CheckAttrVisitor<'tcx>

§

impl<'tcx> !DynSync for CheckAttrVisitor<'tcx>

§

impl<'tcx> !Freeze for CheckAttrVisitor<'tcx>

§

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> Aligned for T

Source§

const ALIGN: Alignment = _

Alignment of Self.
Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

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

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

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

Source§

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

Mutably borrows from an owned value. Read more
§

impl<T, R> CollectAndApply<T, R> for T

§

fn collect_and_apply<I, F>(iter: I, f: F) -> R
where I: Iterator<Item = T>, F: FnOnce(&[T]) -> R,

Equivalent to f(&iter.collect::<Vec<_>>()).

§

type Output = R

Source§

impl<T> Filterable for T

Source§

fn filterable( self, filter_name: &'static str, ) -> RequestFilterDataProvider<T, fn(_: DataRequest<'_>) -> bool>

Creates a filterable data provider with the given name for debugging. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where 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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<P> IntoQueryParam<P> for P

Source§

impl<T> MaybeResult<T> for T

Source§

type Error = !

Source§

fn from(_: Result<T, <T as MaybeResult<T>>::Error>) -> T

Source§

fn to_result(self) -> Result<T, <T as MaybeResult<T>>::Error>

Source§

impl<T> Pointable for T

Source§

const ALIGN: usize = _

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

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

Source§

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 T
where U: TryFrom<T>,

Source§

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.
§

impl<I, T, U> Upcast<I, U> for T
where U: UpcastFrom<I, T>,

§

fn upcast(self, interner: I) -> U

§

impl<I, T> UpcastFrom<I, T> for T

§

fn upcast_from(from: T, _tcx: I) -> T

Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

§

impl<Tcx, T> Value<Tcx> for T
where Tcx: DepContext,

§

default fn from_cycle_error( tcx: Tcx, cycle_error: &CycleError, _guar: ErrorGuaranteed, ) -> T

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<'a, T> Captures<'a> for T
where T: ?Sized,

Source§

impl<T> ErasedDestructor for T
where T: 'static,

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