Unify associated item visitor.
This commit is contained in:
parent
c6c17e3e00
commit
0d8a9d74e3
@ -484,11 +484,11 @@ impl<'a> LoweringContext<'a> {
|
||||
TraitItemKind::Method(_, None) => {
|
||||
// Ignore patterns in trait methods without bodies
|
||||
self.with_hir_id_owner(None, |this| {
|
||||
visit::walk_trait_item(this, item)
|
||||
visit::walk_assoc_item(this, item)
|
||||
});
|
||||
}
|
||||
_ => self.with_hir_id_owner(Some(item.id), |this| {
|
||||
visit::walk_trait_item(this, item);
|
||||
visit::walk_assoc_item(this, item);
|
||||
})
|
||||
}
|
||||
}
|
||||
@ -496,7 +496,7 @@ impl<'a> LoweringContext<'a> {
|
||||
fn visit_impl_item(&mut self, item: &'tcx ImplItem) {
|
||||
self.lctx.allocate_hir_id_counter(item.id);
|
||||
self.with_hir_id_owner(Some(item.id), |this| {
|
||||
visit::walk_impl_item(this, item);
|
||||
visit::walk_assoc_item(this, item);
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -94,7 +94,7 @@ impl<'tcx, 'interner> Visitor<'tcx> for ItemLowerer<'tcx, 'interner> {
|
||||
lctx.modules.get_mut(&lctx.current_module).unwrap().trait_items.insert(id);
|
||||
});
|
||||
|
||||
visit::walk_trait_item(self, item);
|
||||
visit::walk_assoc_item(self, item);
|
||||
}
|
||||
|
||||
fn visit_impl_item(&mut self, item: &'tcx ImplItem) {
|
||||
@ -104,7 +104,7 @@ impl<'tcx, 'interner> Visitor<'tcx> for ItemLowerer<'tcx, 'interner> {
|
||||
lctx.impl_items.insert(id, hir_item);
|
||||
lctx.modules.get_mut(&lctx.current_module).unwrap().impl_items.insert(id);
|
||||
});
|
||||
visit::walk_impl_item(self, item);
|
||||
visit::walk_assoc_item(self, item);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1252,7 +1252,7 @@ impl<'a, T: EarlyLintPass> ast_visit::Visitor<'a> for EarlyContextAndPass<'a, T>
|
||||
fn visit_trait_item(&mut self, trait_item: &'a ast::TraitItem) {
|
||||
self.with_lint_attrs(trait_item.id, &trait_item.attrs, |cx| {
|
||||
run_early_pass!(cx, check_trait_item, trait_item);
|
||||
ast_visit::walk_trait_item(cx, trait_item);
|
||||
ast_visit::walk_assoc_item(cx, trait_item);
|
||||
run_early_pass!(cx, check_trait_item_post, trait_item);
|
||||
});
|
||||
}
|
||||
@ -1260,7 +1260,7 @@ impl<'a, T: EarlyLintPass> ast_visit::Visitor<'a> for EarlyContextAndPass<'a, T>
|
||||
fn visit_impl_item(&mut self, impl_item: &'a ast::ImplItem) {
|
||||
self.with_lint_attrs(impl_item.id, &impl_item.attrs, |cx| {
|
||||
run_early_pass!(cx, check_impl_item, impl_item);
|
||||
ast_visit::walk_impl_item(cx, impl_item);
|
||||
ast_visit::walk_assoc_item(cx, impl_item);
|
||||
run_early_pass!(cx, check_impl_item_post, impl_item);
|
||||
});
|
||||
}
|
||||
|
@ -772,28 +772,28 @@ impl<'a> Visitor<'a> for AstValidator<'a> {
|
||||
|this| visit::walk_enum_def(this, enum_definition, generics, item_id))
|
||||
}
|
||||
|
||||
fn visit_impl_item(&mut self, ii: &'a ImplItem) {
|
||||
fn visit_impl_item(&mut self, ii: &'a AssocItem) {
|
||||
match &ii.kind {
|
||||
ImplItemKind::Const(_, body) => {
|
||||
AssocItemKind::Const(_, body) => {
|
||||
self.check_impl_item_provided(ii.span, body, "constant", " = <expr>;");
|
||||
}
|
||||
ImplItemKind::Method(sig, body) => {
|
||||
AssocItemKind::Method(sig, body) => {
|
||||
self.check_impl_item_provided(ii.span, body, "function", " { <body> }");
|
||||
self.check_fn_decl(&sig.decl);
|
||||
}
|
||||
ImplItemKind::TyAlias(bounds, body) => {
|
||||
AssocItemKind::TyAlias(bounds, body) => {
|
||||
self.check_impl_item_provided(ii.span, body, "type", " = <type>;");
|
||||
self.check_impl_assoc_type_no_bounds(bounds);
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
visit::walk_impl_item(self, ii);
|
||||
visit::walk_assoc_item(self, ii);
|
||||
}
|
||||
|
||||
fn visit_trait_item(&mut self, ti: &'a TraitItem) {
|
||||
fn visit_trait_item(&mut self, ti: &'a AssocItem) {
|
||||
self.invalid_visibility(&ti.vis, None);
|
||||
self.check_defaultness(ti.span, ti.defaultness);
|
||||
visit::walk_trait_item(self, ti);
|
||||
visit::walk_assoc_item(self, ti);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -316,12 +316,12 @@ impl<'v> ast_visit::Visitor<'v> for StatCollector<'v> {
|
||||
|
||||
fn visit_trait_item(&mut self, ti: &'v ast::TraitItem) {
|
||||
self.record("TraitItem", Id::None, ti);
|
||||
ast_visit::walk_trait_item(self, ti)
|
||||
ast_visit::walk_assoc_item(self, ti)
|
||||
}
|
||||
|
||||
fn visit_impl_item(&mut self, ii: &'v ast::ImplItem) {
|
||||
self.record("ImplItem", Id::None, ii);
|
||||
ast_visit::walk_impl_item(self, ii)
|
||||
ast_visit::walk_assoc_item(self, ii)
|
||||
}
|
||||
|
||||
fn visit_param_bound(&mut self, bounds: &'v ast::GenericBound) {
|
||||
|
@ -1190,7 +1190,7 @@ impl<'a, 'b> Visitor<'b> for BuildReducedGraphVisitor<'a, 'b> {
|
||||
let expansion = self.parent_scope.expansion;
|
||||
self.r.define(parent, item.ident, ns, (res, vis, item.span, expansion));
|
||||
|
||||
visit::walk_trait_item(self, item);
|
||||
visit::walk_assoc_item(self, item);
|
||||
}
|
||||
|
||||
fn visit_impl_item(&mut self, item: &'b ast::ImplItem) {
|
||||
@ -1198,7 +1198,7 @@ impl<'a, 'b> Visitor<'b> for BuildReducedGraphVisitor<'a, 'b> {
|
||||
self.visit_invoc(item.id);
|
||||
} else {
|
||||
self.resolve_visibility(&item.vis);
|
||||
visit::walk_impl_item(self, item);
|
||||
visit::walk_assoc_item(self, item);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -223,7 +223,7 @@ impl<'a> visit::Visitor<'a> for DefCollector<'a> {
|
||||
};
|
||||
|
||||
let def = self.create_def(ti.id, def_data, ti.span);
|
||||
self.with_parent(def, |this| visit::walk_trait_item(this, ti));
|
||||
self.with_parent(def, |this| visit::walk_assoc_item(this, ti));
|
||||
}
|
||||
|
||||
fn visit_impl_item(&mut self, ii: &'a ImplItem) {
|
||||
@ -249,7 +249,7 @@ impl<'a> visit::Visitor<'a> for DefCollector<'a> {
|
||||
};
|
||||
|
||||
let def = self.create_def(ii.id, def_data, ii.span);
|
||||
self.with_parent(def, |this| visit::walk_impl_item(this, ii));
|
||||
self.with_parent(def, |this| visit::walk_assoc_item(this, ii));
|
||||
}
|
||||
|
||||
fn visit_pat(&mut self, pat: &'a Pat) {
|
||||
|
@ -819,10 +819,10 @@ impl<'a, 'b> LateResolutionVisitor<'a, '_> {
|
||||
}
|
||||
}
|
||||
TraitItemKind::Method(_, _) => {
|
||||
visit::walk_trait_item(this, trait_item)
|
||||
visit::walk_assoc_item(this, trait_item)
|
||||
}
|
||||
TraitItemKind::TyAlias(..) => {
|
||||
visit::walk_trait_item(this, trait_item)
|
||||
visit::walk_assoc_item(this, trait_item)
|
||||
}
|
||||
TraitItemKind::Macro(_) => {
|
||||
panic!("unexpanded macro in resolve!")
|
||||
@ -1106,7 +1106,7 @@ impl<'a, 'b> LateResolutionVisitor<'a, '_> {
|
||||
);
|
||||
|
||||
this.with_constant_rib(|this| {
|
||||
visit::walk_impl_item(this, impl_item)
|
||||
visit::walk_assoc_item(this, impl_item)
|
||||
});
|
||||
}
|
||||
ImplItemKind::Method(..) => {
|
||||
@ -1117,7 +1117,7 @@ impl<'a, 'b> LateResolutionVisitor<'a, '_> {
|
||||
impl_item.span,
|
||||
|n, s| MethodNotMemberOfTrait(n, s));
|
||||
|
||||
visit::walk_impl_item(this, impl_item);
|
||||
visit::walk_assoc_item(this, impl_item);
|
||||
}
|
||||
ImplItemKind::TyAlias(_, Some(ref ty)) => {
|
||||
// If this is a trait impl, ensure the type
|
||||
|
@ -595,7 +595,7 @@ impl<'a> Visitor<'a> for PostExpansionVisitor<'a> {
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
visit::walk_trait_item(self, ti)
|
||||
visit::walk_assoc_item(self, ti)
|
||||
}
|
||||
|
||||
fn visit_impl_item(&mut self, ii: &'a ast::ImplItem) {
|
||||
@ -620,7 +620,7 @@ impl<'a> Visitor<'a> for PostExpansionVisitor<'a> {
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
visit::walk_impl_item(self, ii)
|
||||
visit::walk_assoc_item(self, ii)
|
||||
}
|
||||
|
||||
fn visit_vis(&mut self, vis: &'a ast::Visibility) {
|
||||
|
@ -75,11 +75,11 @@ impl<'ast> Visitor<'ast> for NodeCounter {
|
||||
}
|
||||
fn visit_trait_item(&mut self, ti: &TraitItem) {
|
||||
self.count += 1;
|
||||
walk_trait_item(self, ti)
|
||||
walk_assoc_item(self, ti)
|
||||
}
|
||||
fn visit_impl_item(&mut self, ii: &ImplItem) {
|
||||
self.count += 1;
|
||||
walk_impl_item(self, ii)
|
||||
walk_assoc_item(self, ii)
|
||||
}
|
||||
fn visit_trait_ref(&mut self, t: &TraitRef) {
|
||||
self.count += 1;
|
||||
|
@ -83,8 +83,8 @@ pub trait Visitor<'ast>: Sized {
|
||||
fn visit_fn(&mut self, fk: FnKind<'ast>, fd: &'ast FnDecl, s: Span, _: NodeId) {
|
||||
walk_fn(self, fk, fd, s)
|
||||
}
|
||||
fn visit_trait_item(&mut self, ti: &'ast TraitItem) { walk_trait_item(self, ti) }
|
||||
fn visit_impl_item(&mut self, ii: &'ast ImplItem) { walk_impl_item(self, ii) }
|
||||
fn visit_trait_item(&mut self, i: &'ast AssocItem) { walk_assoc_item(self, i) }
|
||||
fn visit_impl_item(&mut self, i: &'ast AssocItem) { walk_assoc_item(self, i) }
|
||||
fn visit_trait_ref(&mut self, t: &'ast TraitRef) { walk_trait_ref(self, t) }
|
||||
fn visit_param_bound(&mut self, bounds: &'ast GenericBound) {
|
||||
walk_param_bound(self, bounds)
|
||||
@ -581,57 +581,29 @@ pub fn walk_fn<'a, V>(visitor: &mut V, kind: FnKind<'a>, declaration: &'a FnDecl
|
||||
}
|
||||
}
|
||||
|
||||
pub fn walk_trait_item<'a, V: Visitor<'a>>(visitor: &mut V, trait_item: &'a TraitItem) {
|
||||
visitor.visit_vis(&trait_item.vis);
|
||||
visitor.visit_ident(trait_item.ident);
|
||||
walk_list!(visitor, visit_attribute, &trait_item.attrs);
|
||||
visitor.visit_generics(&trait_item.generics);
|
||||
match trait_item.kind {
|
||||
TraitItemKind::Const(ref ty, ref default) => {
|
||||
visitor.visit_ty(ty);
|
||||
walk_list!(visitor, visit_expr, default);
|
||||
}
|
||||
TraitItemKind::Method(ref sig, None) => {
|
||||
visitor.visit_fn_header(&sig.header);
|
||||
walk_fn_decl(visitor, &sig.decl);
|
||||
}
|
||||
TraitItemKind::Method(ref sig, Some(ref body)) => {
|
||||
visitor.visit_fn(FnKind::Method(trait_item.ident, sig, &trait_item.vis, body),
|
||||
&sig.decl, trait_item.span, trait_item.id);
|
||||
}
|
||||
TraitItemKind::TyAlias(ref bounds, ref default) => {
|
||||
walk_list!(visitor, visit_param_bound, bounds);
|
||||
walk_list!(visitor, visit_ty, default);
|
||||
}
|
||||
TraitItemKind::Macro(ref mac) => {
|
||||
visitor.visit_mac(mac);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub fn walk_impl_item<'a, V: Visitor<'a>>(visitor: &mut V, impl_item: &'a ImplItem) {
|
||||
visitor.visit_vis(&impl_item.vis);
|
||||
visitor.visit_ident(impl_item.ident);
|
||||
walk_list!(visitor, visit_attribute, &impl_item.attrs);
|
||||
visitor.visit_generics(&impl_item.generics);
|
||||
match impl_item.kind {
|
||||
ImplItemKind::Const(ref ty, ref expr) => {
|
||||
pub fn walk_assoc_item<'a, V: Visitor<'a>>(visitor: &mut V, item: &'a AssocItem) {
|
||||
visitor.visit_vis(&item.vis);
|
||||
visitor.visit_ident(item.ident);
|
||||
walk_list!(visitor, visit_attribute, &item.attrs);
|
||||
visitor.visit_generics(&item.generics);
|
||||
match item.kind {
|
||||
AssocItemKind::Const(ref ty, ref expr) => {
|
||||
visitor.visit_ty(ty);
|
||||
walk_list!(visitor, visit_expr, expr);
|
||||
}
|
||||
ImplItemKind::Method(ref sig, None) => {
|
||||
AssocItemKind::Method(ref sig, None) => {
|
||||
visitor.visit_fn_header(&sig.header);
|
||||
walk_fn_decl(visitor, &sig.decl);
|
||||
}
|
||||
ImplItemKind::Method(ref sig, Some(ref body)) => {
|
||||
visitor.visit_fn(FnKind::Method(impl_item.ident, sig, &impl_item.vis, body),
|
||||
&sig.decl, impl_item.span, impl_item.id);
|
||||
AssocItemKind::Method(ref sig, Some(ref body)) => {
|
||||
visitor.visit_fn(FnKind::Method(item.ident, sig, &item.vis, body),
|
||||
&sig.decl, item.span, item.id);
|
||||
}
|
||||
ImplItemKind::TyAlias(ref bounds, ref ty) => {
|
||||
AssocItemKind::TyAlias(ref bounds, ref ty) => {
|
||||
walk_list!(visitor, visit_param_bound, bounds);
|
||||
walk_list!(visitor, visit_ty, ty);
|
||||
}
|
||||
ImplItemKind::Macro(ref mac) => {
|
||||
AssocItemKind::Macro(ref mac) => {
|
||||
visitor.visit_mac(mac);
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user