|
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