use clap::{App, AppSettings, Arg, ValueHint}; use clap_generate_fig::Fig; use completions::common; mod completions; pub fn build_app_with_value_hints() -> App<'static> { App::new("my_app") .setting(AppSettings::DisableVersionFlag) .setting(AppSettings::TrailingVarArg) .arg( Arg::new("choice") .long("choice") .possible_values(["bash", "fish", "zsh"]), ) .arg( Arg::new("unknown") .long("unknown") .value_hint(ValueHint::Unknown), ) .arg(Arg::new("other").long("other").value_hint(ValueHint::Other)) .arg( Arg::new("path") .long("path") .short('p') .value_hint(ValueHint::AnyPath), ) .arg( Arg::new("file") .long("file") .short('f') .value_hint(ValueHint::FilePath), ) .arg( Arg::new("dir") .long("dir") .short('d') .value_hint(ValueHint::DirPath), ) .arg( Arg::new("exe") .long("exe") .short('e') .value_hint(ValueHint::ExecutablePath), ) .arg( Arg::new("cmd_name") .long("cmd-name") .value_hint(ValueHint::CommandName), ) .arg( Arg::new("cmd") .long("cmd") .short('c') .value_hint(ValueHint::CommandString), ) .arg( Arg::new("command_with_args") .takes_value(true) .multiple_values(true) .value_hint(ValueHint::CommandWithArguments), ) .arg( Arg::new("user") .short('u') .long("user") .value_hint(ValueHint::Username), ) .arg( Arg::new("host") .short('h') .long("host") .value_hint(ValueHint::Hostname), ) .arg(Arg::new("url").long("url").value_hint(ValueHint::Url)) .arg( Arg::new("email") .long("email") .value_hint(ValueHint::EmailAddress), ) } static FIG_VALUE_HINTS: &str = r#"const completion: Fig.Spec = { name: "my_app", description: "", options: [ { name: "--choice", args: { name: "choice", isOptional: true, suggestions: [ { name: "bash", }, { name: "fish", }, { name: "zsh", }, ] }, }, { name: "--unknown", args: { name: "unknown", isOptional: true, }, }, { name: "--other", args: { name: "other", isOptional: true, }, }, { name: ["-p", "--path"], args: { name: "path", isOptional: true, template: "filepaths", }, }, { name: ["-f", "--file"], args: { name: "file", isOptional: true, template: "filepaths", }, }, { name: ["-d", "--dir"], args: { name: "dir", isOptional: true, template: "folders", }, }, { name: ["-e", "--exe"], args: { name: "exe", isOptional: true, template: "filepaths", }, }, { name: "--cmd-name", args: { name: "cmd_name", isOptional: true, isCommand: true, }, }, { name: ["-c", "--cmd"], args: { name: "cmd", isOptional: true, isCommand: true, }, }, { name: ["-u", "--user"], args: { name: "user", isOptional: true, }, }, { name: ["-h", "--host"], args: { name: "host", isOptional: true, }, }, { name: "--url", args: { name: "url", isOptional: true, }, }, { name: "--email", args: { name: "email", isOptional: true, }, }, { name: "--help", description: "Print help information", }, ], args: { name: "command_with_args", isVariadic: true, isOptional: true, isCommand: true, }, }; export default completion; "#; #[test] fn fig_with_value_hints() { let mut app = build_app_with_value_hints(); common(Fig, &mut app, "my_app", FIG_VALUE_HINTS); }