Move describe_lints calls.

Currently we have an inconsistency between the "input" and "no input"
cases:
- no input: `rustc --print=sysroot -Whelp` prints the lint help.
- input:    `rustc --print=sysroot -Whelp a.rs` prints the sysroot.

It makes sense to print the lint help in both cases, because that's what
happens with `--help`/`-Zhelp`/`-Chelp`.

In fact, the `describe_lints` in the "input" case happens amazingly
late, after *parsing*. This is because, with plugins, lints used to be
registered much later, when the global context was created. But #117649
moved lint registration much earlier, during session construction.

So this commit moves the `describe_lints` call to a single spot for both
for both the "input" and "no input" cases, as early as possible. This is
still not as early as `--help`/`-Zhelp`/`-Chelp`, because `-Whelp` must
wait until the session is constructed.
This commit is contained in:
Nicholas Nethercote 2023-11-17 13:22:06 +11:00
parent 8aee35e2ed
commit 446c8e06d9

View file

@ -362,13 +362,18 @@ fn run_compiler(
interface::run_compiler(config, |compiler| {
let sess = compiler.session();
let codegen_backend = compiler.codegen_backend();
let handler = EarlyErrorHandler::new(sess.opts.error_format);
if !has_input {
// This implements `-Whelp`. It should be handled very early, like
// `--help`/`-Zhelp`/`-Chelp`. This is the earliest it can run, because
// it must happen after lints are registered, during session creation.
if sess.opts.describe_lints {
describe_lints(sess);
return sess.compile_status();
}
let handler = EarlyErrorHandler::new(sess.opts.error_format);
if !has_input {
let should_stop = print_crate_info(&handler, codegen_backend, sess, false);
if should_stop == Compilation::Continue {
handler.early_error("no input filename given")
@ -419,11 +424,6 @@ fn run_compiler(
return early_exit();
}
if sess.opts.describe_lints {
describe_lints(sess);
return early_exit();
}
// Make sure name resolution and macro expansion is run.
queries.global_ctxt()?.enter(|tcx| tcx.resolver_for_lowering(()));