@@ -65,16 +65,6 @@ fn forward_patched_extern_arg(args: &mut impl Iterator<Item = String>, cmd: &mut
6565}
6666
6767pub fn phase_cargo_miri(mut args: impl Iterator<Item = String>) {
68- // Check for version and help flags even when invoked as `cargo-miri`.
69- if has_arg_flag("--help") || has_arg_flag("-h") {
70- show_help();
71- return;
72- }
73- if has_arg_flag("--version") || has_arg_flag("-V") {
74- show_version();
75- return;
76- }
77-
7868 // Require a subcommand before any flags.
7969 // We cannot know which of those flags take arguments and which do not,
8070 // so we cannot detect subcommands later.
@@ -85,11 +75,36 @@ pub fn phase_cargo_miri(mut args: impl Iterator<Item = String>) {
8575 "setup" => MiriCommand::Setup,
8676 "test" | "t" | "run" | "r" | "nextest" => MiriCommand::Forward(subcommand),
8777 "clean" => MiriCommand::Clean,
88- _ =>
78+ _ => {
79+ // Check for version and help flags.
80+ if has_arg_flag("--help") || has_arg_flag("-h") {
81+ show_help();
82+ return;
83+ }
84+ if has_arg_flag("--version") || has_arg_flag("-V") {
85+ show_version();
86+ return;
87+ }
8988 show_error!(
9089 "`cargo miri` supports the following subcommands: `run`, `test`, `nextest`, `clean`, and `setup`."
91- ),
90+ )
91+ }
9292 };
93+ if has_arg_flag("--help") || has_arg_flag("-h") {
94+ match subcommand {
95+ MiriCommand::Forward(verb) => {
96+ println!("`cargo miri {verb}` supports the same flags as `cargo {verb}`:\n");
97+ let mut cmd = cargo();
98+ cmd.arg(verb);
99+ cmd.arg("--help");
100+ exec(cmd);
101+ }
102+ _ => {
103+ show_help();
104+ return;
105+ }
106+ }
107+ }
93108 let verbose = num_arg_flag("-v") + num_arg_flag("--verbose");
94109 let quiet = has_arg_flag("-q") || has_arg_flag("--quiet");
95110
0 commit comments