Skip to content

Commit 2834f57

Browse files
committed
ast: Fix naming conventions in AST structures
TraitKind -> Trait TyAliasKind -> TyAlias ImplKind -> Impl FnKind -> Fn All `*Kind`s in AST are supposed to be enums. Tuple structs are converted to braced structs for the types above, and fields are reordered in syntactic order. Also, mutable AST visitor now correctly visit spans in defaultness, unsafety, impl polarity and constness.
1 parent 90a273b commit 2834f57

File tree

28 files changed

+426
-289
lines changed

28 files changed

+426
-289
lines changed

compiler/rustc_ast/src/ast.rs

+38-30
Original file line numberDiff line numberDiff line change
@@ -2645,34 +2645,42 @@ impl Default for FnHeader {
26452645
}
26462646

26472647
#[derive(Clone, Encodable, Decodable, Debug)]
2648-
pub struct TraitKind(
2649-
pub IsAuto,
2650-
pub Unsafe,
2651-
pub Generics,
2652-
pub GenericBounds,
2653-
pub Vec<P<AssocItem>>,
2654-
);
2648+
pub struct Trait {
2649+
pub unsafety: Unsafe,
2650+
pub is_auto: IsAuto,
2651+
pub generics: Generics,
2652+
pub bounds: GenericBounds,
2653+
pub items: Vec<P<AssocItem>>,
2654+
}
26552655

26562656
#[derive(Clone, Encodable, Decodable, Debug)]
2657-
pub struct TyAliasKind(pub Defaultness, pub Generics, pub GenericBounds, pub Option<P<Ty>>);
2657+
pub struct TyAlias {
2658+
pub defaultness: Defaultness,
2659+
pub generics: Generics,
2660+
pub bounds: GenericBounds,
2661+
pub ty: Option<P<Ty>>,
2662+
}
26582663

