diff options
| author | bors <bors@rust-lang.org> | 2022-06-18 09:57:00 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2022-06-18 09:57:00 +0000 |
| commit | cdcc53b7dc002ea4a7a28105010c5a1126ee31b7 (patch) | |
| tree | 48332da5be8538e7715065e456b7cb5ccd93d6b5 | |
| parent | 0182fd99afaf4a3d602de6b88506edaf6043c125 (diff) | |
| parent | be45f10a9c3b429eeef95dc24ebdd19cbccce0be (diff) | |
| download | rust-cdcc53b7dc002ea4a7a28105010c5a1126ee31b7.tar.gz rust-cdcc53b7dc002ea4a7a28105010c5a1126ee31b7.zip | |
Auto merge of #98153 - nnethercote:fix-MissingDoc-quadratic-behaviour, r=cjgillot
Fix `MissingDoc` quadratic behaviour Best reviewed one commit at a time. r? `@cjgillot`
| -rw-r--r-- | compiler/rustc_hir/src/intravisit.rs | 2 | ||||
| -rw-r--r-- | compiler/rustc_incremental/src/persist/dirty_clean.rs | 3 | ||||
| -rw-r--r-- | compiler/rustc_lint/src/early.rs | 12 | ||||
| -rw-r--r-- | compiler/rustc_lint/src/late.rs | 24 | ||||
| -rw-r--r-- | compiler/rustc_middle/src/hir/map/mod.rs | 7 | ||||
| -rw-r--r-- | compiler/rustc_passes/src/hir_stats.rs | 2 | ||||
| -rw-r--r-- | compiler/rustc_passes/src/lib_features.rs | 2 |
7 files changed, 16 insertions, 36 deletions
diff --git a/compiler/rustc_hir/src/intravisit.rs b/compiler/rustc_hir/src/intravisit.rs index d1da2519bad..cce5aa9f732 100644 --- a/compiler/rustc_hir/src/intravisit.rs +++ b/compiler/rustc_hir/src/intravisit.rs @@ -466,7 +466,7 @@ pub trait Visitor<'v>: Sized { fn visit_assoc_type_binding(&mut self, type_binding: &'v TypeBinding<'v>) { walk_assoc_type_binding(self, type_binding) } - fn visit_attribute(&mut self, _id: HirId, _attr: &'v Attribute) {} + fn visit_attribute(&mut self, _attr: &'v Attribute) {} fn visit_associated_item_kind(&mut self, kind: &'v AssocItemKind) { walk_associated_item_kind(self, kind); } diff --git a/compiler/rustc_incremental/src/persist/dirty_clean.rs b/compiler/rustc_incremental/src/persist/dirty_clean.rs index 424164d8760..94097357f8c 100644 --- a/compiler/rustc_incremental/src/persist/dirty_clean.rs +++ b/compiler/rustc_incremental/src/persist/dirty_clean.rs @@ -21,7 +21,6 @@ use rustc_ast::{self as ast, Attribute, NestedMetaItem}; use rustc_data_structures::fx::FxHashSet; -use rustc_hir as hir; use rustc_hir::def_id::LocalDefId; use rustc_hir::intravisit; use rustc_hir::Node as HirNode; @@ -473,7 +472,7 @@ impl<'tcx> intravisit::Visitor<'tcx> for FindAllAttrs<'tcx> { self.tcx.hir() } - fn visit_attribute(&mut self, _: hir::HirId, attr: &'tcx Attribute) { + fn visit_attribute(&mut self, attr: &'tcx Attribute) { if self.is_active_attr(attr) { self.found_attrs.push(attr); } diff --git a/compiler/rustc_lint/src/early.rs b/compiler/rustc_lint/src/early.rs index 2ab948958d0..5de35dc0856 100644 --- a/compiler/rustc_lint/src/early.rs +++ b/compiler/rustc_lint/src/early.rs @@ -63,20 +63,12 @@ impl<'a, T: EarlyLintPass> EarlyContextAndPass<'a, T> { let push = self.context.builder.push(attrs, is_crate_node, None); self.check_id(id); - self.enter_attrs(attrs); - f(self); - self.exit_attrs(attrs); - self.context.builder.pop(push); - } - - fn enter_attrs(&mut self, attrs: &'a [ast::Attribute]) { debug!("early context: enter_attrs({:?})", attrs); run_early_pass!(self, enter_lint_attrs, attrs); - } - - fn exit_attrs(&mut self, attrs: &'a [ast::Attribute]) { + f(self); debug!("early context: exit_attrs({:?})", attrs); run_early_pass!(self, exit_lint_attrs, attrs); + self.context.builder.pop(push); } } diff --git a/compiler/rustc_lint/src/late.rs b/compiler/rustc_lint/src/late.rs index 772ab7fe226..c1d8d76c975 100644 --- a/compiler/rustc_lint/src/late.rs +++ b/compiler/rustc_lint/src/late.rs @@ -59,9 +59,11 @@ impl<'tcx, T: LateLintPass<'tcx>> LateContextAndPass<'tcx, T> { let attrs = self.context.tcx.hir().attrs(id); let prev = self.context.last_node_with_lint_attrs; self.context.last_node_with_lint_attrs = id; - self.enter_attrs(attrs); + debug!("late context: enter_attrs({:?})", attrs); + lint_callback!(self, enter_lint_attrs, attrs); f(self); - self.exit_attrs(attrs); + debug!("late context: exit_attrs({:?})", attrs); + lint_callback!(self, exit_lint_attrs, attrs); self.context.last_node_with_lint_attrs = prev; } @@ -81,16 +83,6 @@ impl<'tcx, T: LateLintPass<'tcx>> LateContextAndPass<'tcx, T> { hir_visit::walk_mod(self, m, n); lint_callback!(self, check_mod_post, m, s, n); } - - fn enter_attrs(&mut self, attrs: &'tcx [ast::Attribute]) { - debug!("late context: enter_attrs({:?})", attrs); - lint_callback!(self, enter_lint_attrs, attrs); - } - - fn exit_attrs(&mut self, attrs: &'tcx [ast::Attribute]) { - debug!("late context: exit_attrs({:?})", attrs); - lint_callback!(self, exit_lint_attrs, attrs); - } } impl<'tcx, T: LateLintPass<'tcx>> hir_visit::Visitor<'tcx> for LateContextAndPass<'tcx, T> { @@ -337,10 +329,8 @@ impl<'tcx, T: LateLintPass<'tcx>> hir_visit::Visitor<'tcx> for LateContextAndPas hir_visit::walk_path(self, p); } - fn visit_attribute(&mut self, hir_id: hir::HirId, attr: &'tcx ast::Attribute) { - self.with_lint_attrs(hir_id, |cx| { - lint_callback!(cx, check_attribute, attr); - }) + fn visit_attribute(&mut self, attr: &'tcx ast::Attribute) { + lint_callback!(self, check_attribute, attr); } } @@ -402,7 +392,7 @@ fn late_lint_mod_pass<'tcx, T: LateLintPass<'tcx>>( // Visit the crate attributes if hir_id == hir::CRATE_HIR_ID { for attr in tcx.hir().attrs(hir::CRATE_HIR_ID).iter() { - cx.visit_attribute(hir_id, attr) + cx.visit_attribute(attr) } } } diff --git a/compiler/rustc_middle/src/hir/map/mod.rs b/compiler/rustc_middle/src/hir/map/mod.rs index 729790aee80..738d47ba296 100644 --- a/compiler/rustc_middle/src/hir/map/mod.rs +++ b/compiler/rustc_middle/src/hir/map/mod.rs @@ -577,12 +577,11 @@ impl<'hir> Map<'hir> { /// Walks the attributes in a crate. pub fn walk_attributes(self, visitor: &mut impl Visitor<'hir>) { let krate = self.krate(); - for (owner, info) in krate.owners.iter_enumerated() { + for info in krate.owners.iter() { if let MaybeOwner::Owner(info) = info { - for (local_id, attrs) in info.attrs.map.iter() { - let id = HirId { owner, local_id: *local_id }; + for attrs in info.attrs.map.values() { for a in *attrs { - visitor.visit_attribute(id, a) + visitor.visit_attribute(a) } } } diff --git a/compiler/rustc_passes/src/hir_stats.rs b/compiler/rustc_passes/src/hir_stats.rs index 6a234294ed1..a3be827a7cc 100644 --- a/compiler/rustc_passes/src/hir_stats.rs +++ b/compiler/rustc_passes/src/hir_stats.rs @@ -238,7 +238,7 @@ impl<'v> hir_visit::Visitor<'v> for StatCollector<'v> { hir_visit::walk_assoc_type_binding(self, type_binding) } - fn visit_attribute(&mut self, _: hir::HirId, attr: &'v ast::Attribute) { + fn visit_attribute(&mut self, attr: &'v ast::Attribute) { self.record("Attribute", Id::Attr(attr.id), attr); } } diff --git a/compiler/rustc_passes/src/lib_features.rs b/compiler/rustc_passes/src/lib_features.rs index c414d7c031c..26bfa4737a7 100644 --- a/compiler/rustc_passes/src/lib_features.rs +++ b/compiler/rustc_passes/src/lib_features.rs @@ -120,7 +120,7 @@ impl<'tcx> Visitor<'tcx> for LibFeatureCollector<'tcx> { self.tcx.hir() } - fn visit_attribute(&mut self, _: rustc_hir::HirId, attr: &'tcx Attribute) { + fn visit_attribute(&mut self, attr: &'tcx Attribute) { if let Some((feature, stable, span)) = self.extract(attr) { self.collect_feature(feature, stable, span); } |
