Repository: clap-rs/clap
Pull request #4287 (2022-09-29 13:54:49)

fix(error): Polish up errors a little
Noticed some issues in an error screenshot in artichoke/artichoke#2196


Patch:
diff --git a/src/builder/styled_str.rs b/src/builder/styled_str.rs
index 6ecd42e1..ecd05a35 100644
--- a/src/builder/styled_str.rs
+++ b/src/builder/styled_str.rs
@@ -40,6 +40,7 @@ impl StyledStr {
         self.stylize_(Some(Style::Placeholder), msg.into());
     }
 
+    #[cfg_attr(not(feature = "error-context"), allow(dead_code))]
     pub(crate) fn good(&mut self, msg: impl Into<String>) {
         self.stylize_(Some(Style::Good), msg.into());
     }
diff --git a/src/error/format.rs b/src/error/format.rs
index 5f5713f4..eec7867c 100644
--- a/src/error/format.rs
+++ b/src/error/format.rs
@@ -357,20 +357,23 @@ fn write_dynamic_context(error: &crate::error::Error, styled: &mut StyledStr) ->
                     if invalid_arg.starts_with('-') {
                         styled.none("\n\n");
                         styled.none(TAB);
-                        styled.none(format!(
-                                "If you tried to supply `{}` as a value rather than a flag, use `-- {}`",
-                                invalid_arg, invalid_arg
-                            ));
+                        styled.none("If you tried to supply '");
+                        styled.warning(invalid_arg);
+                        styled.none("' as a value rather than a flag, use '");
+                        styled.good("-- ");
+                        styled.good(invalid_arg);
+                        styled.none("'");
                     }
 
                     let trailing_arg = error.get(ContextKind::TrailingArg);
                     if trailing_arg == Some(&ContextValue::Bool(true)) {
                         styled.none("\n\n");
                         styled.none(TAB);
-                        styled.none(format!(
-                            "If you tried to supply `{}` as a subcommand, remove the '--' before it.",
-                            invalid_arg
-                        ));
+                        styled.none("If you tried to supply '");
+                        styled.warning(invalid_arg);
+                        styled.none("' as a subcommand, remove the '");
+                        styled.warning("--");
+                        styled.none("' before it.");
                     }
                 }
                 true
