Struct rustc_ast_passes::ast_validation::AstValidator
source · struct AstValidator<'a> {
session: &'a Session,
extern_mod: Option<&'a Item>,
in_trait_impl: bool,
in_const_trait_impl: bool,
has_proc_macro_decls: bool,
outer_impl_trait: Option<Span>,
disallow_tilde_const: Option<DisallowTildeConstContext<'a>>,
is_impl_trait_banned: bool,
is_assoc_ty_bound_banned: bool,
forbidden_let_reason: Option<ForbiddenLetReason>,
lint_buffer: &'a mut LintBuffer,
}
Fields§
§session: &'a Session
§extern_mod: Option<&'a Item>
The span of the extern
in an extern { ... }
block, if any.
in_trait_impl: bool
Are we inside a trait impl?
in_const_trait_impl: bool
§has_proc_macro_decls: bool
§outer_impl_trait: Option<Span>
Used to ban nested impl Trait
, e.g., impl Into<impl Debug>
.
Nested impl Trait
is allowed in associated type position,
e.g., impl Iterator<Item = impl Debug>
.
disallow_tilde_const: Option<DisallowTildeConstContext<'a>>
§is_impl_trait_banned: bool
Used to ban impl Trait
in path projections like <impl Iterator>::Item
or Foo::Bar<impl Trait>
is_assoc_ty_bound_banned: bool
Used to ban associated type bounds (i.e., Type<AssocType: Bounds>
) in
certain positions.
forbidden_let_reason: Option<ForbiddenLetReason>
§lint_buffer: &'a mut LintBuffer
Implementations§
source§impl<'a> AstValidator<'a>
impl<'a> AstValidator<'a>
fn with_in_trait_impl(
&mut self,
is_in: bool,
constness: Option<Const>,
f: impl FnOnce(&mut Self)
)
fn with_banned_impl_trait(&mut self, f: impl FnOnce(&mut Self))
fn with_tilde_const(
&mut self,
disallowed: Option<DisallowTildeConstContext<'a>>,
f: impl FnOnce(&mut Self)
)
fn with_tilde_const_allowed(&mut self, f: impl FnOnce(&mut Self))
fn with_banned_tilde_const(
&mut self,
ctx: DisallowTildeConstContext<'a>,
f: impl FnOnce(&mut Self)
)
fn with_let_management(
&mut self,
forbidden_let_reason: Option<ForbiddenLetReason>,
f: impl FnOnce(&mut Self, Option<ForbiddenLetReason>)
)
sourcefn ban_let_expr(&self, expr: &'a Expr, forbidden_let_reason: ForbiddenLetReason)
fn ban_let_expr(&self, expr: &'a Expr, forbidden_let_reason: ForbiddenLetReason)
Emits an error banning the let
expression provided in the given location.
fn check_gat_where(
&mut self,
id: NodeId,
before_predicates: &[WherePredicate],
where_clauses: (TyAliasWhereClause, TyAliasWhereClause)
)
fn with_banned_assoc_ty_bound(&mut self, f: impl FnOnce(&mut Self))
fn with_impl_trait(&mut self, outer: Option<Span>, f: impl FnOnce(&mut Self))
fn visit_assoc_constraint_from_generic_args(
&mut self,
constraint: &'a AssocConstraint
)
fn walk_ty(&mut self, t: &'a Ty)
fn err_handler(&self) -> &Handler
fn check_lifetime(&self, ident: Ident)
fn check_label(&self, ident: Ident)
fn invalid_visibility(
&self,
vis: &Visibility,
note: Option<InvalidVisibilityNote>
)
fn check_decl_no_pat(
decl: &FnDecl,
report_err: impl FnMut(Span, Option<Ident>, bool)
)
fn check_trait_fn_not_const(&self, constness: Const)
fn check_late_bound_lifetime_defs(&self, params: &[GenericParam])
fn check_fn_decl(&self, fn_decl: &FnDecl, self_semantic: SelfSemantic)
sourcefn check_decl_num_args(&self, fn_decl: &FnDecl)
fn check_decl_num_args(&self, fn_decl: &FnDecl)
Emits fatal error if function declaration has more than u16::MAX
arguments
Error is fatal to prevent errors during typechecking
fn check_decl_cvaradic_pos(&self, fn_decl: &FnDecl)
fn check_decl_attrs(&self, fn_decl: &FnDecl)
fn check_decl_self_param(&self, fn_decl: &FnDecl, self_semantic: SelfSemantic)
fn check_defaultness(&self, span: Span, defaultness: Defaultness)
sourcefn ending_semi_or_hi(&self, sp: Span) -> Span
fn ending_semi_or_hi(&self, sp: Span) -> Span
If sp
ends with a semicolon, returns it as a Span
Otherwise, returns sp.shrink_to_hi()
fn check_type_no_bounds(&self, bounds: &[GenericBound], ctx: &str)
fn check_foreign_ty_genericless(&self, generics: &Generics, where_span: Span)
fn check_foreign_kind_bodyless(&self, ident: Ident, kind: &str, body: Option<Span>)
sourcefn check_foreign_fn_bodyless(&self, ident: Ident, body: Option<&Block>)
fn check_foreign_fn_bodyless(&self, ident: Ident, body: Option<&Block>)
An fn
in extern { ... }
cannot have a body { ... }
.
fn current_extern_span(&self) -> Span
sourcefn check_foreign_fn_headerless(&self, ident: Ident, span: Span, header: FnHeader)
fn check_foreign_fn_headerless(&self, ident: Ident, span: Span, header: FnHeader)
An fn
in extern { ... }
cannot have qualifiers, e.g. async fn
.
sourcefn check_foreign_item_ascii_only(&self, ident: Ident)
fn check_foreign_item_ascii_only(&self, ident: Ident)
An item in extern { ... }
cannot use non-ascii identifier.
sourcefn check_c_variadic_type(&self, fk: FnKind<'a>)
fn check_c_variadic_type(&self, fk: FnKind<'a>)
Reject C-variadic type unless the function is foreign,
or free and unsafe extern "C"
semantically.
fn check_item_named(&self, ident: Ident, kind: &str)
fn check_nomangle_item_asciionly(&self, ident: Ident, item_span: Span)
fn check_mod_file_item_asciionly(&self, ident: Ident)
fn deny_generic_params(&self, generics: &Generics, ident_span: Span)
fn emit_e0568(&self, span: Span, ident_span: Span)
fn deny_super_traits(&self, bounds: &GenericBounds, ident_span: Span)
fn deny_where_clause(&self, where_clause: &WhereClause, ident_span: Span)
fn deny_items(&self, trait_items: &[P<AssocItem>], ident_span: Span)
fn correct_generic_order_suggestion(&self, data: &AngleBracketedArgs) -> String
sourcefn check_generic_args_before_constraints(&self, data: &AngleBracketedArgs)
fn check_generic_args_before_constraints(&self, data: &AngleBracketedArgs)
Enforce generic args coming before constraints in <...>
of a path segment.
fn visit_ty_common(&mut self, ty: &'a Ty)
fn maybe_lint_missing_abi(&mut self, span: Span, id: NodeId)
Trait Implementations§
source§impl<'a> Visitor<'a> for AstValidator<'a>
impl<'a> Visitor<'a> for AstValidator<'a>
fn visit_attribute(&mut self, attr: &Attribute)
fn visit_expr(&mut self, expr: &'a Expr)
fn visit_ty(&mut self, ty: &'a Ty)
fn visit_label(&mut self, label: &'a Label)
fn visit_lifetime(&mut self, lifetime: &'a Lifetime, _: LifetimeCtxt)
fn visit_field_def(&mut self, field: &'a FieldDef)
fn visit_item(&mut self, item: &'a Item)
fn visit_foreign_item(&mut self, fi: &'a ForeignItem)
fn visit_generic_args(&mut self, generic_args: &'a GenericArgs)
fn visit_generics(&mut self, generics: &'a Generics)
fn visit_generic_param(&mut self, param: &'a GenericParam)
fn visit_param_bound(&mut self, bound: &'a GenericBound, ctxt: BoundKind)
fn visit_poly_trait_ref(&mut self, t: &'a PolyTraitRef)
fn visit_variant_data(&mut self, s: &'a VariantData)
fn visit_enum_def(&mut self, enum_definition: &'a EnumDef)
fn visit_fn(&mut self, fk: FnKind<'a>, span: Span, id: NodeId)
fn visit_assoc_item(&mut self, item: &'a AssocItem, ctxt: AssocCtxt)
fn visit_ident(&mut self, _ident: Ident)
fn visit_local(&mut self, l: &'ast Local)
fn visit_block(&mut self, b: &'ast Block)
fn visit_stmt(&mut self, s: &'ast Stmt)
fn visit_param(&mut self, param: &'ast Param)
fn visit_arm(&mut self, a: &'ast Arm)
fn visit_pat(&mut self, p: &'ast Pat)
fn visit_anon_const(&mut self, c: &'ast AnonConst)
source§fn visit_method_receiver_expr(&mut self, ex: &'ast Expr)
fn visit_method_receiver_expr(&mut self, ex: &'ast Expr)
stmt_expr_attributes
.
It can be removed once that feature is stabilized. Read morefn visit_expr_post(&mut self, _ex: &'ast Expr)
fn visit_closure_binder(&mut self, b: &'ast ClosureBinder)
fn visit_where_predicate(&mut self, p: &'ast WherePredicate)
fn visit_trait_ref(&mut self, t: &'ast TraitRef)
fn visit_variant(&mut self, v: &'ast Variant)
fn visit_mac_call(&mut self, mac: &'ast MacCall)
fn visit_mac_def(&mut self, _mac: &'ast MacroDef, _id: NodeId)
fn visit_path(&mut self, path: &'ast Path, _id: NodeId)
fn visit_use_tree(&mut self, use_tree: &'ast UseTree, id: NodeId, _nested: bool)
fn visit_path_segment(&mut self, path_segment: &'ast PathSegment)
fn visit_generic_arg(&mut self, generic_arg: &'ast GenericArg)
fn visit_assoc_constraint(&mut self, constraint: &'ast AssocConstraint)
fn visit_vis(&mut self, vis: &'ast Visibility)
fn visit_fn_ret_ty(&mut self, ret_ty: &'ast FnRetTy)
fn visit_fn_header(&mut self, _header: &'ast FnHeader)
fn visit_expr_field(&mut self, f: &'ast ExprField)
fn visit_pat_field(&mut self, fp: &'ast PatField)
fn visit_crate(&mut self, krate: &'ast Crate)
fn visit_inline_asm(&mut self, asm: &'ast InlineAsm)
fn visit_inline_asm_sym(&mut self, sym: &'ast InlineAsmSym)
Auto Trait Implementations§
impl<'a> !RefUnwindSafe for AstValidator<'a>
impl<'a> !Send for AstValidator<'a>
impl<'a> !Sync for AstValidator<'a>
impl<'a> Unpin for AstValidator<'a>
impl<'a> !UnwindSafe for AstValidator<'a>
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: 104 bytes