1 use clap::builder::PossibleValue;
2
basic_command(name: &'static str) -> clap::Command3 pub fn basic_command(name: &'static str) -> clap::Command {
4 clap::Command::new(name)
5 .arg(
6 clap::Arg::new("config")
7 .short('c')
8 .global(true)
9 .action(clap::ArgAction::SetTrue),
10 )
11 .arg(
12 clap::Arg::new("v")
13 .short('v')
14 .conflicts_with("config")
15 .action(clap::ArgAction::SetTrue),
16 )
17 .subcommand(
18 clap::Command::new("test").about("Subcommand").arg(
19 clap::Arg::new("debug")
20 .short('d')
21 .action(clap::ArgAction::Count),
22 ),
23 )
24 }
25
feature_sample_command(name: &'static str) -> clap::Command26 pub fn feature_sample_command(name: &'static str) -> clap::Command {
27 clap::Command::new(name)
28 .version("3.0")
29 .propagate_version(true)
30 .about("Tests completions")
31 .arg(
32 clap::Arg::new("file")
33 .value_hint(clap::ValueHint::FilePath)
34 .help("some input file"),
35 )
36 .arg(
37 clap::Arg::new("config")
38 .action(clap::ArgAction::Count)
39 .help("some config file")
40 .short('c')
41 .visible_short_alias('C')
42 .long("config")
43 .visible_alias("conf"),
44 )
45 .arg(clap::Arg::new("choice").value_parser(["first", "second"]))
46 .subcommand(
47 clap::Command::new("test").about("tests things").arg(
48 clap::Arg::new("case")
49 .long("case")
50 .action(clap::ArgAction::Set)
51 .help("the case to test"),
52 ),
53 )
54 }
55
special_commands_command(name: &'static str) -> clap::Command56 pub fn special_commands_command(name: &'static str) -> clap::Command {
57 feature_sample_command(name)
58 .subcommand(
59 clap::Command::new("some_cmd")
60 .about("tests other things")
61 .arg(
62 clap::Arg::new("config")
63 .long("config")
64 .hide(true)
65 .action(clap::ArgAction::Set)
66 .require_equals(true)
67 .help("the other case to test"),
68 )
69 .arg(clap::Arg::new("path").num_args(1..)),
70 )
71 .subcommand(clap::Command::new("some-cmd-with-hyphens").alias("hyphen"))
72 .subcommand(clap::Command::new("some-hidden-cmd").hide(true))
73 }
74
quoting_command(name: &'static str) -> clap::Command75 pub fn quoting_command(name: &'static str) -> clap::Command {
76 clap::Command::new(name)
77 .version("3.0")
78 .arg(
79 clap::Arg::new("single-quotes")
80 .long("single-quotes")
81 .action(clap::ArgAction::SetTrue)
82 .help("Can be 'always', 'auto', or 'never'"),
83 )
84 .arg(
85 clap::Arg::new("double-quotes")
86 .long("double-quotes")
87 .action(clap::ArgAction::SetTrue)
88 .help("Can be \"always\", \"auto\", or \"never\""),
89 )
90 .arg(
91 clap::Arg::new("backticks")
92 .long("backticks")
93 .action(clap::ArgAction::SetTrue)
94 .help("For more information see `echo test`"),
95 )
96 .arg(
97 clap::Arg::new("backslash")
98 .long("backslash")
99 .action(clap::ArgAction::SetTrue)
100 .help("Avoid '\\n'"),
101 )
102 .arg(
103 clap::Arg::new("brackets")
104 .long("brackets")
105 .action(clap::ArgAction::SetTrue)
106 .help("List packages [filter]"),
107 )
108 .arg(
109 clap::Arg::new("expansions")
110 .long("expansions")
111 .action(clap::ArgAction::SetTrue)
112 .help("Execute the shell command with $SHELL"),
113 )
114 .subcommands([
115 clap::Command::new("cmd-single-quotes").about("Can be 'always', 'auto', or 'never'"),
116 clap::Command::new("cmd-double-quotes")
117 .about("Can be \"always\", \"auto\", or \"never\""),
118 clap::Command::new("cmd-backticks").about("For more information see `echo test`"),
119 clap::Command::new("cmd-backslash").about("Avoid '\\n'"),
120 clap::Command::new("cmd-brackets").about("List packages [filter]"),
121 clap::Command::new("cmd-expansions").about("Execute the shell command with $SHELL"),
122 ])
123 }
124
aliases_command(name: &'static str) -> clap::Command125 pub fn aliases_command(name: &'static str) -> clap::Command {
126 clap::Command::new(name)
127 .version("3.0")
128 .about("testing bash completions")
129 .arg(
130 clap::Arg::new("flag")
131 .short('f')
132 .visible_short_alias('F')
133 .long("flag")
134 .action(clap::ArgAction::SetTrue)
135 .visible_alias("flg")
136 .help("cmd flag"),
137 )
138 .arg(
139 clap::Arg::new("option")
140 .short('o')
141 .visible_short_alias('O')
142 .long("option")
143 .visible_alias("opt")
144 .help("cmd option")
145 .action(clap::ArgAction::Set),
146 )
147 .arg(clap::Arg::new("positional"))
148 }
149
sub_subcommands_command(name: &'static str) -> clap::Command150 pub fn sub_subcommands_command(name: &'static str) -> clap::Command {
151 feature_sample_command(name).subcommand(
152 clap::Command::new("some_cmd")
153 .about("top level subcommand")
154 .visible_alias("some_cmd_alias")
155 .subcommand(
156 clap::Command::new("sub_cmd").about("sub-subcommand").arg(
157 clap::Arg::new("config")
158 .long("config")
159 .action(clap::ArgAction::Set)
160 .value_parser([
161 PossibleValue::new("Lest quotes, aren't escaped.")
162 .help("help,with,comma"),
163 PossibleValue::new("Second to trigger display of options"),
164 ])
165 .help("the other case to test"),
166 ),
167 ),
168 )
169 }
170
value_hint_command(name: &'static str) -> clap::Command171 pub fn value_hint_command(name: &'static str) -> clap::Command {
172 clap::Command::new(name)
173 .arg(
174 clap::Arg::new("choice")
175 .long("choice")
176 .action(clap::ArgAction::Set)
177 .value_parser(["bash", "fish", "zsh"]),
178 )
179 .arg(
180 clap::Arg::new("unknown")
181 .long("unknown")
182 .value_hint(clap::ValueHint::Unknown),
183 )
184 .arg(
185 clap::Arg::new("other")
186 .long("other")
187 .value_hint(clap::ValueHint::Other),
188 )
189 .arg(
190 clap::Arg::new("path")
191 .long("path")
192 .short('p')
193 .value_hint(clap::ValueHint::AnyPath),
194 )
195 .arg(
196 clap::Arg::new("file")
197 .long("file")
198 .short('f')
199 .value_hint(clap::ValueHint::FilePath),
200 )
201 .arg(
202 clap::Arg::new("dir")
203 .long("dir")
204 .short('d')
205 .value_hint(clap::ValueHint::DirPath),
206 )
207 .arg(
208 clap::Arg::new("exe")
209 .long("exe")
210 .short('e')
211 .value_hint(clap::ValueHint::ExecutablePath),
212 )
213 .arg(
214 clap::Arg::new("cmd_name")
215 .long("cmd-name")
216 .value_hint(clap::ValueHint::CommandName),
217 )
218 .arg(
219 clap::Arg::new("cmd")
220 .long("cmd")
221 .short('c')
222 .value_hint(clap::ValueHint::CommandString),
223 )
224 .arg(
225 clap::Arg::new("command_with_args")
226 .action(clap::ArgAction::Set)
227 .num_args(1..)
228 .trailing_var_arg(true)
229 .value_hint(clap::ValueHint::CommandWithArguments),
230 )
231 .arg(
232 clap::Arg::new("user")
233 .short('u')
234 .long("user")
235 .value_hint(clap::ValueHint::Username),
236 )
237 .arg(
238 clap::Arg::new("host")
239 .short('H')
240 .long("host")
241 .value_hint(clap::ValueHint::Hostname),
242 )
243 .arg(
244 clap::Arg::new("url")
245 .long("url")
246 .value_hint(clap::ValueHint::Url),
247 )
248 .arg(
249 clap::Arg::new("email")
250 .long("email")
251 .value_hint(clap::ValueHint::EmailAddress),
252 )
253 }
254
value_terminator_command(name: &'static str) -> clap::Command255 pub fn value_terminator_command(name: &'static str) -> clap::Command {
256 clap::Command::new(name).arg(
257 clap::Arg::new("arguments")
258 .help("multi-valued argument with a value terminator")
259 .num_args(1..)
260 .value_terminator(";"),
261 )
262 }
263
assert_matches_path( expected_path: impl AsRef<std::path::Path>, gen: impl clap_complete::Generator, mut cmd: clap::Command, name: &'static str, )264 pub fn assert_matches_path(
265 expected_path: impl AsRef<std::path::Path>,
266 gen: impl clap_complete::Generator,
267 mut cmd: clap::Command,
268 name: &'static str,
269 ) {
270 let mut buf = vec![];
271 clap_complete::generate(gen, &mut cmd, name, &mut buf);
272
273 snapbox::Assert::new()
274 .action_env("SNAPSHOTS")
275 .normalize_paths(false)
276 .matches_path(expected_path, buf);
277 }
278