Skip to content

Commit 6eec9fb

Browse files
committed
Address review comments
- Move static variables into the innermost scope in which they are used - Clean up comments - Remove external_providers; rename local_providers -> providers
1 parent ac9157b commit 6eec9fb

File tree

1 file changed

+22
-19
lines changed

1 file changed

+22
-19
lines changed

src/librustdoc/core.rs

+22-19
Original file line numberDiff line numberDiff line change
@@ -377,18 +377,26 @@ pub fn run_core(options: RustdocOptions) -> (clean::Crate, RenderInfo, RenderOpt
377377
crate_name,
378378
lint_caps,
379379
register_lints: None,
380-
override_queries: Some(|_sess, local_providers, external_providers| {
381-
lazy_static! {
382-
static ref EMPTY_SET: FxHashSet<LocalDefId> = FxHashSet::default();
383-
}
380+
override_queries: Some(|_sess, providers, _external_providers| {
384381
// Most lints will require typechecking, so just don't run them.
385-
local_providers.lint_mod = |_, _| {};
386-
external_providers.lint_mod = |_, _| {};
387-
local_providers.typeck_item_bodies = |_, _| {};
382+
providers.lint_mod = |_, _| {};
383+
// Prevent `rustc_typeck::check_crate` from calling `typeck_tables_of` on all bodies.
384+
providers.typeck_item_bodies = |_, _| {};
388385
// hack so that `used_trait_imports` won't try to call typeck_tables_of
389-
local_providers.used_trait_imports = |_, _| &EMPTY_SET;
386+
providers.used_trait_imports = |_, _| {
387+
lazy_static! {
388+
static ref EMPTY_SET: FxHashSet<LocalDefId> = FxHashSet::default();
389+
}
390+
&EMPTY_SET
391+
};
390392
// In case typeck does end up being called, don't ICE in case there were name resolution errors
391-
local_providers.typeck_tables_of = move |tcx, def_id| {
393+
providers.typeck_tables_of = move |tcx, def_id| {
394+
thread_local!(static DEFAULT_TYPECK: for<'tcx> fn(TyCtxt<'tcx>, LocalDefId) -> &'tcx ty::TypeckTables<'tcx> = {
395+
let mut providers = ty::query::Providers::default();
396+
rustc_typeck::provide(&mut providers);
397+
providers.typeck_tables_of
398+
});
399+
392400
// Closures' tables come from their outermost function,
393401
// as they are part of the same "inference environment".
394402
// This avoids emitting errors for the parent twice (see similar code in `typeck_tables_of_with_fallback`)
@@ -447,10 +455,11 @@ pub fn run_core(options: RustdocOptions) -> (clean::Crate, RenderInfo, RenderOpt
447455
let mut global_ctxt = abort_on_err(queries.global_ctxt(), sess).take();
448456

449457
global_ctxt.enter(|tcx| {
450-
// Some queries require that they only run on valid types:
451-
// https://github.com/rust-lang/rust/pull/73566#issuecomment-656954425
452-
// Therefore typecheck this crate before running lints.
453-
// NOTE: this does not typeck item bodies or run the default rustc lints
458+
// Certain queries assume that some checks were run elsewhere
459+
// (see https://github.com/rust-lang/rust/pull/73566#issuecomment-656954425),
460+
// so type-check everything other than function bodies in this crate before running lints.
461+
// NOTE: this does not call `tcx.analysis()` so that we won't
462+
// typeck function bodies or run the default rustc lints.
454463
// (see `override_queries` in the `config`)
455464
let _ = rustc_typeck::check_crate(tcx);
456465
tcx.sess.abort_if_errors();
@@ -607,12 +616,6 @@ pub fn run_core(options: RustdocOptions) -> (clean::Crate, RenderInfo, RenderOpt
607616
})
608617
}
609618

610-
thread_local!(static DEFAULT_TYPECK: for<'tcx> fn(TyCtxt<'tcx>, LocalDefId) -> &'tcx ty::TypeckTables<'tcx> = {
611-
let mut providers = ty::query::Providers::default();
612-
rustc_typeck::provide(&mut providers);
613-
providers.typeck_tables_of
614-
});
615-
616619
/// Due to https://github.com/rust-lang/rust/pull/73566,
617620
/// the name resolution pass may find errors that are never emitted.
618621
/// If typeck is called after this happens, then we'll get an ICE:

0 commit comments

Comments
 (0)