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 .action(clap::ArgAction::Set)
65 .help("the other case to test"),
66 ),
67 )
68 .subcommand(clap::Command::new("some-cmd-with-hyphens").alias("hyphen"))
69 }
70
quoting_command(name: &'static str) -> clap::Command71 pub fn quoting_command(name: &'static str) -> clap::Command {
72 clap::Command::new(name)
73 .version("3.0")
74 .arg(
75 clap::Arg::new("single-quotes")
76 .long("single-quotes")
77 .action(clap::ArgAction::SetTrue)
78 .help("Can be 'always', 'auto', or 'never'"),
79 )
80 .arg(
81 clap::Arg::new("double-quotes")
82 .long("double-quotes")
83 .action(clap::ArgAction::SetTrue)
84 .help("Can be \"always\", \"auto\", or \"never\""),
85 )
86 .arg(
87 clap::Arg::new("backticks")
88 .long("backticks")
89 .action(clap::ArgAction::SetTrue)
90 .help("For more information see `echo test`"),
91 )
92 .arg(
93 clap::Arg::new("backslash")
94 .long("backslash")
95 .action(clap::ArgAction::SetTrue)
96 .help("Avoid '\\n'"),
97 )
98 .arg(
99 clap::Arg::new("brackets")
100 .long("brackets")
101 .action(clap::ArgAction::SetTrue)
102 .help("List packages [filter]"),
103 )
104 .arg(
105 clap::Arg::new("expansions")
106 .long("expansions")
107 .action(clap::ArgAction::SetTrue)
108 .help("Execute the shell command with $SHELL"),
109 )
110 .subcommands([
111 clap::Command::new("cmd-single-quotes").about("Can be 'always', 'auto', or 'never'"),
112 clap::Command::new("cmd-double-quotes")
113 .about("Can be \"always\", \"auto\", or \"never\""),
114 clap::Command::new("cmd-backticks").about("For more information see `echo test`"),
115 clap::Command::new("cmd-backslash").about("Avoid '\\n'"),
116 clap::Command::new("cmd-brackets").about("List packages [filter]"),
117 clap::Command::new("cmd-expansions").about("Execute the shell command with $SHELL"),
118 ])
119 }
120
aliases_command(name: &'static str) -> clap::Command121 pub fn aliases_command(name: &'static str) -> clap::Command {
122 clap::Command::new(name)
123 .version("3.0")
124 .about("testing bash completions")
125 .arg(
126 clap::Arg::new("flag")
127 .short('f')
128 .visible_short_alias('F')
129 .long("flag")
130 .action(clap::ArgAction::SetTrue)
131 .visible_alias("flg")
132 .help("cmd flag"),
133 )
134 .arg(
135 clap::Arg::new("option")
136 .short('o')
137 .visible_short_alias('O')
138 .long("option")
139 .visible_alias("opt")
140 .help("cmd option")
141 .action(clap::ArgAction::Set),
142 )
143 .arg(clap::Arg::new("positional"))
144 }
145
sub_subcommands_command(name: &'static str) -> clap::Command146 pub fn sub_subcommands_command(name: &'static str) -> clap::Command {
147 feature_sample_command(name).subcommand(
148 clap::Command::new("some_cmd")
149 .about("top level subcommand")
150 .subcommand(
151 clap::Command::new("sub_cmd").about("sub-subcommand").arg(
152 clap::Arg::new("config")
153 .long("config")
154 .action(clap::ArgAction::Set)
155 .value_parser([clap::builder::PossibleValue::new(
156 "Lest quotes aren't escaped.",
157 )])
158 .help("the other case to test"),
159 ),
160 ),
161 )
162 }
163
value_hint_command(name: &'static str) -> clap::Command164 pub fn value_hint_command(name: &'static str) -> clap::Command {
165 clap::Command::new(name)
166 .arg(
167 clap::Arg::new("choice")
168 .long("choice")
169 .action(clap::ArgAction::Set)
170 .value_parser(["bash", "fish", "zsh"]),
171 )
172 .arg(
173 clap::Arg::new("unknown")
174 .long("unknown")
175 .value_hint(clap::ValueHint::Unknown),
176 )
177 .arg(
178 clap::Arg::new("other")
179 .long("other")
180 .value_hint(clap::ValueHint::Other),
181 )
182 .arg(
183 clap::Arg::new("path")
184 .long("path")
185 .short('p')
186 .value_hint(clap::ValueHint::AnyPath),
187 )
188 .arg(
189 clap::Arg::new("file")
190 .long("file")
191 .short('f')
192 .value_hint(clap::ValueHint::FilePath),
193 )
194 .arg(
195 clap::Arg::new("dir")
196 .long("dir")
197 .short('d')
198 .value_hint(clap::ValueHint::DirPath),
199 )
200 .arg(
201 clap::Arg::new("exe")
202 .long("exe")
203 .short('e')
204 .value_hint(clap::ValueHint::ExecutablePath),
205 )
206 .arg(
207 clap::Arg::new("cmd_name")
208 .long("cmd-name")
209 .value_hint(clap::ValueHint::CommandName),
210 )
211 .arg(
212 clap::Arg::new("cmd")
213 .long("cmd")
214 .short('c')
215 .value_hint(clap::ValueHint::CommandString),
216 )
217 .arg(
218 clap::Arg::new("command_with_args")
219 .action(clap::ArgAction::Set)
220 .num_args(1..)
221 .trailing_var_arg(true)
222 .value_hint(clap::ValueHint::CommandWithArguments),
223 )
224 .arg(
225 clap::Arg::new("user")
226 .short('u')
227 .long("user")
228 .value_hint(clap::ValueHint::Username),
229 )
230 .arg(
231 clap::Arg::new("host")
232 .short('H')
233 .long("host")
234 .value_hint(clap::ValueHint::Hostname),
235 )
236 .arg(
237 clap::Arg::new("url")
238 .long("url")
239 .value_hint(clap::ValueHint::Url),
240 )
241 .arg(
242 clap::Arg::new("email")
243 .long("email")
244 .value_hint(clap::ValueHint::EmailAddress),
245 )
246 }
247
hidden_option_command(name: &'static str) -> clap::Command248 pub fn hidden_option_command(name: &'static str) -> clap::Command {
249 clap::Command::new(name)
250 .arg(
251 clap::Arg::new("config")
252 .long("config")
253 .action(clap::ArgAction::Set),
254 )
255 .arg(
256 clap::Arg::new("no-config")
257 .long("no-config")
258 .hide(true)
259 .overrides_with("config"),
260 )
261 }
262
env_value_command(name: &'static str) -> clap::Command263 pub fn env_value_command(name: &'static str) -> clap::Command {
264 clap::Command::new(name).arg(
265 clap::Arg::new("config")
266 .short('c')
267 .long_help("Set configuration file path")
268 .required(false)
269 .action(clap::ArgAction::Set)
270 .default_value("config.toml")
271 .env("CONFIG_FILE"),
272 )
273 }
274
assert_matches_path(expected_path: impl AsRef<std::path::Path>, cmd: clap::Command)275 pub fn assert_matches_path(expected_path: impl AsRef<std::path::Path>, cmd: clap::Command) {
276 let mut buf = vec![];
277 clap_mangen::Man::new(cmd).render(&mut buf).unwrap();
278
279 snapbox::Assert::new()
280 .action_env("SNAPSHOTS")
281 .matches_path(expected_path, buf);
282 }
283
possible_values_command(name: &'static str) -> clap::Command284 pub fn possible_values_command(name: &'static str) -> clap::Command {
285 clap::Command::new(name)
286 .arg(
287 clap::Arg::new("choice")
288 .long("choice")
289 .action(clap::ArgAction::Set)
290 .value_parser(["bash", "fish", "zsh"]),
291 )
292 .arg(
293 clap::Arg::new("method")
294 .long("method")
295 .action(clap::ArgAction::Set)
296 .value_parser([
297 PossibleValue::new("fast").help("use the Fast method"),
298 PossibleValue::new("slow").help("use the slow method"),
299 PossibleValue::new("normal")
300 .help("use normal mode")
301 .hide(true),
302 ]),
303 )
304 .arg(
305 clap::Arg::new("positional_choice")
306 .action(clap::ArgAction::Set)
307 .help("Pick the Position you want the command to run in")
308 .value_parser([
309 PossibleValue::new("left").help("run left adjusted"),
310 PossibleValue::new("right"),
311 PossibleValue::new("center").hide(true),
312 ]),
313 )
314 }
315
value_name_without_arg(name: &'static str) -> clap::Command316 pub fn value_name_without_arg(name: &'static str) -> clap::Command {
317 clap::Command::new(name).arg(
318 clap::Arg::new("flag")
319 .long("flag")
320 .value_name("SPURIOUS")
321 .action(clap::ArgAction::SetTrue),
322 )
323 }
324