Repository: clap-rs/clap (Rust)

Issue:
Specifying a default value but no help text results in the default value being pushed one space to the right inside the help screen
## Output

```text
next-semver 0.0.0
Detect the next semantic release version based on your commit history

USAGE:
    next-semver.exe [FLAGS] [OPTIONS]

FLAGS:
    -h, --help       Prints help information

OPTIONS:
    -f, --from <from>    The branch, commit or tag from where to start the detection process
    -t, --to <to>         [default: HEAD]
```

Take a look at the `-t,--to` option. It's one space too much aligned to the right :)

### Code

```rust
use clap::Clap;

#[derive(Clap, Debug)]
struct Args {
    /// The branch, commit or tag from where to start the detection process.
    ///
    /// If not specified, the tool will automatically use the latest published
    /// semantic version compatible tag (`vX.X.X`).
    #[clap(long, short)]
    from: Option<String>,
    #[clap(long, short, default_value = "HEAD")]
    to: String,
}

fn main() {
	let _args = Args::parse();
}
```

### Steps to reproduce the issue

1. `cargo run -- -h`

### Version

* **Rust**: rustc 1.41.0 (5e1a79984 2020-01-27)
* **Clap**: 3.0.0-beta.1

### Expected Behavior Summary

The default value should be aligned with the help text, i.e. one space to the left.

__Edit:__ I know, it's nothing major but I haven't found an issue on here so I thought it's still worth mentioning :) 


Discussion:
I'm using `clap` for couple of my projects and really liked it so far. So, @pksunkara if you don't mind I could handle this.
You are welcome to go ahead.



Patch:
diff --git a/src/output/help.rs b/src/output/help.rs
index ad114a26810..ed11da1a12d 100644
--- a/src/output/help.rs
+++ b/src/output/help.rs
@@ -504,7 +504,7 @@ impl<'help, 'app, 'parser, 'writer> Help<'help, 'app, 'parser, 'writer> {
             } else {
                 String::new()
             };
-            let env_info = format!(" [env: {}{}]", env.0.to_string_lossy(), env_val);
+            let env_info = format!("[env: {}{}]", env.0.to_string_lossy(), env_val);
             spec_vals.push(env_info);
         }
         if !a.is_set(ArgSettings::HideDefaultValue) && !a.default_vals.is_empty() {
@@ -520,7 +520,7 @@ impl<'help, 'app, 'parser, 'writer> Help<'help, 'app, 'parser, 'writer> {
                 .collect::<Vec<_>>()
                 .join(" ");
 
-            spec_vals.push(format!(" [default: {}]", pvs));
+            spec_vals.push(format!("[default: {}]", pvs));
         }
         if !a.aliases.is_empty() {
             debug!("Help::spec_vals: Found aliases...{:?}", a.aliases);
@@ -534,7 +534,7 @@ impl<'help, 'app, 'parser, 'writer> Help<'help, 'app, 'parser, 'writer> {
                 .join(", ");
 
             if !als.is_empty() {
-                spec_vals.push(format!(" [aliases: {}]", als));
+                spec_vals.push(format!("[aliases: {}]", als));
             }
         }
 
@@ -566,12 +566,14 @@ impl<'help, 'app, 'parser, 'writer> Help<'help, 'app, 'parser, 'writer> {
                 a.possible_vals
             );
 
-            spec_vals.push(format!(
-                " [possible values: {}]",
-                a.possible_vals.join(", ")
-            ));
+            spec_vals.push(format!("[possible values: {}]", a.possible_vals.join(", ")));
         }
-        spec_vals.join(" ")
+        let prefix = if !spec_vals.is_empty() && !a.get_about().unwrap_or("").is_empty() {
+            " "
+        } else {
+            ""
+        };
+        prefix.to_string() + &spec_vals.join(" ")
     }
 }
 


Test patch:
diff --git a/tests/arg_aliases.rs b/tests/arg_aliases.rs
index 46e179ba45f..41643e143de 100644
--- a/tests/arg_aliases.rs
+++ b/tests/arg_aliases.rs
@@ -9,12 +9,12 @@ USAGE:
     ct test [FLAGS] [OPTIONS]
 
 FLAGS:
-    -f, --flag        [aliases: v_flg, flag2, flg3]
+    -f, --flag       [aliases: v_flg, flag2, flg3]
     -h, --help       Prints help information
     -V, --version    Prints version information
 
 OPTIONS:
-    -o, --opt <opt>     [aliases: visible]";
+    -o, --opt <opt>    [aliases: visible]";
 
 static SC_INVISIBLE_ALIAS_HELP: &str = "ct-test 1.2
 Some help
diff --git a/tests/arg_aliases_short.rs b/tests/arg_aliases_short.rs
index 865dc8bcdfc..102b0f873f4 100644
--- a/tests/arg_aliases_short.rs
+++ b/tests/arg_aliases_short.rs
@@ -9,7 +9,7 @@ USAGE:
     ct test [FLAGS] [OPTIONS]
 
 FLAGS:
-    -f, --flag        [aliases: flag1] [short aliases: a, b, 🦆]
+    -f, --flag       [aliases: flag1] [short aliases: a, b, 🦆]
     -h, --help       Prints help information
     -V, --version    Prints version information