@@ -430,7 +433,7 @@ pub(crate) fn get_help_flag(cmd: &Command) -> Option<&'static str> {
 fn try_help(styled: &mut StyledStr, help: Option<&str>) {
     if let Some(help) = help {
         styled.none("\n\nFor more information try '");
-        styled.good(help.to_owned());
+        styled.literal(help.to_owned());
         styled.none("'\n");
     } else {
         styled.none("\n");


Test patch:
diff --git a/examples/derive_ref/interop_tests.md b/examples/derive_ref/interop_tests.md
index df2b0d25..2645a615 100644
--- a/examples/derive_ref/interop_tests.md
+++ b/examples/derive_ref/interop_tests.md
@@ -37,7 +37,7 @@ $ interop_augment_args --unknown
 ? failed
 error: Found argument '--unknown' which wasn't expected, or isn't valid in this context
 
-  If you tried to supply `--unknown` as a value rather than a flag, use `-- --unknown`
+  If you tried to supply '--unknown' as a value rather than a flag, use '-- --unknown'
 
 Usage: interop_augment_args[EXE] [OPTIONS]
 
@@ -74,7 +74,7 @@ $ interop_augment_subcommands derived --unknown
 ? failed
 error: Found argument '--unknown' which wasn't expected, or isn't valid in this context
 
-  If you tried to supply `--unknown` as a value rather than a flag, use `-- --unknown`
+  If you tried to supply '--unknown' as a value rather than a flag, use '-- --unknown'
 
 Usage: interop_augment_subcommands[EXE] derived [OPTIONS]
 
@@ -146,7 +146,7 @@ $ interop_hand_subcommand add --unknown
 ? failed
 error: Found argument '--unknown' which wasn't expected, or isn't valid in this context
 
-  If you tried to supply `--unknown` as a value rather than a flag, use `-- --unknown`
+  If you tried to supply '--unknown' as a value rather than a flag, use '-- --unknown'
 
 Usage: interop_hand_subcommand[EXE] add [NAME]...
 
@@ -245,7 +245,7 @@ $ interop_flatten_hand_args --unknown
 ? failed
 error: Found argument '--unknown' which wasn't expected, or isn't valid in this context
 
-  If you tried to supply `--unknown` as a value rather than a flag, use `-- --unknown`
+  If you tried to supply '--unknown' as a value rather than a flag, use '-- --unknown'
 
 Usage: interop_flatten_hand_args[EXE] [OPTIONS]
 
diff --git a/tests/builder/flags.rs b/tests/builder/flags.rs
index 50ba789a..05804410 100644
--- a/tests/builder/flags.rs
+++ b/tests/builder/flags.rs
@@ -160,7 +160,7 @@ fn issue_1284_argument_in_flag_style() {
     const USE_FLAG_AS_ARGUMENT: &str = "\
 error: Found argument '--another-flag' which wasn't expected, or isn't valid in this context
 
-  If you tried to supply `--another-flag` as a value rather than a flag, use `-- --another-flag`
+  If you tried to supply '--another-flag' as a value rather than a flag, use '-- --another-flag'
 
 Usage: mycat [OPTIONS] [filename]
 
@@ -204,7 +204,7 @@ fn issue_2308_multiple_dashes() {
     static MULTIPLE_DASHES: &str = "\
 error: Found argument '-----' which wasn't expected, or isn't valid in this context
 
-  If you tried to supply `-----` as a value rather than a flag, use `-- -----`
+  If you tried to supply '-----' as a value rather than a flag, use '-- -----'
 
 Usage: test <arg>
 
diff --git a/tests/builder/opts.rs b/tests/builder/opts.rs
index 2771306f..86258e26 100644
--- a/tests/builder/opts.rs
+++ b/tests/builder/opts.rs
@@ -451,7 +451,7 @@ error: Found argument '--optio' which wasn't expected, or isn't valid in this co
 
   Did you mean '--option'?
 
-  If you tried to supply `--optio` as a value rather than a flag, use `-- --optio`
+  If you tried to supply '--optio' as a value rather than a flag, use '-- --optio'
 
 Usage: clap-test --option <opt>... [positional] [positional2] [positional3]...
 
@@ -551,7 +551,7 @@ error: Found argument '--files-without-matches' which wasn't expected, or isn't
 
   Did you mean '--files-without-match'?
 
-  If you tried to supply `--files-without-matches` as a value rather than a flag, use `-- --files-without-matches`
+  If you tried to supply '--files-without-matches' as a value rather than a flag, use '-- --files-without-matches'
 
 Usage: ripgrep-616 --files-without-match
 
diff --git a/tests/builder/subcommands.rs b/tests/builder/subcommands.rs
index 1dbdf0bd..509f3dfc 100644
--- a/tests/builder/subcommands.rs
+++ b/tests/builder/subcommands.rs
@@ -145,7 +145,7 @@ error: Found argument '--subcmarg' which wasn't expected, or isn't valid in this
 
   Did you mean to put '--subcmdarg' after the subcommand 'subcmd'?
 
-  If you tried to supply `--subcmarg` as a value rather than a flag, use `-- --subcmarg`
+  If you tried to supply '--subcmarg' as a value rather than a flag, use '-- --subcmarg'
 
 Usage: dym [COMMAND]
 
@@ -165,7 +165,7 @@ fn subcmd_did_you_mean_output_arg_false_positives() {
     static EXPECTED: &str = "\
 error: Found argument '--subcmarg' which wasn't expected, or isn't valid in this context
 
-  If you tried to supply `--subcmarg` as a value rather than a flag, use `-- --subcmarg`
+  If you tried to supply '--subcmarg' as a value rather than a flag, use '-- --subcmarg'
 
 Usage: dym [COMMAND]
 
@@ -359,7 +359,7 @@ fn subcommand_used_after_double_dash() {
     static SUBCMD_AFTER_DOUBLE_DASH: &str = "\
 error: Found argument 'subcmd' which wasn't expected, or isn't valid in this context
 
-  If you tried to supply `subcmd` as a subcommand, remove the '--' before it.
+  If you tried to supply 'subcmd' as a subcommand, remove the '--' before it.
 
 Usage: cmd [COMMAND]
 
diff --git a/tests/ui/error_stderr.toml b/tests/ui/error_stderr.toml
index 364984de..80f46113 100644
--- a/tests/ui/error_stderr.toml
+++ b/tests/ui/error_stderr.toml
@@ -5,7 +5,7 @@ stdout = ""
 stderr = """
 error: Found argument '--unknown-argument' which wasn't expected, or isn't valid in this context
 
-  If you tried to supply `--unknown-argument` as a value rather than a flag, use `-- --unknown-argument`
+  If you tried to supply '--unknown-argument' as a value rather than a flag, use '-- --unknown-argument'
 
 Usage: stdio-fixture[EXE] [OPTIONS] [COMMAND]