diff --git a/src/librustc_driver/lib.rs b/src/librustc_driver/lib.rs index ce40d9b53ff0a..d50b8e5eca284 100644 --- a/src/librustc_driver/lib.rs +++ b/src/librustc_driver/lib.rs @@ -657,24 +657,30 @@ Available lint options: fn describe_debug_flags() { println!("\nAvailable debug options:\n"); - for &(name, _, opt_type_desc, desc) in config::DB_OPTIONS { - let (width, extra) = match opt_type_desc { - Some(..) => (21, "=val"), - None => (25, "") - }; - println!(" -Z {:>width$}{} -- {}", name.replace("_", "-"), - extra, desc, width=width); - } + print_flag_list("-Z", config::DB_OPTIONS); } fn describe_codegen_flags() { println!("\nAvailable codegen options:\n"); - for &(name, _, opt_type_desc, desc) in config::CG_OPTIONS { + print_flag_list("-C", config::CG_OPTIONS); +} + +fn print_flag_list(cmdline_opt: &str, + flag_list: &[(&'static str, T, Option<&'static str>, &'static str)]) { + let max_len = flag_list.iter().map(|&(name, _, opt_type_desc, _)| { + let extra_len = match opt_type_desc { + Some(..) => 4, + None => 0 + }; + name.chars().count() + extra_len + }).max().unwrap_or(0); + + for &(name, _, opt_type_desc, desc) in flag_list { let (width, extra) = match opt_type_desc { - Some(..) => (21, "=val"), - None => (25, "") + Some(..) => (max_len - 4, "=val"), + None => (max_len, "") }; - println!(" -C {:>width$}{} -- {}", name.replace("_", "-"), + println!(" {} {:>width$}{} -- {}", cmdline_opt, name.replace("_", "-"), extra, desc, width=width); } }