Auto merge of #51732 - GuillaumeGomez:cmd-line-lint-rustdoc, r=QuietMisdreavus
Add command line lint manipulation in rustdoc Fixes #50082. r? @QuietMisdreavus
This commit is contained in:
commit
00f49728e0
3 changed files with 58 additions and 20 deletions
|
@ -1747,6 +1747,29 @@ pub fn parse_cfgspecs(cfgspecs: Vec<String>) -> ast::CrateConfig {
|
||||||
.collect::<ast::CrateConfig>()
|
.collect::<ast::CrateConfig>()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn get_cmd_lint_options(matches: &getopts::Matches,
|
||||||
|
error_format: ErrorOutputType)
|
||||||
|
-> (Vec<(String, lint::Level)>, bool, Option<lint::Level>) {
|
||||||
|
let mut lint_opts = vec![];
|
||||||
|
let mut describe_lints = false;
|
||||||
|
|
||||||
|
for &level in &[lint::Allow, lint::Warn, lint::Deny, lint::Forbid] {
|
||||||
|
for lint_name in matches.opt_strs(level.as_str()) {
|
||||||
|
if lint_name == "help" {
|
||||||
|
describe_lints = true;
|
||||||
|
} else {
|
||||||
|
lint_opts.push((lint_name.replace("-", "_"), level));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let lint_cap = matches.opt_str("cap-lints").map(|cap| {
|
||||||
|
lint::Level::from_str(&cap)
|
||||||
|
.unwrap_or_else(|| early_error(error_format, &format!("unknown lint level: `{}`", cap)))
|
||||||
|
});
|
||||||
|
(lint_opts, describe_lints, lint_cap)
|
||||||
|
}
|
||||||
|
|
||||||
pub fn build_session_options_and_crate_config(
|
pub fn build_session_options_and_crate_config(
|
||||||
matches: &getopts::Matches,
|
matches: &getopts::Matches,
|
||||||
) -> (Options, ast::CrateConfig) {
|
) -> (Options, ast::CrateConfig) {
|
||||||
|
@ -1824,23 +1847,7 @@ pub fn build_session_options_and_crate_config(
|
||||||
let crate_types = parse_crate_types_from_list(unparsed_crate_types)
|
let crate_types = parse_crate_types_from_list(unparsed_crate_types)
|
||||||
.unwrap_or_else(|e| early_error(error_format, &e[..]));
|
.unwrap_or_else(|e| early_error(error_format, &e[..]));
|
||||||
|
|
||||||
let mut lint_opts = vec![];
|
let (lint_opts, describe_lints, lint_cap) = get_cmd_lint_options(matches, error_format);
|
||||||
let mut describe_lints = false;
|
|
||||||
|
|
||||||
for &level in &[lint::Allow, lint::Warn, lint::Deny, lint::Forbid] {
|
|
||||||
for lint_name in matches.opt_strs(level.as_str()) {
|
|
||||||
if lint_name == "help" {
|
|
||||||
describe_lints = true;
|
|
||||||
} else {
|
|
||||||
lint_opts.push((lint_name.replace("-", "_"), level));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
let lint_cap = matches.opt_str("cap-lints").map(|cap| {
|
|
||||||
lint::Level::from_str(&cap)
|
|
||||||
.unwrap_or_else(|| early_error(error_format, &format!("unknown lint level: `{}`", cap)))
|
|
||||||
});
|
|
||||||
|
|
||||||
let mut debugging_opts = build_debugging_options(matches, error_format);
|
let mut debugging_opts = build_debugging_options(matches, error_format);
|
||||||
|
|
||||||
|
|
|
@ -178,7 +178,10 @@ pub fn run_core(search_paths: SearchPaths,
|
||||||
force_unstable_if_unmarked: bool,
|
force_unstable_if_unmarked: bool,
|
||||||
edition: Edition,
|
edition: Edition,
|
||||||
cg: CodegenOptions,
|
cg: CodegenOptions,
|
||||||
error_format: ErrorOutputType) -> (clean::Crate, RenderInfo)
|
error_format: ErrorOutputType,
|
||||||
|
cmd_lints: Vec<(String, lint::Level)>,
|
||||||
|
lint_cap: Option<lint::Level>,
|
||||||
|
describe_lints: bool) -> (clean::Crate, RenderInfo)
|
||||||
{
|
{
|
||||||
// Parse, resolve, and typecheck the given crate.
|
// Parse, resolve, and typecheck the given crate.
|
||||||
|
|
||||||
|
@ -200,6 +203,7 @@ pub fn run_core(search_paths: SearchPaths,
|
||||||
Some((lint.name_lower(), lint::Allow))
|
Some((lint.name_lower(), lint::Allow))
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
.chain(cmd_lints.into_iter())
|
||||||
.collect::<Vec<_>>();
|
.collect::<Vec<_>>();
|
||||||
|
|
||||||
let host_triple = TargetTriple::from_triple(config::host_triple());
|
let host_triple = TargetTriple::from_triple(config::host_triple());
|
||||||
|
@ -213,7 +217,7 @@ pub fn run_core(search_paths: SearchPaths,
|
||||||
} else {
|
} else {
|
||||||
vec![]
|
vec![]
|
||||||
},
|
},
|
||||||
lint_cap: Some(lint::Forbid),
|
lint_cap: Some(lint_cap.unwrap_or_else(|| lint::Forbid)),
|
||||||
cg,
|
cg,
|
||||||
externs,
|
externs,
|
||||||
target_triple: triple.unwrap_or(host_triple),
|
target_triple: triple.unwrap_or(host_triple),
|
||||||
|
@ -226,6 +230,7 @@ pub fn run_core(search_paths: SearchPaths,
|
||||||
},
|
},
|
||||||
error_format,
|
error_format,
|
||||||
edition,
|
edition,
|
||||||
|
describe_lints,
|
||||||
..config::basic_options()
|
..config::basic_options()
|
||||||
};
|
};
|
||||||
driver::spawn_thread_pool(sessopts, move |sessopts| {
|
driver::spawn_thread_pool(sessopts, move |sessopts| {
|
||||||
|
|
|
@ -68,6 +68,7 @@ use rustc::session::search_paths::SearchPaths;
|
||||||
use rustc::session::config::{ErrorOutputType, RustcOptGroup, Externs, CodegenOptions};
|
use rustc::session::config::{ErrorOutputType, RustcOptGroup, Externs, CodegenOptions};
|
||||||
use rustc::session::config::{nightly_options, build_codegen_options};
|
use rustc::session::config::{nightly_options, build_codegen_options};
|
||||||
use rustc_target::spec::TargetTriple;
|
use rustc_target::spec::TargetTriple;
|
||||||
|
use rustc::session::config::get_cmd_lint_options;
|
||||||
|
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
pub mod externalfiles;
|
pub mod externalfiles;
|
||||||
|
@ -308,6 +309,28 @@ pub fn opts() -> Vec<RustcOptGroup> {
|
||||||
"disable-minification",
|
"disable-minification",
|
||||||
"Disable minification applied on JS files")
|
"Disable minification applied on JS files")
|
||||||
}),
|
}),
|
||||||
|
unstable("warn", |o| {
|
||||||
|
o.optmulti("W", "warn", "Set lint warnings", "OPT")
|
||||||
|
}),
|
||||||
|
unstable("allow", |o| {
|
||||||
|
o.optmulti("A", "allow", "Set lint allowed", "OPT")
|
||||||
|
}),
|
||||||
|
unstable("deny", |o| {
|
||||||
|
o.optmulti("D", "deny", "Set lint denied", "OPT")
|
||||||
|
}),
|
||||||
|
unstable("forbid", |o| {
|
||||||
|
o.optmulti("F", "forbid", "Set lint forbidden", "OPT")
|
||||||
|
}),
|
||||||
|
unstable("cap-lints", |o| {
|
||||||
|
o.optmulti(
|
||||||
|
"",
|
||||||
|
"cap-lints",
|
||||||
|
"Set the most restrictive lint level. \
|
||||||
|
More restrictive lints are capped at this \
|
||||||
|
level. By default, it is at `forbid` level.",
|
||||||
|
"LEVEL",
|
||||||
|
)
|
||||||
|
}),
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -640,6 +663,8 @@ where R: 'static + Send,
|
||||||
*x == "force-unstable-if-unmarked"
|
*x == "force-unstable-if-unmarked"
|
||||||
});
|
});
|
||||||
|
|
||||||
|
let (lint_opts, describe_lints, lint_cap) = get_cmd_lint_options(matches, error_format);
|
||||||
|
|
||||||
let (tx, rx) = channel();
|
let (tx, rx) = channel();
|
||||||
|
|
||||||
rustc_driver::monitor(move || syntax::with_globals(move || {
|
rustc_driver::monitor(move || syntax::with_globals(move || {
|
||||||
|
@ -648,7 +673,8 @@ where R: 'static + Send,
|
||||||
let (mut krate, renderinfo) =
|
let (mut krate, renderinfo) =
|
||||||
core::run_core(paths, cfgs, externs, Input::File(cratefile), triple, maybe_sysroot,
|
core::run_core(paths, cfgs, externs, Input::File(cratefile), triple, maybe_sysroot,
|
||||||
display_warnings, crate_name.clone(),
|
display_warnings, crate_name.clone(),
|
||||||
force_unstable_if_unmarked, edition, cg, error_format);
|
force_unstable_if_unmarked, edition, cg, error_format,
|
||||||
|
lint_opts, lint_cap, describe_lints);
|
||||||
|
|
||||||
info!("finished with rustc");
|
info!("finished with rustc");
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue