mirror of
https://github.com/rust-lang/rust.git
synced 2024-10-31 14:31:55 +00:00
Reword comments and rename HIR visiting methods.
This commit is contained in:
parent
c461f7a16e
commit
111df9e6ed
@ -19,7 +19,7 @@
|
||||
//! - Example: Examine each expression to look for its type and do some check or other.
|
||||
//! - How: Implement `intravisit::Visitor` and override the `NestedFilter` type to
|
||||
//! `nested_filter::OnlyBodies` (and implement `nested_visit_map`), and use
|
||||
//! `tcx.hir().deep_visit_all_item_likes(&mut visitor)`. Within your
|
||||
//! `tcx.hir().visit_all_item_likes_in_crate(&mut visitor)`. Within your
|
||||
//! `intravisit::Visitor` impl, implement methods like `visit_expr()` (don't forget to invoke
|
||||
//! `intravisit::walk_expr()` to keep walking the subparts).
|
||||
//! - Pro: Visitor methods for any kind of HIR node, not just item-like things.
|
||||
@ -190,7 +190,7 @@ use nested_filter::NestedFilter;
|
||||
/// (this is why the module is called `intravisit`, to distinguish it
|
||||
/// from the AST's `visit` module, which acts differently). If you
|
||||
/// simply want to visit all items in the crate in some order, you
|
||||
/// should call `Crate::visit_all_items`. Otherwise, see the comment
|
||||
/// should call `tcx.hir().visit_all_item_likes_in_crate`. Otherwise, see the comment
|
||||
/// on `visit_nested_item` for details on how to visit nested items.
|
||||
///
|
||||
/// If you want to ensure that your code handles every variant
|
||||
|
@ -75,7 +75,7 @@ pub fn assert_dep_graph(tcx: TyCtxt<'_>) {
|
||||
let mut visitor =
|
||||
IfThisChanged { tcx, if_this_changed: vec![], then_this_would_need: vec![] };
|
||||
visitor.process_attrs(hir::CRATE_HIR_ID);
|
||||
tcx.hir().deep_visit_all_item_likes(&mut visitor);
|
||||
tcx.hir().visit_all_item_likes_in_crate(&mut visitor);
|
||||
(visitor.if_this_changed, visitor.then_this_would_need)
|
||||
};
|
||||
|
||||
|
@ -419,7 +419,7 @@ impl<'a, 'tcx> EncodeContext<'a, 'tcx> {
|
||||
return;
|
||||
}
|
||||
|
||||
self.tcx.hir().deep_visit_all_item_likes(self);
|
||||
self.tcx.hir().visit_all_item_likes_in_crate(self);
|
||||
}
|
||||
|
||||
fn encode_def_path_table(&mut self) {
|
||||
|
@ -568,7 +568,7 @@ impl<'hir> Map<'hir> {
|
||||
}
|
||||
}
|
||||
|
||||
/// Walks the contents of a crate. See also `Crate::visit_all_items`.
|
||||
/// Walks the contents of the local crate. See also `visit_all_item_likes_in_crate`.
|
||||
pub fn walk_toplevel_module(self, visitor: &mut impl Visitor<'hir>) {
|
||||
let (top_mod, span, hir_id) = self.get_module(CRATE_DEF_ID);
|
||||
visitor.visit_mod(top_mod, span, hir_id);
|
||||
@ -588,53 +588,61 @@ impl<'hir> Map<'hir> {
|
||||
}
|
||||
}
|
||||
|
||||
/// Visits all items in the crate in some deterministic (but
|
||||
/// unspecified) order. If you need to process every item,
|
||||
/// and care about nesting -- usually because your algorithm
|
||||
/// follows lexical scoping rules -- then this method is the best choice.
|
||||
/// If you don't care about nesting, you should use the `tcx.hir_crate_items()` query
|
||||
/// or `items()` instead.
|
||||
/// Visits all item-likes in the crate in some deterministic (but unspecified) order. If you
|
||||
/// need to process every item-like, and don't care about visiting nested items in a particular
|
||||
/// order then this method is the best choice. If you do care about this nesting, you should
|
||||
/// use the `tcx.hir().walk_toplevel_module`.
|
||||
///
|
||||
/// Note that this function will access HIR for all the item-likes in the crate. If you only
|
||||
/// need to access some of them, it is usually better to manually loop on the iterators
|
||||
/// provided by `tcx.hir_crate_items(())`.
|
||||
///
|
||||
/// Please see the notes in `intravisit.rs` for more information.
|
||||
pub fn deep_visit_all_item_likes<V>(self, visitor: &mut V)
|
||||
pub fn visit_all_item_likes_in_crate<V>(self, visitor: &mut V)
|
||||
where
|
||||
V: Visitor<'hir>,
|
||||
{
|
||||
let krate = self.krate();
|
||||
for owner in krate.owners.iter().filter_map(|i| i.as_owner()) {
|
||||
match owner.node() {
|
||||
OwnerNode::Item(item) => visitor.visit_item(item),
|
||||
OwnerNode::ForeignItem(item) => visitor.visit_foreign_item(item),
|
||||
OwnerNode::ImplItem(item) => visitor.visit_impl_item(item),
|
||||
OwnerNode::TraitItem(item) => visitor.visit_trait_item(item),
|
||||
OwnerNode::Crate(_) => {}
|
||||
}
|
||||
let krate = self.tcx.hir_crate_items(());
|
||||
|
||||
for id in krate.items() {
|
||||
visitor.visit_item(self.item(id));
|
||||
}
|
||||
|
||||
for id in krate.trait_items() {
|
||||
visitor.visit_trait_item(self.trait_item(id));
|
||||
}
|
||||
|
||||
for id in krate.impl_items() {
|
||||
visitor.visit_impl_item(self.impl_item(id));
|
||||
}
|
||||
|
||||
for id in krate.foreign_items() {
|
||||
visitor.visit_foreign_item(self.foreign_item(id));
|
||||
}
|
||||
}
|
||||
|
||||
/// If you don't care about nesting, you should use the
|
||||
/// `tcx.hir_module_items()` query or `module_items()` instead.
|
||||
/// Please see notes in `deep_visit_all_item_likes`.
|
||||
pub fn deep_visit_item_likes_in_module<V>(self, module: LocalDefId, visitor: &mut V)
|
||||
/// This method is the equivalent of `visit_all_item_likes_in_crate` but restricted to
|
||||
/// item-likes in a single module.
|
||||
pub fn visit_item_likes_in_module<V>(self, module: LocalDefId, visitor: &mut V)
|
||||
where
|
||||
V: Visitor<'hir>,
|
||||
{
|
||||
let module = self.tcx.hir_module_items(module);
|
||||
|
||||
for id in module.items.iter() {
|
||||
visitor.visit_item(self.item(*id));
|
||||
for id in module.items() {
|
||||
visitor.visit_item(self.item(id));
|
||||
}
|
||||
|
||||
for id in module.trait_items.iter() {
|
||||
visitor.visit_trait_item(self.trait_item(*id));
|
||||
for id in module.trait_items() {
|
||||
visitor.visit_trait_item(self.trait_item(id));
|
||||
}
|
||||
|
||||
for id in module.impl_items.iter() {
|
||||
visitor.visit_impl_item(self.impl_item(*id));
|
||||
for id in module.impl_items() {
|
||||
visitor.visit_impl_item(self.impl_item(id));
|
||||
}
|
||||
|
||||
for id in module.foreign_items.iter() {
|
||||
visitor.visit_foreign_item(self.foreign_item(*id));
|
||||
for id in module.foreign_items() {
|
||||
visitor.visit_foreign_item(self.foreign_item(id));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -8,7 +8,7 @@ use rustc_hir::intravisit::nested_filter::NestedFilter;
|
||||
/// constant arguments of types, e.g. in `let _: [(); /* HERE */];`.
|
||||
///
|
||||
/// **This is the most common choice.** A very common pattern is
|
||||
/// to use `deep_visit_all_item_likes()` as an outer loop,
|
||||
/// to use `visit_all_item_likes_in_crate()` as an outer loop,
|
||||
/// and to have the visitor that visits the contents of each item
|
||||
/// using this setting.
|
||||
pub struct OnlyBodies(());
|
||||
|
@ -173,7 +173,7 @@ fn mir_keys(tcx: TyCtxt<'_>, (): ()) -> FxIndexSet<LocalDefId> {
|
||||
intravisit::walk_struct_def(self, v)
|
||||
}
|
||||
}
|
||||
tcx.hir().deep_visit_all_item_likes(&mut GatherCtors { tcx, set: &mut set });
|
||||
tcx.hir().visit_all_item_likes_in_crate(&mut GatherCtors { tcx, set: &mut set });
|
||||
|
||||
set
|
||||
}
|
||||
|
@ -2428,7 +2428,7 @@ fn check_non_exported_macro_for_invalid_attrs(tcx: TyCtxt<'_>, item: &Item<'_>)
|
||||
|
||||
fn check_mod_attrs(tcx: TyCtxt<'_>, module_def_id: LocalDefId) {
|
||||
let check_attr_visitor = &mut CheckAttrVisitor { tcx };
|
||||
tcx.hir().deep_visit_item_likes_in_module(module_def_id, check_attr_visitor);
|
||||
tcx.hir().visit_item_likes_in_module(module_def_id, check_attr_visitor);
|
||||
if module_def_id.is_top_level_module() {
|
||||
check_attr_visitor.check_attributes(CRATE_HIR_ID, DUMMY_SP, Target::Mod, None);
|
||||
check_invalid_crate_level_attr(tcx, tcx.hir().krate_attrs());
|
||||
|
@ -56,7 +56,7 @@ impl NonConstExpr {
|
||||
|
||||
fn check_mod_const_bodies(tcx: TyCtxt<'_>, module_def_id: LocalDefId) {
|
||||
let mut vis = CheckConstVisitor::new(tcx);
|
||||
tcx.hir().deep_visit_item_likes_in_module(module_def_id, &mut vis);
|
||||
tcx.hir().visit_item_likes_in_module(module_def_id, &mut vis);
|
||||
}
|
||||
|
||||
pub(crate) fn provide(providers: &mut Providers) {
|
||||
|
@ -28,7 +28,7 @@ pub fn check_crate(tcx: TyCtxt<'_>) {
|
||||
errors: &errors,
|
||||
};
|
||||
|
||||
tcx.hir().deep_visit_item_likes_in_module(module_id, &mut v);
|
||||
tcx.hir().visit_item_likes_in_module(module_id, &mut v);
|
||||
});
|
||||
|
||||
let errors = errors.into_inner();
|
||||
|
@ -140,7 +140,7 @@ fn live_node_kind_to_string(lnk: LiveNodeKind, tcx: TyCtxt<'_>) -> String {
|
||||
}
|
||||
|
||||
fn check_mod_liveness(tcx: TyCtxt<'_>, module_def_id: LocalDefId) {
|
||||
tcx.hir().deep_visit_item_likes_in_module(module_def_id, &mut IrMaps::new(tcx));
|
||||
tcx.hir().visit_item_likes_in_module(module_def_id, &mut IrMaps::new(tcx));
|
||||
}
|
||||
|
||||
pub fn provide(providers: &mut Providers) {
|
||||
|
@ -31,7 +31,7 @@ struct CheckLoopVisitor<'a, 'hir> {
|
||||
}
|
||||
|
||||
fn check_mod_loops(tcx: TyCtxt<'_>, module_def_id: LocalDefId) {
|
||||
tcx.hir().deep_visit_item_likes_in_module(
|
||||
tcx.hir().visit_item_likes_in_module(
|
||||
module_def_id,
|
||||
&mut CheckLoopVisitor { sess: &tcx.sess, hir_map: tcx.hir(), cx: Normal },
|
||||
);
|
||||
|
@ -14,7 +14,7 @@ use rustc_span::Span;
|
||||
use rustc_target::spec::abi::Abi;
|
||||
|
||||
fn check_mod_naked_functions(tcx: TyCtxt<'_>, module_def_id: LocalDefId) {
|
||||
tcx.hir().deep_visit_item_likes_in_module(module_def_id, &mut CheckNakedFunctions { tcx });
|
||||
tcx.hir().visit_item_likes_in_module(module_def_id, &mut CheckNakedFunctions { tcx });
|
||||
}
|
||||
|
||||
pub(crate) fn provide(providers: &mut Providers) {
|
||||
|
@ -660,7 +660,7 @@ fn stability_index(tcx: TyCtxt<'_>, (): ()) -> Index {
|
||||
/// Cross-references the feature names of unstable APIs with enabled
|
||||
/// features and possibly prints errors.
|
||||
fn check_mod_unstable_api_usage(tcx: TyCtxt<'_>, module_def_id: LocalDefId) {
|
||||
tcx.hir().deep_visit_item_likes_in_module(module_def_id, &mut Checker { tcx });
|
||||
tcx.hir().visit_item_likes_in_module(module_def_id, &mut Checker { tcx });
|
||||
}
|
||||
|
||||
pub(crate) fn provide(providers: &mut Providers) {
|
||||
@ -890,7 +890,7 @@ pub fn check_unused_or_stable_features(tcx: TyCtxt<'_>) {
|
||||
let mut missing = MissingStabilityAnnotations { tcx, access_levels };
|
||||
missing.check_missing_stability(CRATE_DEF_ID, tcx.hir().span(CRATE_HIR_ID));
|
||||
tcx.hir().walk_toplevel_module(&mut missing);
|
||||
tcx.hir().deep_visit_all_item_likes(&mut missing);
|
||||
tcx.hir().visit_all_item_likes_in_crate(&mut missing);
|
||||
}
|
||||
|
||||
let declared_lang_features = &tcx.features().declared_lang_features;
|
||||
|
@ -59,7 +59,7 @@ struct OnlySelfBounds(bool);
|
||||
// Main entry point
|
||||
|
||||
fn collect_mod_item_types(tcx: TyCtxt<'_>, module_def_id: LocalDefId) {
|
||||
tcx.hir().deep_visit_item_likes_in_module(module_def_id, &mut CollectItemTypesVisitor { tcx });
|
||||
tcx.hir().visit_item_likes_in_module(module_def_id, &mut CollectItemTypesVisitor { tcx });
|
||||
}
|
||||
|
||||
pub fn provide(providers: &mut Providers) {
|
||||
|
@ -303,7 +303,7 @@ pub(crate) fn run(
|
||||
// Run call-finder on all items
|
||||
let mut calls = FxHashMap::default();
|
||||
let mut finder = FindCalls { calls: &mut calls, tcx, map: tcx.hir(), cx, target_crates };
|
||||
tcx.hir().deep_visit_all_item_likes(&mut finder);
|
||||
tcx.hir().visit_all_item_likes_in_crate(&mut finder);
|
||||
|
||||
// Sort call locations within a given file in document order
|
||||
for fn_calls in calls.values_mut() {
|
||||
|
@ -16,12 +16,6 @@ error: no path from `WillChange` to `trait_def`
|
||||
LL | #[rustc_then_this_would_need(trait_def)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: OK
|
||||
--> $DIR/dep-graph-struct-signature.rs:32:9
|
||||
|
|
||||
LL | #[rustc_then_this_would_need(fn_sig)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: OK
|
||||
--> $DIR/dep-graph-struct-signature.rs:36:5
|
||||
|
|
||||
@ -52,36 +46,12 @@ error: OK
|
||||
LL | #[rustc_then_this_would_need(type_of)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: OK
|
||||
--> $DIR/dep-graph-struct-signature.rs:48:9
|
||||
|
|
||||
LL | #[rustc_then_this_would_need(fn_sig)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: OK
|
||||
--> $DIR/dep-graph-struct-signature.rs:49:9
|
||||
|
|
||||
LL | #[rustc_then_this_would_need(typeck)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: OK
|
||||
--> $DIR/dep-graph-struct-signature.rs:53:5
|
||||
|
|
||||
LL | #[rustc_then_this_would_need(type_of)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: OK
|
||||
--> $DIR/dep-graph-struct-signature.rs:55:9
|
||||
|
|
||||
LL | #[rustc_then_this_would_need(fn_sig)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: OK
|
||||
--> $DIR/dep-graph-struct-signature.rs:56:9
|
||||
|
|
||||
LL | #[rustc_then_this_would_need(typeck)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: OK
|
||||
--> $DIR/dep-graph-struct-signature.rs:61:9
|
||||
|
|
||||
@ -106,12 +76,6 @@ error: no path from `WillChange` to `type_of`
|
||||
LL | #[rustc_then_this_would_need(type_of)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: no path from `WillChange` to `fn_sig`
|
||||
--> $DIR/dep-graph-struct-signature.rs:77:9
|
||||
|
|
||||
LL | #[rustc_then_this_would_need(fn_sig)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: no path from `WillChange` to `fn_sig`
|
||||
--> $DIR/dep-graph-struct-signature.rs:81:5
|
||||
|
|
||||
@ -130,5 +94,41 @@ error: no path from `WillChange` to `typeck`
|
||||
LL | #[rustc_then_this_would_need(typeck)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: OK
|
||||
--> $DIR/dep-graph-struct-signature.rs:32:9
|
||||
|
|
||||
LL | #[rustc_then_this_would_need(fn_sig)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: no path from `WillChange` to `fn_sig`
|
||||
--> $DIR/dep-graph-struct-signature.rs:77:9
|
||||
|
|
||||
LL | #[rustc_then_this_would_need(fn_sig)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: OK
|
||||
--> $DIR/dep-graph-struct-signature.rs:48:9
|
||||
|
|
||||
LL | #[rustc_then_this_would_need(fn_sig)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: OK
|
||||
--> $DIR/dep-graph-struct-signature.rs:49:9
|
||||
|
|
||||
LL | #[rustc_then_this_would_need(typeck)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: OK
|
||||
--> $DIR/dep-graph-struct-signature.rs:55:9
|
||||
|
|
||||
LL | #[rustc_then_this_would_need(fn_sig)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: OK
|
||||
--> $DIR/dep-graph-struct-signature.rs:56:9
|
||||
|
|
||||
LL | #[rustc_then_this_would_need(typeck)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: aborting due to 22 previous errors
|
||||
|
||||
|
@ -28,30 +28,12 @@ error: no path from `TypeAlias` to `type_of`
|
||||
LL | #[rustc_then_this_would_need(type_of)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: OK
|
||||
--> $DIR/dep-graph-type-alias.rs:36:5
|
||||
|
|
||||
LL | #[rustc_then_this_would_need(fn_sig)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: no path from `TypeAlias` to `type_of`
|
||||
--> $DIR/dep-graph-type-alias.rs:42:1
|
||||
|
|
||||
LL | #[rustc_then_this_would_need(type_of)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: OK
|
||||
--> $DIR/dep-graph-type-alias.rs:44:5
|
||||
|
|
||||
LL | #[rustc_then_this_would_need(fn_sig)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: OK
|
||||
--> $DIR/dep-graph-type-alias.rs:45:5
|
||||
|
|
||||
LL | #[rustc_then_this_would_need(typeck)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: OK
|
||||
--> $DIR/dep-graph-type-alias.rs:49:1
|
||||
|
|
||||
@ -70,5 +52,23 @@ error: OK
|
||||
LL | #[rustc_then_this_would_need(typeck)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: OK
|
||||
--> $DIR/dep-graph-type-alias.rs:36:5
|
||||
|
|
||||
LL | #[rustc_then_this_would_need(fn_sig)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: OK
|
||||
--> $DIR/dep-graph-type-alias.rs:44:5
|
||||
|
|
||||
LL | #[rustc_then_this_would_need(fn_sig)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: OK
|
||||
--> $DIR/dep-graph-type-alias.rs:45:5
|
||||
|
|
||||
LL | #[rustc_then_this_would_need(typeck)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: aborting due to 12 previous errors
|
||||
|
||||
|
@ -4,12 +4,6 @@ error: function has missing const stability attribute
|
||||
LL | pub const fn foo() {}
|
||||
| ^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: associated function has missing const stability attribute
|
||||
--> $DIR/missing-const-stability.rs:15:5
|
||||
|
|
||||
LL | pub const fn foo() {}
|
||||
| ^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: implementation has missing const stability attribute
|
||||
--> $DIR/missing-const-stability.rs:27:1
|
||||
|
|
||||
@ -19,5 +13,11 @@ LL | | fn fun() {}
|
||||
LL | | }
|
||||
| |_^
|
||||
|
||||
error: associated function has missing const stability attribute
|
||||
--> $DIR/missing-const-stability.rs:15:5
|
||||
|
|
||||
LL | pub const fn foo() {}
|
||||
| ^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: aborting due to 3 previous errors
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user