1
Fork 0

Match on TraitItem exhaustively.

This commit is contained in:
Camille GILLOT 2022-08-01 19:46:10 +02:00
parent 6c5f077157
commit 212a06ee69

View file

@ -946,33 +946,30 @@ pub fn walk_fn<'v, V: Visitor<'v>>(
} }
pub fn walk_trait_item<'v, V: Visitor<'v>>(visitor: &mut V, trait_item: &'v TraitItem<'v>) { pub fn walk_trait_item<'v, V: Visitor<'v>>(visitor: &mut V, trait_item: &'v TraitItem<'v>) {
visitor.visit_ident(trait_item.ident); // N.B., deliberately force a compilation error if/when new fields are added.
visitor.visit_generics(&trait_item.generics); let TraitItem { ident, generics, ref defaultness, ref kind, span, def_id: _ } = *trait_item;
visitor.visit_defaultness(&trait_item.defaultness); let hir_id = trait_item.hir_id();
match trait_item.kind { visitor.visit_ident(ident);
visitor.visit_generics(&generics);
visitor.visit_defaultness(&defaultness);
match *kind {
TraitItemKind::Const(ref ty, default) => { TraitItemKind::Const(ref ty, default) => {
visitor.visit_id(trait_item.hir_id()); visitor.visit_id(hir_id);
visitor.visit_ty(ty); visitor.visit_ty(ty);
walk_list!(visitor, visit_nested_body, default); walk_list!(visitor, visit_nested_body, default);
} }
TraitItemKind::Fn(ref sig, TraitFn::Required(param_names)) => { TraitItemKind::Fn(ref sig, TraitFn::Required(param_names)) => {
visitor.visit_id(trait_item.hir_id()); visitor.visit_id(hir_id);
visitor.visit_fn_decl(&sig.decl); visitor.visit_fn_decl(&sig.decl);
for &param_name in param_names { for &param_name in param_names {
visitor.visit_ident(param_name); visitor.visit_ident(param_name);
} }
} }
TraitItemKind::Fn(ref sig, TraitFn::Provided(body_id)) => { TraitItemKind::Fn(ref sig, TraitFn::Provided(body_id)) => {
visitor.visit_fn( visitor.visit_fn(FnKind::Method(ident, sig), &sig.decl, body_id, span, hir_id);
FnKind::Method(trait_item.ident, sig),
&sig.decl,
body_id,
trait_item.span,
trait_item.hir_id(),
);
} }
TraitItemKind::Type(bounds, ref default) => { TraitItemKind::Type(bounds, ref default) => {
visitor.visit_id(trait_item.hir_id()); visitor.visit_id(hir_id);
walk_list!(visitor, visit_param_bound, bounds); walk_list!(visitor, visit_param_bound, bounds);
walk_list!(visitor, visit_ty, default); walk_list!(visitor, visit_ty, default);
} }