Skip to content

Commit 3a57a2c

Browse files
committed
ast_validation: move trait item logic to proper place.
1 parent 0d41d0f commit 3a57a2c

File tree

1 file changed

+23
-20
lines changed

1 file changed

+23
-20
lines changed

src/librustc_passes/ast_validation.rs

Lines changed: 23 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -608,26 +608,6 @@ impl<'a> Visitor<'a> for AstValidator<'a> {
608608
}
609609
}
610610
self.no_questions_in_bounds(bounds, "supertraits", true);
611-
for trait_item in trait_items {
612-
if let TraitItemKind::Method(ref sig, ref block) = trait_item.kind {
613-
self.check_fn_decl(&sig.decl);
614-
self.check_trait_fn_not_async(trait_item.span, sig.header.asyncness.node);
615-
self.check_trait_fn_not_const(sig.header.constness);
616-
if block.is_none() {
617-
Self::check_decl_no_pat(&sig.decl, |span, mut_ident| {
618-
if mut_ident {
619-
self.lint_buffer.buffer_lint(
620-
lint::builtin::PATTERNS_IN_FNS_WITHOUT_BODY,
621-
trait_item.id, span,
622-
"patterns aren't allowed in methods without bodies");
623-
} else {
624-
struct_span_err!(self.session, span, E0642,
625-
"patterns aren't allowed in methods without bodies").emit();
626-
}
627-
});
628-
}
629-
}
630-
}
631611
}
632612
ItemKind::Mod(_) => {
633613
// Ensure that `path` attributes on modules are recorded as used (cf. issue #35584).
@@ -812,6 +792,29 @@ impl<'a> Visitor<'a> for AstValidator<'a> {
812792
fn visit_trait_item(&mut self, ti: &'a AssocItem) {
813793
self.invalid_visibility(&ti.vis, None);
814794
self.check_defaultness(ti.span, ti.defaultness);
795+
796+
if let AssocItemKind::Method(sig, block) = &ti.kind {
797+
self.check_fn_decl(&sig.decl);
798+
self.check_trait_fn_not_async(ti.span, sig.header.asyncness.node);
799+
self.check_trait_fn_not_const(sig.header.constness);
800+
if block.is_none() {
801+
Self::check_decl_no_pat(&sig.decl, |span, mut_ident| {
802+
if mut_ident {
803+
self.lint_buffer.buffer_lint(
804+
lint::builtin::PATTERNS_IN_FNS_WITHOUT_BODY,
805+
ti.id, span,
806+
"patterns aren't allowed in methods without bodies"
807+
);
808+
} else {
809+
struct_span_err!(
810+
self.session, span, E0642,
811+
"patterns aren't allowed in methods without bodies"
812+
).emit();
813+
}
814+
});
815+
}
816+
}
817+
815818
visit::walk_trait_item(self, ti);
816819
}
817820

0 commit comments

Comments
 (0)