Combinatoric example

```no_run
#[derive(Debug, Clone)]
pub struct Options {
    name: String,
}

fn completer(input: &String) -> Vec<(&'static str, Option<&'static str>)> {
    let names = ["Yuri", "Lupusregina", "Solution", "Shizu", "Entoma"];
    names
        .iter()
        .filter(|name| name.starts_with(input))
        .map(|name| (*name, None))
        .collect::<Vec<_>>()
}

pub fn options() -> OptionParser<Options> {
    let name = short('n')
        .long("name")
        .help("Specify character's name")
        .argument("NAME")
        .complete(completer);
    construct!(Options { name }).to_options()
}

fn main() {
    println!("{:?}", options().run())
}
```


Derive example

```no_run
/// suggest completions for the input
fn completer(input: &String) -> Vec<(&'static str, Option<&'static str>)> {
    let names = ["Yuri", "Lupusregina", "Solution", "Shizu", "Entoma"];
    names
        .iter()
        .filter(|name| name.starts_with(input))
        .map(|name| (*name, None))
        .collect::<Vec<_>>()
}

#[derive(Debug, Clone, Bpaf)]
#[bpaf(options)]
pub struct Options {
    #[bpaf(short, long, argument("NAME"), complete(completer))]
    /// Specify character's name
    name: String,
}

fn main() {
    println!("{:?}", options().run())
}
```


Output

`complete` annotation does not affect parsing results or generated help message

$ app --help

Usage: app -n=NAME

Available options:

-n, --name=NAME

Specify character's name

-h, --help

Prints help information

$ app --name Bob
Options { name: "Bob" }

But when invoked with shell completion can generate suggestions for user to what to type:

```console
$ app --name L<TAB>
$ app --name Lupisregina
```

