Add listing of lints (eg via -W help) to rustdoc

This commit is contained in:
Alan Egerton 2021-04-06 02:09:43 +01:00
parent d322385321
commit 4d23c8e9a1
No known key found for this signature in database
GPG Key ID: 68A65BCD9D289FFE
5 changed files with 43 additions and 4 deletions

View File

@ -845,7 +845,8 @@ the command line flag directly.
);
}
fn describe_lints(sess: &Session, lint_store: &LintStore, loaded_plugins: bool) {
/// Write to stdout lint command options, together with a list of all available lints
pub fn describe_lints(sess: &Session, lint_store: &LintStore, loaded_plugins: bool) {
println!(
"
Available lint options:

View File

@ -97,8 +97,7 @@ crate struct Options {
crate maybe_sysroot: Option<PathBuf>,
/// Lint information passed over the command-line.
crate lint_opts: Vec<(String, Level)>,
/// Whether to ask rustc to describe the lints it knows. Practically speaking, this will not be
/// used, since we abort if we have no input file, but it's included for completeness.
/// Whether to ask rustc to describe the lints it knows.
crate describe_lints: bool,
/// What level to cap lints at.
crate lint_cap: Option<Level>,

View File

@ -74,7 +74,7 @@ use std::default::Default;
use std::env;
use std::process;
use rustc_driver::abort_on_err;
use rustc_driver::{abort_on_err, describe_lints};
use rustc_errors::ErrorReported;
use rustc_interface::interface;
use rustc_middle::ty::TyCtxt;
@ -705,6 +705,12 @@ fn main_options(options: config::Options) -> MainResult {
compiler.enter(|queries| {
let sess = compiler.session();
if sess.opts.describe_lints {
let (_, lint_store) = &*queries.register_plugins()?.peek();
describe_lints(sess, lint_store, true);
return Ok(());
}
// We need to hold on to the complete resolver, so we cause everything to be
// cloned for the analysis passes to use. Suboptimal, but necessary in the
// current architecture.

View File

@ -0,0 +1,8 @@
// compile-flags: -W help
// check-pass
//
// ignore-tidy-linelength
//
// normalize-stdout-test: "( +name default meaning\n +---- ------- -------\n)?( *[[:word:]:-]+ (allow |warn |deny |forbid ) [^\n]+\n)+" -> " $$NAMES $$LEVELS $$MEANINGS"
// normalize-stdout-test: " +name sub-lints\n +---- ---------\n( *[[:word:]:-]+ [^\n]+\n)+" -> " $$NAMES $$SUB_LINTS"
// normalize-stdout-test: " +rustdoc::all( (rustdoc::[[:word:]-]+, )*rustdoc::[[:word:]-]+)?" -> " rustdoc::all $$GROUPS$4"

View File

@ -0,0 +1,25 @@
Available lint options:
-W <foo> Warn about <foo>
-A <foo> Allow <foo>
-D <foo> Deny <foo>
-F <foo> Forbid <foo> (deny <foo> and all attempts to override)
Lint checks provided by rustc:
$NAMES $LEVELS $MEANINGS
Lint groups provided by rustc:
$NAMES $SUB_LINTS
Lint checks provided by plugins loaded by this crate:
$NAMES $LEVELS $MEANINGS
Lint groups provided by plugins loaded by this crate:
rustdoc::all $GROUPS