about summary refs log tree commit diff
diff options
context:
space:
mode:
authorShivani Bhardwaj <shivanib134@gmail.com>2021-09-11 00:05:16 +0530
committerGuillaume Gomez <guillaume.gomez@huawei.com>2022-06-27 10:43:51 +0200
commite1b6f16fd4ae507d9484e20bfbf9355e551c2bb2 (patch)
tree0a457b19ee2cd53f8ec2cd08d8e93b595bc77fe9
parent7036449c774860a5b348dbbe01c20704c557382e (diff)
downloadrust-e1b6f16fd4ae507d9484e20bfbf9355e551c2bb2.tar.gz
rust-e1b6f16fd4ae507d9484e20bfbf9355e551c2bb2.zip
Fix `rustdoc` argument error
-rw-r--r--compiler/rustc_driver/src/lib.rs2
-rw-r--r--src/librustdoc/config.rs22
-rw-r--r--src/librustdoc/lib.rs2
3 files changed, 22 insertions, 4 deletions
diff --git a/compiler/rustc_driver/src/lib.rs b/compiler/rustc_driver/src/lib.rs
index caa92e74808..3096af90d47 100644
--- a/compiler/rustc_driver/src/lib.rs
+++ b/compiler/rustc_driver/src/lib.rs
@@ -932,7 +932,7 @@ fn describe_codegen_flags() {
     print_flag_list("-C", config::CG_OPTIONS);
 }
 
-fn print_flag_list<T>(
+pub fn print_flag_list<T>(
     cmdline_opt: &str,
     flag_list: &[(&'static str, T, &'static str, &'static str)],
 ) {
diff --git a/src/librustdoc/config.rs b/src/librustdoc/config.rs
index e59324331ae..52e616c9f3d 100644
--- a/src/librustdoc/config.rs
+++ b/src/librustdoc/config.rs
@@ -6,6 +6,7 @@ use std::path::PathBuf;
 use std::str::FromStr;
 
 use rustc_data_structures::fx::FxHashMap;
+use rustc_driver::print_flag_list;
 use rustc_session::config::{
     self, parse_crate_types_from_list, parse_externs, parse_target_triple, CrateType,
 };
@@ -310,11 +311,12 @@ impl RenderOptions {
 impl Options {
     /// Parses the given command-line for options. If an error message or other early-return has
     /// been printed, returns `Err` with the exit code.
-    pub(crate) fn from_matches(matches: &getopts::Matches) -> Result<Options, i32> {
+    pub(crate) fn from_matches(matches: &getopts::Matches, args: Vec<String>) -> Result<Options, i32> {
+        let args = &args[1..];
         // Check for unstable options.
         nightly_options::check_nightly_options(matches, &opts());
 
-        if matches.opt_present("h") || matches.opt_present("help") {
+        if args.is_empty() || matches.opt_present("h") || matches.opt_present("help") {
             crate::usage("rustdoc");
             return Err(0);
         } else if matches.opt_present("version") {
@@ -335,6 +337,21 @@ impl Options {
         // check for deprecated options
         check_deprecated_options(matches, &diag);
 
+        let z_flags = matches.opt_strs("Z");
+        if z_flags.iter().any(|x| *x == "help") {
+            print_flag_list("-Z", config::DB_OPTIONS);
+            return Err(0);
+        }
+        let c_flags = matches.opt_strs("C");
+        if c_flags.iter().any(|x| *x == "help") {
+            print_flag_list("-C", config::CG_OPTIONS);
+            return Err(0);
+        }
+        let w_flags = matches.opt_strs("W");
+        if w_flags.iter().any(|x| *x == "help") {
+            print_flag_list("-W", config::DB_OPTIONS);
+            return Err(0);
+        }
         if matches.opt_strs("passes") == ["list"] {
             println!("Available passes for running rustdoc:");
             for pass in passes::PASSES {
@@ -415,6 +432,7 @@ impl Options {
             }
             return Err(0);
         }
+        let (_lint_opts, _describe_lints, _lint_cap) = get_cmd_lint_options(matches, error_format);
 
         if matches.free.is_empty() {
             diag.struct_err("missing file operand").emit();
diff --git a/src/librustdoc/lib.rs b/src/librustdoc/lib.rs
index 54b85166041..db4c3d10237 100644
--- a/src/librustdoc/lib.rs
+++ b/src/librustdoc/lib.rs
@@ -686,7 +686,7 @@ fn main_args(at_args: &[String]) -> MainResult {
 
     // Note that we discard any distinction between different non-zero exit
     // codes from `from_matches` here.
-    let options = match config::Options::from_matches(&matches) {
+    let options = match config::Options::from_matches(&matches, args) {
         Ok(opts) => opts,
         Err(code) => {
             return if code == 0 {