26592664
#[derive(Clone, Encodable, Decodable, Debug)]
2660-
pub struct ImplKind {
2661-
pub unsafety: Unsafe,
2662-
pub polarity: ImplPolarity,
2665+
pub struct Impl {
26632666
pub defaultness: Defaultness,
2664-
pub constness: Const,
2667+
pub unsafety: Unsafe,
26652668
pub generics: Generics,
2666-
2669+
pub constness: Const,
2670+
pub polarity: ImplPolarity,
26672671
/// The trait being implemented, if any.
26682672
pub of_trait: Option<TraitRef>,
2669-
26702673
pub self_ty: P<Ty>,
26712674
pub items: Vec<P<AssocItem>>,
26722675
}
26732676

26742677
#[derive(Clone, Encodable, Decodable, Debug)]
2675-
pub struct FnKind(pub Defaultness, pub FnSig, pub Generics, pub Option<P<Block>>);
2678+
pub struct Fn {
2679+
pub defaultness: Defaultness,
2680+
pub generics: Generics,
2681+
pub sig: FnSig,
2682+
pub body: Option<P<Block>>,
2683+
}
26762684

26772685
#[derive(Clone, Encodable, Decodable, Debug)]
26782686
pub enum ItemKind {
@@ -2695,7 +2703,7 @@ pub enum ItemKind {
26952703
/// A function declaration (`fn`).
26962704
///
26972705
/// E.g., `fn foo(bar: usize) -> usize { .. }`.
2698-
Fn(Box<FnKind>),
2706+
Fn(Box<Fn>),
26992707
/// A module declaration (`mod`).
27002708
///
27012709
/// E.g., `mod foo;` or `mod foo { .. }`.
@@ -2711,7 +2719,7 @@ pub enum ItemKind {
27112719
/// A type alias (`type`).
27122720
///
27132721
/// E.g., `type Foo = Bar<u8>;`.
2714-
TyAlias(Box<TyAliasKind>),
2722+
TyAlias(Box<TyAlias>),
27152723
/// An enum definition (`enum`).
27162724
///
27172725
/// E.g., `enum Foo<A, B> { C<A>, D<B> }`.
@@ -2727,15 +2735,15 @@ pub enum ItemKind {
27272735
/// A trait declaration (`trait`).
27282736
///
27292737
/// E.g., `trait Foo { .. }`, `trait Foo<T> { .. }` or `auto trait Foo {}`.
2730-
Trait(Box<TraitKind>),
2738+
Trait(Box<Trait>),
27312739
/// Trait alias
27322740
///
27332741
/// E.g., `trait Foo = Bar + Quux;`.
27342742
TraitAlias(Generics, GenericBounds),
27352743
/// An implementation.
27362744
///
27372745
/// E.g., `impl<A> Foo<A> { .. }` or `impl<A> Trait for Foo<A> { .. }`.
2738-
Impl(Box<ImplKind>),
2746+
Impl(Box<Impl>),
27392747
/// A macro invocation.
27402748
///
27412749
/// E.g., `foo!(..)`.
@@ -2782,14 +2790,14 @@ impl ItemKind {
27822790

27832791
pub fn generics(&self) -> Option<&Generics> {
27842792
match self {
2785-
Self::Fn(box FnKind(_, _, generics, _))
2786-
| Self::TyAlias(box TyAliasKind(_, generics, ..))
2793+
Self::Fn(box Fn { generics, .. })
2794+
| Self::TyAlias(box TyAlias { generics, .. })
27872795
| Self::Enum(_, generics)
27882796
| Self::Struct(_, generics)
27892797
| Self::Union(_, generics)
2790-
| Self::Trait(box TraitKind(_, _, generics, ..))
2798+
| Self::Trait(box Trait { generics, .. })
27912799
| Self::TraitAlias(generics, _)
2792-
| Self::Impl(box ImplKind { generics, .. }) => Some(generics),
2800+
| Self::Impl(box Impl { generics, .. }) => Some(generics),
27932801
_ => None,
27942802
}
27952803
}
@@ -2812,9 +2820,9 @@ pub enum AssocItemKind {
28122820
/// If `def` is parsed, then the constant is provided, and otherwise required.
28132821
Const(Defaultness, P<Ty>, Option<P<Expr>>),
28142822
/// An associated function.
2815-
Fn(Box<FnKind>),
2823+
Fn(Box<Fn>),
28162824
/// An associated type.
2817-
TyAlias(Box<TyAliasKind>),
2825+
TyAlias(Box<TyAlias>),
28182826
/// A macro expanding to associated items.
28192827
MacCall(MacCall),
28202828
}
@@ -2825,9 +2833,9 @@ rustc_data_structures::static_assert_size!(AssocItemKind, 72);
28252833
impl AssocItemKind {
28262834
pub fn defaultness(&self) -> Defaultness {
28272835
match *self {
2828-
Self::Const(def, ..)
2829-
| Self::Fn(box FnKind(def, ..))
2830-
| Self::TyAlias(box TyAliasKind(def, ..)) => def,
2836+
Self::Const(defaultness, ..)
2837+
| Self::Fn(box Fn { defaultness, .. })
2838+
| Self::TyAlias(box TyAlias { defaultness, .. }) => defaultness,
28312839
Self::MacCall(..) => Defaultness::Final,
28322840
}
28332841
}
@@ -2864,9 +2872,9 @@ pub enum ForeignItemKind {
28642872
/// A foreign static item (`static FOO: u8`).
28652873
Static(P<Ty>, Mutability, Option<P<Expr>>),
28662874
/// An foreign function.
2867-
Fn(Box<FnKind>),
2875+
Fn(Box<Fn>),
28682876
/// An foreign type.
2869-
TyAlias(Box<TyAliasKind>),
2877+
TyAlias(Box<TyAlias>),
28702878
/// A macro expanding to foreign items.
28712879
MacCall(MacCall),
28722880
}

compiler/rustc_ast/src/mut_visit.rs

+79-23
Original file line numberDiff line numberDiff line change
@@ -459,7 +459,8 @@ pub fn noop_visit_ty<T: MutVisitor>(ty: &mut P<Ty>, vis: &mut T) {
459459
vis.visit_mt(mt);
460460
}
461461
TyKind::BareFn(bft) => {
462-
let BareFnTy { unsafety: _, ext: _, generic_params, decl } = bft.deref_mut();
462+
let BareFnTy { unsafety, ext: _, generic_params, decl } = bft.deref_mut();
463+
visit_unsafety(unsafety, vis);
463464
generic_params.flat_map_in_place(|param| vis.flat_map_generic_param(param));
464465
vis.visit_fn_decl(decl);
465466
}
@@ -488,7 +489,8 @@ pub fn noop_visit_ty<T: MutVisitor>(ty: &mut P<Ty>, vis: &mut T) {
488489
}
489490

490491
pub fn noop_visit_foreign_mod<T: MutVisitor>(foreign_mod: &mut ForeignMod, vis: &mut T) {
491-
let ForeignMod { unsafety: _, abi: _, items } = foreign_mod;
492+
let ForeignMod { unsafety, abi: _, items } = foreign_mod;
493+
visit_unsafety(unsafety, vis);
492494
items.flat_map_in_place(|item| vis.flat_map_foreign_item(item));
493495
}
494496

@@ -788,6 +790,38 @@ pub fn visit_interpolated<T: MutVisitor>(nt: &mut token::Nonterminal, vis: &mut
788790
}
789791
}
790792

793+
// No `noop_` prefix because there isn't a corresponding method in `MutVisitor`.
794+
pub fn visit_defaultness<T: MutVisitor>(defaultness: &mut Defaultness, vis: &mut T) {
795+
match defaultness {
796+
Defaultness::Default(span) => vis.visit_span(span),
797+
Defaultness::Final => {}
798+
}
799+
}
800+
801+
// No `noop_` prefix because there isn't a corresponding method in `MutVisitor`.
802+
pub fn visit_unsafety<T: MutVisitor>(unsafety: &mut Unsafe, vis: &mut T) {
803+
match unsafety {
804+
Unsafe::Yes(span) => vis.visit_span(span),
805+
Unsafe::No => {}
806+
}
807+
}
808+
809+
// No `noop_` prefix because there isn't a corresponding method in `MutVisitor`.
810+
pub fn visit_polarity<T: MutVisitor>(polarity: &mut ImplPolarity, vis: &mut T) {
811+
match polarity {
812+
ImplPolarity::Positive => {}
813+
ImplPolarity::Negative(span) => vis.visit_span(span),
814+
}
815+
}
816+
817+
// No `noop_` prefix because there isn't a corresponding method in `MutVisitor`.
818+
pub fn visit_constness<T: MutVisitor>(constness: &mut Const, vis: &mut T) {
819+
match constness {
820+
Const::Yes(span) => vis.visit_span(span),
821+
Const::No => {}
822+
}
823+
}
824+
791825
pub fn noop_visit_asyncness<T: MutVisitor>(asyncness: &mut Async, vis: &mut T) {
792826
match asyncness {
793827
Async::Yes { span: _, closure_id, return_impl_trait_id } => {
@@ -955,25 +989,35 @@ pub fn noop_visit_item_kind<T: MutVisitor>(kind: &mut ItemKind, vis: &mut T) {
955989
match kind {
956990
ItemKind::ExternCrate(_orig_name) => {}
957991
ItemKind::Use(use_tree) => vis.visit_use_tree(use_tree),
958-
ItemKind::Static(ty, _, expr) | ItemKind::Const(_, ty, expr) => {
992+
ItemKind::Static(ty, _, expr) => {
959993
vis.visit_ty(ty);
960994
visit_opt(expr, |expr| vis.visit_expr(expr));
961995
}
962-
ItemKind::Fn(box FnKind(_, sig, generics, body)) => {
996+
ItemKind::Const(defaultness, ty, expr) => {
997+
visit_defaultness(defaultness, vis);
998+
vis.visit_ty(ty);
999+
visit_opt(expr, |expr| vis.visit_expr(expr));
1000+
}
1001+
ItemKind::Fn(box Fn { defaultness, generics, sig, body }) => {
1002+
visit_defaultness(defaultness, vis);
9631003
visit_fn_sig(sig, vis);
9641004
vis.visit_generics(generics);
9651005
visit_opt(body, |body| vis.visit_block(body));
9661006
}
967-
ItemKind::Mod(_unsafety, mod_kind) => match mod_kind {
968-
ModKind::Loaded(items, _inline, inner_span) => {
969-
vis.visit_span(inner_span);
970-
items.flat_map_in_place(|item| vis.flat_map_item(item));
1007+
ItemKind::Mod(unsafety, mod_kind) => {
1008+
visit_unsafety(unsafety, vis);
1009+
match mod_kind {
1010+
ModKind::Loaded(items, _inline, inner_span) => {
1011+
vis.visit_span(inner_span);
1012+
items.flat_map_in_place(|item| vis.flat_map_item(item));
1013+
}
1014+
ModKind::Unloaded => {}
9711015
}
972-
ModKind::Unloaded => {}
973-
},
1016+
}
9741017
ItemKind::ForeignMod(nm) => vis.visit_foreign_mod(nm),
9751018
ItemKind::GlobalAsm(asm) => noop_visit_inline_asm(asm, vis),
976-
ItemKind::TyAlias(box TyAliasKind(_, generics, bounds, ty)) => {
1019+
ItemKind::TyAlias(box TyAlias { defaultness, generics, bounds, ty }) => {
1020+
visit_defaultness(defaultness, vis);
9771021
vis.visit_generics(generics);
9781022
visit_bounds(bounds, vis);
9791023
visit_opt(ty, |ty| vis.visit_ty(ty));
@@ -986,22 +1030,27 @@ pub fn noop_visit_item_kind<T: MutVisitor>(kind: &mut ItemKind, vis: &mut T) {
9861030
vis.visit_variant_data(variant_data);
9871031
vis.visit_generics(generics);
9881032
}
989-
ItemKind::Impl(box ImplKind {
990-
unsafety: _,
991-
polarity: _,
992-
defaultness: _,
993-
constness: _,
1033+
ItemKind::Impl(box Impl {
1034+
defaultness,
1035+
unsafety,
9941036
generics,
1037+
constness,
1038+
polarity,
9951039
of_trait,
9961040
self_ty,
9971041
items,
9981042
}) => {
1043+
visit_defaultness(defaultness, vis);
1044+
visit_unsafety(unsafety, vis);
9991045
vis.visit_generics(generics);
1046+
visit_constness(constness, vis);
1047+
visit_polarity(polarity, vis);
10001048
visit_opt(of_trait, |trait_ref| vis.visit_trait_ref(trait_ref));
10011049
vis.visit_ty(self_ty);
10021050
items.flat_map_in_place(|item| vis.flat_map_impl_item(item));
10031051
}
1004-
ItemKind::Trait(box TraitKind(.., generics, bounds, items)) => {
1052+
ItemKind::Trait(box Trait { unsafety, is_auto: _, generics, bounds, items }) => {
1053+
visit_unsafety(unsafety, vis);
10051054
vis.visit_generics(generics);
10061055
visit_bounds(bounds, vis);
10071056
items.flat_map_in_place(|item| vis.flat_map_trait_item(item));
@@ -1025,16 +1074,19 @@ pub fn noop_flat_map_assoc_item<T: MutVisitor>(
10251074
visitor.visit_vis(vis);
10261075
visit_attrs(attrs, visitor);
10271076
match kind {
1028-
AssocItemKind::Const(_, ty, expr) => {
1077+
AssocItemKind::Const(defaultness, ty, expr) => {
1078+
visit_defaultness(defaultness, visitor);
10291079
visitor.visit_ty(ty);
10301080
visit_opt(expr, |expr| visitor.visit_expr(expr));
10311081
}
1032-
AssocItemKind::Fn(box FnKind(_, sig, generics, body)) => {
1082+
AssocItemKind::Fn(box Fn { defaultness, generics, sig, body }) => {
1083+
visit_defaultness(defaultness, visitor);
10331084
visitor.visit_generics(generics);
10341085
visit_fn_sig(sig, visitor);
10351086
visit_opt(body, |body| visitor.visit_block(body));
10361087
}
1037-
AssocItemKind::TyAlias(box TyAliasKind(_, generics, bounds, ty)) => {
1088+
AssocItemKind::TyAlias(box TyAlias { defaultness, generics, bounds, ty }) => {
1089+
visit_defaultness(defaultness, visitor);
10381090
visitor.visit_generics(generics);
10391091
visit_bounds(bounds, visitor);
10401092
visit_opt(ty, |ty| visitor.visit_ty(ty));
@@ -1047,8 +1099,10 @@ pub fn noop_flat_map_assoc_item<T: MutVisitor>(
10471099
}
10481100

10491101
pub fn noop_visit_fn_header<T: MutVisitor>(header: &mut FnHeader, vis: &mut T) {
1050-
let FnHeader { unsafety: _, asyncness, constness: _, ext: _ } = header;
1102+
let FnHeader { unsafety, asyncness, constness, ext: _ } = header;
1103+
visit_constness(constness, vis);
10511104
vis.visit_asyncness(asyncness);
1105+
visit_unsafety(unsafety, vis);
10521106
}
10531107

10541108
// FIXME: Avoid visiting the crate as a `Mod` item, flat map only the inner items if possible,
@@ -1114,12 +1168,14 @@ pub fn noop_flat_map_foreign_item<T: MutVisitor>(
11141168
visitor.visit_ty(ty);
11151169
visit_opt(expr, |expr| visitor.visit_expr(expr));
11161170
}
1117-
ForeignItemKind::Fn(box FnKind(_, sig, generics, body)) => {
1171+
ForeignItemKind::Fn(box Fn { defaultness, generics, sig, body }) => {
1172+
visit_defaultness(defaultness, visitor);
11181173
visitor.visit_generics(generics);
11191174
visit_fn_sig(sig, visitor);
11201175
visit_opt(body, |body| visitor.visit_block(body));
11211176
}
1122-
ForeignItemKind::TyAlias(box TyAliasKind(_, generics, bounds, ty)) => {
1177+
ForeignItemKind::TyAlias(box TyAlias { defaultness, generics, bounds, ty }) => {
1178+
visit_defaultness(defaultness, visitor);
11231179
visitor.visit_generics(generics);
11241180
visit_bounds(bounds, visitor);
11251181
visit_opt(ty, |ty| visitor.visit_ty(ty));

0 commit comments

Comments
 (0)