|
10 | 10 | use rustc_attr as attr; |
11 | 11 | use rustc_errors::struct_span_err; |
12 | 12 | use rustc_hir as hir; |
13 | | -use rustc_hir::def::DefKind; |
14 | 13 | use rustc_hir::def_id::LocalDefId; |
15 | 14 | use rustc_hir::intravisit::{self, Visitor}; |
16 | 15 | use rustc_middle::hir::nested_filter; |
@@ -58,41 +57,15 @@ impl NonConstExpr { |
58 | 57 |
|
59 | 58 | fn check_mod_const_bodies(tcx: TyCtxt<'_>, module_def_id: LocalDefId) { |
60 | 59 | let mut vis = CheckConstVisitor::new(tcx); |
61 | | - let module = tcx.hir_module_items(module_def_id); |
62 | | - |
63 | | - for id in module.items() { |
64 | | - vis.visit_item(tcx.hir().item(id)); |
65 | | - check_item(tcx, id); |
66 | | - } |
67 | | - |
68 | | - for id in module.trait_items() { |
69 | | - vis.visit_trait_item(tcx.hir().trait_item(id)); |
70 | | - } |
71 | | - |
72 | | - for id in module.impl_items() { |
73 | | - vis.visit_impl_item(tcx.hir().impl_item(id)); |
74 | | - } |
75 | | - |
76 | | - for id in module.foreign_items() { |
77 | | - vis.visit_foreign_item(tcx.hir().foreign_item(id)); |
78 | | - } |
79 | | - |
80 | | - // for id in tcx.hir_module_items(module_def_id).items() { |
81 | | - // check_item(tcx, id); |
82 | | - // } |
| 60 | + tcx.hir().deep_visit_item_likes_in_module(module_def_id, &mut vis); |
83 | 61 | } |
84 | 62 |
|
85 | 63 | pub(crate) fn provide(providers: &mut Providers) { |
86 | 64 | *providers = Providers { check_mod_const_bodies, ..*providers }; |
87 | 65 | } |
88 | 66 |
|
89 | | -fn check_item<'tcx>(tcx: TyCtxt<'tcx>, id: hir::ItemId) { |
| 67 | +fn check_item<'tcx>(tcx: TyCtxt<'tcx>, item: &'tcx hir::Item<'tcx>) { |
90 | 68 | let _: Option<_> = try { |
91 | | - if !matches!(tcx.def_kind(id.def_id), DefKind::Impl) { |
92 | | - None? |
93 | | - } |
94 | | - |
95 | | - let item = tcx.hir().item(id); |
96 | 69 | if let hir::ItemKind::Impl(ref imp) = item.kind && let hir::Constness::Const = imp.constness { |
97 | 70 | let trait_def_id = imp.of_trait.as_ref()?.trait_def_id()?; |
98 | 71 | let ancestors = tcx |
@@ -274,6 +247,11 @@ impl<'tcx> Visitor<'tcx> for CheckConstVisitor<'tcx> { |
274 | 247 | self.tcx.hir() |
275 | 248 | } |
276 | 249 |
|
| 250 | + fn visit_item(&mut self, item: &'tcx hir::Item<'tcx>) { |
| 251 | + intravisit::walk_item(self, item); |
| 252 | + check_item(self.tcx, item); |
| 253 | + } |
| 254 | + |
277 | 255 | fn visit_anon_const(&mut self, anon: &'tcx hir::AnonConst) { |
278 | 256 | let kind = Some(hir::ConstContext::Const); |
279 | 257 | self.recurse_into(kind, None, |this| intravisit::walk_anon_const(this, anon)); |
|
0 commit comments