1[workspace]
2resolver = "2"
3members = [
4 "clap_bench",
5 "clap_builder",
6 "clap_derive",
7 "clap_lex",
8 "clap_complete",
9 "clap_complete_nushell",
10 "clap_mangen",
11]
12
13[workspace.package]
14repository = "https://github.com/clap-rs/clap"
15license = "MIT OR Apache-2.0"
16edition = "2021"
17rust-version = "1.74" # MSRV
18include = [
19 "build.rs",
20 "src/**/*",
21 "Cargo.toml",
22 "LICENSE*",
23 "README.md",
24 "benches/**/*",
25 "examples/**/*"
26]
27
28[workspace.lints.rust]
29rust_2018_idioms = { level = "warn", priority = -1 }
30unreachable_pub = "warn"
31unsafe_op_in_unsafe_fn = "warn"
32unused_lifetimes = "warn"
33unused_macro_rules = "warn"
34unused_qualifications = "warn"
35
36[workspace.lints.clippy]
37bool_assert_comparison = "allow"
38branches_sharing_code = "allow"
39checked_conversions = "warn"
40collapsible_else_if = "allow"
41create_dir = "warn"
42dbg_macro = "warn"
43debug_assert_with_mut_call = "warn"
44doc_markdown = "warn"
45empty_enum = "warn"
46enum_glob_use = "warn"
47expl_impl_clone_on_copy = "warn"
48explicit_deref_methods = "warn"
49explicit_into_iter_loop = "warn"
50fallible_impl_from = "warn"
51filter_map_next = "warn"
52flat_map_option = "warn"
53float_cmp_const = "warn"
54fn_params_excessive_bools = "warn"
55from_iter_instead_of_collect = "warn"
56if_same_then_else = "allow"
57implicit_clone = "warn"
58imprecise_flops = "warn"
59inconsistent_struct_constructor = "warn"
60inefficient_to_string = "warn"
61infinite_loop = "warn"
62invalid_upcast_comparisons = "warn"
63large_digit_groups = "warn"
64large_stack_arrays = "warn"
65large_types_passed_by_value = "warn"
66let_and_return = "allow" # sometimes good to name what you are returning
67linkedlist = "warn"
68lossy_float_literal = "warn"
69macro_use_imports = "warn"
70mem_forget = "warn"
71mutex_integer = "warn"
72needless_continue = "warn"
73needless_for_each = "warn"
74negative_feature_names = "warn"
75path_buf_push_overwrite = "warn"
76ptr_as_ptr = "warn"
77rc_mutex = "warn"
78redundant_feature_names = "warn"
79ref_option_ref = "warn"
80rest_pat_in_fully_bound_structs = "warn"
81same_functions_in_if_condition = "warn"
82self_named_module_files = "warn"
83semicolon_if_nothing_returned = "warn"
84# str_to_string = "warn"
85# string_add = "warn"
86string_add_assign = "warn"
87string_lit_as_bytes = "warn"
88# string_to_string = "warn"
89todo = "warn"
90trait_duplication_in_bounds = "warn"
91uninlined_format_args = "warn"
92verbose_file_reads = "warn"
93# wildcard_imports = "warn"
94zero_sized_map_values = "warn"
95# Fix later:
96multiple_bound_locations = "allow"
97assigning_clones = "allow"
98blocks_in_conditions = "allow"
99
100[package]
101name = "clap"
102version = "4.5.37"
103description = "A simple to use, efficient, and full-featured Command Line Argument Parser"
104categories = ["command-line-interface"]
105keywords = [
106 "argument",
107 "cli",
108 "arg",
109 "parser",
110 "parse"
111]
112repository.workspace = true
113license.workspace = true
114edition.workspace = true
115rust-version.workspace = true
116include.workspace = true
117
118[package.metadata.docs.rs]
119features = ["unstable-doc"]
120rustdoc-args = ["--cfg", "docsrs", "--generate-link-to-definition"]
121
122[package.metadata.playground]
123features = ["unstable-doc"]
124
125[package.metadata.release]
126shared-version = true
127tag-name = "v{{version}}"
128pre-release-replacements = [
129 {file="CHANGELOG.md", search="Unreleased", replace="{{version}}", min=1},
130 {file="CHANGELOG.md", search="\\.\\.\\.HEAD", replace="...{{tag_name}}", exactly=1},
131 {file="CHANGELOG.md", search="ReleaseDate", replace="{{date}}", min=1},
132 {file="CHANGELOG.md", search="<!-- next-header -->", replace="<!-- next-header -->\n## [Unreleased] - ReleaseDate\n", exactly=1},
133 {file="CHANGELOG.md", search="<!-- next-url -->", replace="<!-- next-url -->\n[Unreleased]: https://github.com/clap-rs/clap/compare/{{tag_name}}...HEAD", exactly=1},
134 {file="CITATION.cff", search="^date-released: ....-..-..", replace="date-released: {{date}}"},
135 {file="CITATION.cff", search="^version: .+\\..+\\..+", replace="version: {{version}}"},
136 {file="src/lib.rs", search="blob/v.+\\..+\\..+/CHANGELOG.md", replace="blob/v{{version}}/CHANGELOG.md", exactly=1},
137]
138
139[features]
140default = [
141 "std",
142 "color",
143 "help",
144 "usage",
145 "error-context",
146 "suggestions",
147]
148debug = ["clap_builder/debug", "clap_derive?/debug"] # Enables debug messages
149unstable-doc = ["clap_builder/unstable-doc", "derive"] # for docs.rs
150
151# Used in default
152std = ["clap_builder/std"] # support for no_std in a backwards-compatible way
153color = ["clap_builder/color"]
154help = ["clap_builder/help"]
155usage = ["clap_builder/usage"]
156error-context = ["clap_builder/error-context"]
157suggestions = ["clap_builder/suggestions"]
158
159# Optional
160deprecated = ["clap_builder/deprecated", "clap_derive?/deprecated"] # Guided experience to prepare for next breaking release (at different stages of development, this may become default)
161derive = ["dep:clap_derive"]
162cargo = ["clap_builder/cargo"] # Disable if you're not using Cargo, enables Cargo-env-var-dependent macros
163wrap_help = ["clap_builder/wrap_help"]
164env = ["clap_builder/env"] # Use environment variables during arg parsing
165unicode = ["clap_builder/unicode"] # Support for unicode characters in arguments and help messages
166string = ["clap_builder/string"] # Allow runtime generated strings
167
168# In-work features
169unstable-v5 = ["clap_builder/unstable-v5", "clap_derive?/unstable-v5", "deprecated"]
170unstable-ext = ["clap_builder/unstable-ext"]
171unstable-styles = ["clap_builder/unstable-styles"] # deprecated
172unstable-derive-ui-tests = []
173unstable-markdown = ["clap_derive/unstable-markdown"]
174
175[lib]
176bench = false
177
178[dependencies]
179clap_builder = { path = "./clap_builder", version = "=4.5.37", default-features = false }
180clap_derive = { path = "./clap_derive", version = "=4.5.32", optional = true }
181
182[dev-dependencies]
183trybuild = "1.0.91"
184rustversion = "1.0.15"
185# Cutting out `filesystem` feature
186trycmd = { version = "0.15.3", default-features = false, features = ["color-auto", "diff", "examples"] }
187jiff = "0.2.3"
188snapbox = { version = "0.6.16", features = ["term-svg"] }
189shlex = "1.3.0"
190automod = "1.0.14"
191clap-cargo = { version = "0.15.0", default-features = false }
192
193[[example]]
194name = "demo"
195required-features = ["derive"]
196doc-scrape-examples = true
197
198[[example]]
199name = "cargo-example"
200required-features = ["cargo", "color"]
201doc-scrape-examples = true
202
203[[example]]
204name = "cargo-example-derive"
205required-features = ["derive", "color"]
206doc-scrape-examples = true
207
208[[example]]
209name = "escaped-positional"
210required-features = ["cargo"]
211doc-scrape-examples = true
212
213[[example]]
214name = "escaped-positional-derive"
215required-features = ["derive"]
216doc-scrape-examples = true
217
218[[example]]
219name = "find"
220required-features = ["cargo"]
221doc-scrape-examples = true
222
223[[example]]
224name = "git-derive"
225required-features = ["derive"]
226doc-scrape-examples = true
227
228[[example]]
229name = "typed-derive"
230required-features = ["derive"]
231doc-scrape-examples = true
232
233[[example]]
234name = "busybox"
235path = "examples/multicall-busybox.rs"
236doc-scrape-examples = true
237
238[[example]]
239name = "hostname"
240path = "examples/multicall-hostname.rs"
241doc-scrape-examples = true
242
243[[example]]
244name = "repl"
245path = "examples/repl.rs"
246required-features = ["help"]
247doc-scrape-examples = true
248
249[[example]]
250name = "repl-derive"
251path = "examples/repl-derive.rs"
252required-features = ["derive"]
253doc-scrape-examples = true
254
255[[example]]
256name = "01_quick"
257path = "examples/tutorial_builder/01_quick.rs"
258required-features = ["cargo"]
259doc-scrape-examples = true
260
261[[example]]
262name = "02_apps"
263path = "examples/tutorial_builder/02_apps.rs"
264doc-scrape-examples = true
265
266[[example]]
267name = "02_crate"
268path = "examples/tutorial_builder/02_crate.rs"
269required-features = ["cargo"]
270doc-scrape-examples = true
271
272[[example]]
273name = "02_app_settings"
274path = "examples/tutorial_builder/02_app_settings.rs"
275required-features = ["cargo"]
276doc-scrape-examples = true
277
278[[example]]
279name = "03_01_flag_bool"
280path = "examples/tutorial_builder/03_01_flag_bool.rs"
281required-features = ["cargo"]
282doc-scrape-examples = true
283
284[[example]]
285name = "03_01_flag_count"
286path = "examples/tutorial_builder/03_01_flag_count.rs"
287required-features = ["cargo"]
288doc-scrape-examples = true
289
290[[example]]
291name = "03_02_option"
292path = "examples/tutorial_builder/03_02_option.rs"
293required-features = ["cargo"]
294doc-scrape-examples = true
295
296[[example]]
297name = "03_02_option_mult"
298path = "examples/tutorial_builder/03_02_option_mult.rs"
299required-features = ["cargo"]
300doc-scrape-examples = true
301
302[[example]]
303name = "03_03_positional"
304path = "examples/tutorial_builder/03_03_positional.rs"
305required-features = ["cargo"]
306doc-scrape-examples = true
307
308[[example]]
309name = "03_03_positional_mult"
310path = "examples/tutorial_builder/03_03_positional_mult.rs"
311required-features = ["cargo"]
312doc-scrape-examples = true
313
314[[example]]
315name = "03_04_subcommands"
316path = "examples/tutorial_builder/03_04_subcommands.rs"
317required-features = ["cargo"]
318doc-scrape-examples = true
319
320[[example]]
321name = "03_05_default_values"
322path = "examples/tutorial_builder/03_05_default_values.rs"
323required-features = ["cargo"]
324doc-scrape-examples = true
325
326[[example]]
327name = "03_06_required"
328path = "examples/tutorial_builder/03_06_required.rs"
329required-features = ["cargo"]
330doc-scrape-examples = true
331
332[[example]]
333name = "04_01_possible"
334path = "examples/tutorial_builder/04_01_possible.rs"
335required-features = ["cargo"]
336doc-scrape-examples = true
337
338[[example]]
339name = "04_01_enum"
340path = "examples/tutorial_builder/04_01_enum.rs"
341required-features = ["cargo"]
342doc-scrape-examples = true
343
344[[example]]
345name = "04_02_parse"
346path = "examples/tutorial_builder/04_02_parse.rs"
347required-features = ["cargo"]
348doc-scrape-examples = true
349
350[[example]]
351name = "04_02_validate"
352path = "examples/tutorial_builder/04_02_validate.rs"
353required-features = ["cargo"]
354doc-scrape-examples = true
355
356[[example]]
357name = "04_03_relations"
358path = "examples/tutorial_builder/04_03_relations.rs"
359required-features = ["cargo"]
360doc-scrape-examples = true
361
362[[example]]
363name = "04_04_custom"
364path = "examples/tutorial_builder/04_04_custom.rs"
365required-features = ["cargo"]
366doc-scrape-examples = true
367
368[[example]]
369name = "05_01_assert"
370path = "examples/tutorial_builder/05_01_assert.rs"
371required-features = ["cargo"]
372test = true
373doc-scrape-examples = true
374
375[[example]]
376name = "01_quick_derive"
377path = "examples/tutorial_derive/01_quick.rs"
378required-features = ["derive"]
379doc-scrape-examples = true
380
381[[example]]
382name = "02_apps_derive"
383path = "examples/tutorial_derive/02_apps.rs"
384required-features = ["derive"]
385doc-scrape-examples = true
386
387[[example]]
388name = "02_crate_derive"
389path = "examples/tutorial_derive/02_crate.rs"
390required-features = ["derive"]
391doc-scrape-examples = true
392
393[[example]]
394name = "02_app_settings_derive"
395path = "examples/tutorial_derive/02_app_settings.rs"
396required-features = ["derive"]
397doc-scrape-examples = true
398
399[[example]]
400name = "03_01_flag_bool_derive"
401path = "examples/tutorial_derive/03_01_flag_bool.rs"
402required-features = ["derive"]
403doc-scrape-examples = true
404
405[[example]]
406name = "03_01_flag_count_derive"
407path = "examples/tutorial_derive/03_01_flag_count.rs"
408required-features = ["derive"]
409doc-scrape-examples = true
410
411[[example]]
412name = "03_02_option_derive"
413path = "examples/tutorial_derive/03_02_option.rs"
414required-features = ["derive"]
415doc-scrape-examples = true
416
417[[example]]
418name = "03_02_option_mult_derive"
419path = "examples/tutorial_derive/03_02_option_mult.rs"
420required-features = ["derive"]
421doc-scrape-examples = true
422
423[[example]]
424name = "03_03_positional_derive"
425path = "examples/tutorial_derive/03_03_positional.rs"
426required-features = ["derive"]
427doc-scrape-examples = true
428
429[[example]]
430name = "03_03_positional_mult_derive"
431path = "examples/tutorial_derive/03_03_positional_mult.rs"
432required-features = ["derive"]
433doc-scrape-examples = true
434
435[[example]]
436name = "03_04_subcommands_derive"
437path = "examples/tutorial_derive/03_04_subcommands.rs"
438required-features = ["derive"]
439doc-scrape-examples = true
440
441[[example]]
442name = "03_04_subcommands_alt_derive"
443path = "examples/tutorial_derive/03_04_subcommands_alt.rs"
444required-features = ["derive"]
445doc-scrape-examples = true
446
447[[example]]
448name = "03_05_default_values_derive"
449path = "examples/tutorial_derive/03_05_default_values.rs"
450required-features = ["derive"]
451doc-scrape-examples = true
452
453[[example]]
454name = "03_06_optional_derive"
455path = "examples/tutorial_derive/03_06_optional.rs"
456required-features = ["derive"]
457doc-scrape-examples = true
458
459[[example]]
460name = "04_01_enum_derive"
461path = "examples/tutorial_derive/04_01_enum.rs"
462required-features = ["derive"]
463doc-scrape-examples = true
464
465[[example]]
466name = "04_02_parse_derive"
467path = "examples/tutorial_derive/04_02_parse.rs"
468required-features = ["derive"]
469doc-scrape-examples = true
470
471[[example]]
472name = "04_02_validate_derive"
473path = "examples/tutorial_derive/04_02_validate.rs"
474required-features = ["derive"]
475doc-scrape-examples = true
476
477[[example]]
478name = "04_03_relations_derive"
479path = "examples/tutorial_derive/04_03_relations.rs"
480required-features = ["derive"]
481doc-scrape-examples = true
482
483[[example]]
484name = "04_04_custom_derive"
485path = "examples/tutorial_derive/04_04_custom.rs"
486required-features = ["derive"]
487doc-scrape-examples = true
488
489[[example]]
490name = "05_01_assert_derive"
491path = "examples/tutorial_derive/05_01_assert.rs"
492required-features = ["derive"]
493test = true
494doc-scrape-examples = true
495
496[[example]]
497name = "interop_augment_args"
498path = "examples/derive_ref/augment_args.rs"
499required-features = ["derive"]
500doc-scrape-examples = true
501
502[[example]]
503name = "interop_augment_subcommands"
504path = "examples/derive_ref/augment_subcommands.rs"
505required-features = ["derive"]
506doc-scrape-examples = true
507
508[[example]]
509name = "interop_hand_subcommand"
510path = "examples/derive_ref/hand_subcommand.rs"
511required-features = ["derive"]
512doc-scrape-examples = true
513
514[[example]]
515name = "interop_flatten_hand_args"
516path = "examples/derive_ref/flatten_hand_args.rs"
517required-features = ["derive"]
518doc-scrape-examples = true
519
520[profile.test]
521opt-level = 1
522
523[profile.bench]
524lto = true
525codegen-units = 1
526
527[lints]
528workspace = true
529