Repository: clap-rs/clap (Rust)

Issue:
Visible aliases for Args from YAML file 
<!--
Please use the following template to assist with creating an issue and to ensure a speedy resolution. If an area is not applicable, feel free to delete the area or mark with `N/A`
-->

### Rust Version
rustc 1.40.0 (73528e339 2019-12-16)

### Affected Version of clap
version = "2.33.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5067f5bb2d80ef5d68b4c87db81601f0b75bca627bc2ef76b141d7b846a3c6d9"

### Expected Behavior Summary
When using `visible_alias` on arguments, set a visible alias for that argument, much like it happens for App (command and subcommand

### Actual Behavior Summary
```sh
--- stderr
thread 'main' panicked at 'Unknown Arg setting 'visible_alias' in YAML file for arg '<program-name>'', clap-2.33.0/src/args/arg.rs:149:22
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace.
```

### Steps to Reproduce the issue
 1 - Add for a Arg `visible_alias` on a YAML file.
 2 - Try to compile


### Sample Code or Link to Sample Code
```yaml
name: program
version: "0.0.0"
about: My program
args:
  - flag:
    long: long_flag
    short: l
    visible_alias: another_name
```

```rust
use clap::{load_yaml, App, AppSettings::ColoredHelp, ArgMatches};

fn main() {
    let yaml = load_yaml!("my_yaml.yml");

    let _matches = App::from_yaml(yaml).get_matches();
```


### Debug output
There is no debug output, it errors out at compile time



Discussion:
@AriusX7 You can follow the steps in https://github.com/clap-rs/clap/wiki/Issue-Bounties to get the bounty.



Patch:
diff --git a/src/build/arg/mod.rs b/src/build/arg/mod.rs
index 3101b3344ac..63303f58f3c 100644
--- a/src/build/arg/mod.rs
+++ b/src/build/arg/mod.rs
@@ -4508,6 +4508,10 @@ impl<'help> From<&'help Yaml> for Arg<'help> {
                     a.set_mut(ArgSettings::RequiredUnlessAll);
                     a
                 }
+                "visible_alias" => yaml_to_str!(a, v, visible_alias),
+                "visible_aliases" => yaml_vec_or_str!(a, v, visible_alias),
+                "visible_short_alias" => yaml_to_char!(a, v, visible_short_alias),
+                "visible_short_aliases" => yaml_to_chars!(a, v, visible_short_aliases),
                 #[cfg(feature = "regex")]
                 "validator_regex" => {
                     if let Some(vec) = v.as_vec() {


Test patch:
diff --git a/tests/fixtures/app.yaml b/tests/fixtures/app.yaml
index 71c386b03a0..b6660ee07c6 100644
--- a/tests/fixtures/app.yaml
+++ b/tests/fixtures/app.yaml
@@ -116,6 +116,16 @@ args:
         long: value-hint
         help: Test value_hint
         value_hint: FilePath
+    - visiblealiases:
+        long: visiblealiases
+        about: Tests visible aliases
+        visible_alias: visals1
+        visible_aliases: [visals2, visals2, visals3]
+    - visibleshortaliases:
+        long: visibleshortaliases
+        about: Tests visible short aliases
+        visible_short_alias: e
+        visible_short_aliases: [l, m]
 
 arg_groups:
     - test:
diff --git a/tests/yaml.rs b/tests/yaml.rs
index a9e73c9f0ca..cb7c38303dd 100644
--- a/tests/yaml.rs
+++ b/tests/yaml.rs
@@ -26,7 +26,7 @@ fn help_message() {
     app.write_help(&mut help_buffer).unwrap();
     let help_string = String::from_utf8(help_buffer).unwrap();
     assert!(help_string
-        .contains("-h, --help                prints help with a nonstandard description\n"));
+        .contains("-h, --help                   prints help with a nonstandard description\n"));
 }
 
 #[test]