blob: ae28950f24534ed95a908fa3d8bd483a976ebac6 [file] [log] [blame] [view]
Haibo Huange7bfadf2020-09-23 21:23:42 -07001# v0.3.18 (2020-09-23)
2
3* Unsafe code [has been forbidden](https://github.com/TeXitoi/structopt/issues/432). This makes
4 [`cargo geiger`](https://github.com/rust-secure-code/cargo-geiger) list structopt as "safe".
5 Maybe it will help somebody trying to locate a bug in their dependency tree.
6
7# v0.3.17 (2020-08-25)
8
9* Fixed [a breakage](https://github.com/TeXitoi/structopt/issues/424) with resent rustc versions
10 due to `quote_spanned` misuse.
11
12# v0.3.16 (2020-08-05)
13
14* Added [the new example](https://github.com/TeXitoi/structopt/blob/master/examples/required_if.rs).
15* Allow `#[structopt(flatten)]` fields to have doc comments. The comments are ignored.
16* The `paw` crate is now being reexported when `paw` feature is enabled,
17 see [`#407`](https://github.com/TeXitoi/structopt/issues/407).
18
19# v0.3.15 (2020-06-16)
20
21* Minor documentation improvements.
22* Fixed [a latent bug](https://github.com/TeXitoi/structopt/pull/398),
23 courtesy of [@Aaron1011](https://github.com/Aaron1011).
24
Matthew Maurer32e76692020-06-02 11:15:15 -070025# v0.3.14 (2020-04-22)
26
27* Minor documentation improvements.
28
29# v0.3.13 (2020-04-9)
30
31* Bump `proc-macro-error` to `1.0`.
32
33# v0.3.12 (2020-03-18)
34
35* Fixed [bug in `external_subcommand`](https://github.com/TeXitoi/structopt/issues/359).
36
37# v0.3.11 (2020-03-01)
38
39* `syn`'s "full" feature is now explicitly enabled. It must have been, but hasn't.
40
41# v0.3.10 (2020-03-01) - YANKED
42
43* Fixed the breakage due to a required `syn` feature was not enabled.
44
45# v0.3.9 (2020-02-01) - YANKED
46
47* `clippy` warnings triggered by generated code shall not annoy you anymore!
48 Except for those from `clippy::correctness`, these lints are useful even
49 for auto generated code.
50* Improved error messages.
51
52# v0.3.8 (2020-1-19) - YANKED
53
54* You don't have to apply `#[no_version]` to every `enum` variant anymore.
55 Just annotate the `enum` and the setting will be propagated down
56 ([#242](https://github.com/TeXitoi/structopt/issues/242)).
57* [Auto-default](https://docs.rs/structopt/0.3/structopt/#default-values).
58* [External subcommands](https://docs.rs/structopt/0.3/structopt/#external-subcommands).
59* [Flattening subcommands](https://docs.rs/structopt/0.3.8/structopt/#flattening-subcommands).
60
61# v0.3.7 (2019-12-28)
62
63Nothing's new. Just re-release of `v0.3.6` due to
64[the mess with versioning](https://github.com/TeXitoi/structopt/issues/315#issuecomment-568502792).
65
66You may notice that `structopt-derive` was bumped to `v0.4.0`, that's OK, it's not a breaking change.
67`structopt` will pull the right version in on its on.
68
69# v0.3.6 (2019-12-22) - YANKED
70
71This is unusually big patch release. It contains a number of bugfixes and
72new features, some of them may theoretically be considered breaking. We did our best
73to avoid any problems on user's side but, if it wasn't good enough, please
74[file an issue ASAP](https://github.com/TeXitoi/structopt/issues).
75
76## Bugfixes
77
78* `structopt` used to treat `::path::to::type::Vec<T>` as `Vec<T>`
79 special type. [This was considered erroneous](https://github.com/TeXitoi/structopt/pull/287).
80 (same for `Option<T>` and `bool`). Now only exact `Vec<T>` match is a special type.
81
82* `#[structopt(version = expr)]` where `expr` is not a string literal used to get
83 overridden by auto generated `.version()` call,
84 [incorrectly](https://github.com/TeXitoi/structopt/issues/283). Now it doesn't.
85
86* Fixed bug with top-level `App::*` calls on multiple `struct`s, see
87 [#289](https://github.com/TeXitoi/structopt/issues/265).
88
89* Positional `bool` args with no explicit `#[structopt(parse(...))]` annotation are
90 now prohibited. This couldn't work well anyway, see
91 [this example](https://github.com/TeXitoi/structopt/blob/master/examples/true_or_false.rs)
92 for details.
93
94* Now we've instituted strict priority between doc comments, about, help, and the like.
95 See [the documentation](https://docs.rs/structopt/0.3/structopt/#help-messages).
96
97 **HUGE THANKS to [`@ssokolow`](https://github.com/ssokolow)** for tidying up our documentation,
98 teaching me English and explaining why our doc used to suck. I promise I'll make the rest
99 of the doc up to your standards... sometime later!
100
101## New features
102
103* Implement `StructOpt` for `Box<impl StructOpt>` so from now on you can use `Box<T>`
104 with `flatten` and `subcommand` ([#304](https://github.com/TeXitoi/structopt/issues/304)).
105
106 ```rust
107 enum Command {
108 #[structopt(name = "version")]
109 PrintVersion,
110
111 #[structopt(name = "second")]
112 DoSomething {
113 #[structopt(flatten)]
114 config: Box<DoSomethingConfig>,
115 },
116
117 #[structopt(name = "first")]
118 DoSomethingElse {
119 #[structopt(flatten)]
120 config: Box<DoSomethingElseConfig>,
121 }
122 }
123 ```
124
125* Introduced `#[structopt(verbatim_doc_comment)]` attribute that keeps line breaks in
126 doc comments, see
127 [the documentation](https://docs.rs/structopt/0.3/structopt/#doc-comment-preprocessing-and-structoptverbatim_doc_comment).
128
129* Introduced `#[structopt(rename_all_env)]` and `#[structopt(env)]` magical methods
130 so you can derive env var's name from field's name. See
131 [the documentation](https://docs.rs/structopt/0.3/structopt/#auto-deriving-environment-variables).
132
133## Improvements
134
135* Now we have nice README for our examples,
136 [check it out](https://github.com/TeXitoi/structopt/tree/master/examples)!
137
138* Some error messages were improved and clarified, thanks for all people involved!
139
140
141# v0.3.5 (2019-11-22)
142
143* `try_from_str` functions are now called with a `&str` instead of a `&String` ([#282](https://github.com/TeXitoi/structopt/pull/282))
144
145# v0.3.4 (2019-11-08)
146
147* `rename_all` does not apply to fields that were annotated with explicit
148 `short/long/name = "..."` anymore ([#265](https://github.com/TeXitoi/structopt/issues/265))
149* Now raw idents are handled correctly ([#269](https://github.com/TeXitoi/structopt/issues/269))
150* Some documentation improvements and clarification.
151
152# v0.3.3 (2019-10-10)
153
154* Add `from_flag` custom parser to create flags from non-bool types.
155 Fixes [#185](https://github.com/TeXitoi/structopt/issues/185)
156
157# v0.3.2 (2019-09-18)
158
159* `structopt` does not replace `:` with `, ` inside "author" strings while inside `<...>`.
160 Fixes [#156](https://github.com/TeXitoi/structopt/issues/156)
161* Introduced [`#[structopt(skip = expr)]` syntax](https://docs.rs/structopt/0.3.2/structopt/#skipping-fields).
162
163# v0.3.1 (2019-09-06)
164
165* Fix error messages ([#241](https://github.com/TeXitoi/structopt/issues/241))
166* Fix "`skip` plus long doc comment" bug ([#245](https://github.com/TeXitoi/structopt/issues/245))
167* Now `structopt` emits dummy `StructOpt` implementation along with an error. It suppresses
168 meaningless errors like `from_args method is not found for Opt`
169* `.version()` not get generated if `CARGO_PKG_VERSION` is not set anymore.
170
171# v0.3.0 (2019-08-30)
172
173## Breaking changes
174
175### Bump minimum rustc version to 1.36 by [@TeXitoi](https://github.com/TeXitoi)
176Now `rustc` 1.36 is the minimum compiler version supported by `structopt`,
177it likely won't work with older compilers.
178
179### Remove "nightly" feature
180Once upon a time this feature had been used to enable some of improvements
181in `proc-macro2` crate that were available only on nightly. Nowadays this feature doesn't
182mean anything so it's now removed.
183
184### Support optional vectors of arguments for distinguishing between `-o 1 2`, `-o` and no option provided at all by [@sphynx](https://github.com/sphynx) ([#180](https://github.com/TeXitoi/structopt/issues/188)).
185
186```rust
187#[derive(StructOpt)]
188struct Opt {
189 #[structopt(long)]
190 fruit: Option<Vec<String>>,
191}
192
193fn main() {
194 assert_eq!(Opt::from_args(&["test"]), None);
195 assert_eq!(Opt::from_args(&["test", "--fruit"]), Some(vec![]));
196 assert_eq!(Opt::from_args(&["test", "--fruit=apple orange"]), Some(vec!["apple", "orange"]));
197}
198```
199
200If you need to fall back to the old behavior you can use a type alias:
201```rust
202type Something = Vec<String>;
203
204#[derive(StructOpt)]
205struct Opt {
206 #[structopt(long)]
207 fruit: Option<Something>,
208}
209```
210
211### Change default case from 'Verbatim' into 'Kebab' by [@0ndorio](https://github.com/0ndorio) ([#202](https://github.com/TeXitoi/structopt/issues/202)).
212`structopt` 0.3 uses field renaming to deduce a name for long options and subcommands.
213
214```rust
215#[derive(StructOpt)]
216struct Opt {
217 #[structopt(long)]
218 http_addr: String, // will be renamed to `--http-addr`
219
220 #[structopt(subcommand)]
221 addr_type: AddrType // this adds `addr-type` subcommand
222}
223```
224
225`structopt` 0.2 used to leave things "as is", not renaming anything. If you want to keep old
226behavior add `#[structopt(rename_all = "verbatim")]` on top of a `struct`/`enum`.
227
228### Change `version`, `author` and `about` attributes behavior.
229Proposed by [@TeXitoi](https://github.com/TeXitoi) [(#217)](https://github.com/TeXitoi/structopt/issues/217), implemented by [@CreepySkeleton](https://github.com/CreepySkeleton) [(#229)](https://github.com/TeXitoi/structopt/pull/229).
230
231`structopt` have been deducing `version`, `author`, and `about` properties from `Cargo.toml`
232for a long time (more accurately, from `CARGO_PKG_...` environment variables).
233But many users found this behavior somewhat confusing, and a hack was added to cancel out
234this behavior: `#[structopt(author = "")]`.
235
236In `structopt` 0.3 this has changed.
237* `author` and `about` are no longer deduced by default. You should use `#[structopt(author, about)]`
238 to explicitly request `structopt` to deduce them.
239* Contrary, `version` **is still deduced by default**. You can use `#[structopt(no_version)]` to
240 cancel it out.
241* `#[structopt(author = "", about = "", version = "")]` is no longer a valid syntax
242 and will trigger an error.
243* `#[structopt(version = "version", author = "author", about = "about")]` syntax
244 stays unaffected by this changes.
245
246### Raw attributes are removed ([#198](https://github.com/TeXitoi/structopt/pull/198)) by [@sphynx](https://github.com/sphynx)
247In `structopt` 0.2 you were able to use any method from `clap::App` and `clap::Arg` via
248raw attribute: `#[structopt(raw(method_name = "arg"))]`. This syntax was kind of awkward.
249
250```rust
251#[derive(StructOpt, Debug)]
252#[structopt(raw(
253 global_settings = "&[AppSettings::ColoredHelp, AppSettings::VersionlessSubcommands]"
254))]
255struct Opt {
256 #[structopt(short = "l", long = "level", raw(aliases = r#"&["set-level", "lvl"]"#))]
257 level: Vec<String>,
258}
259```
260
261Raw attributes were removed in 0.3. Now you can use any method from `App` and `Arg` *directly*:
262```rust
263#[derive(StructOpt)]
264#[structopt(global_settings(&[AppSettings::ColoredHelp, AppSettings::VersionlessSubcommands]))]
265struct Opt {
266 #[structopt(short = "l", long = "level", aliases(&["set-level", "lvl"]))]
267 level: Vec<String>,
268}
269```
270
271## Improvements
272
273### Support skipping struct fields
274Proposed by [@Morganamilo](https://github.com/Morganamilo) in ([#174](https://github.com/TeXitoi/structopt/issues/174))
275implemented by [@sphynx](https://github.com/sphynx) in ([#213](https://github.com/TeXitoi/structopt/issues/213)).
276
277Sometimes you want to include some fields in your `StructOpt` `struct` that are not options
278and `clap` should know nothing about them. In `structopt` 0.3 it's possible via the
279`#[structopt(skip)]` attribute. The field in question will be assigned with `Default::default()`
280value.
281
282```rust
283#[derive(StructOpt)]
284struct Opt {
285 #[structopt(short, long)]
286 speed: f32,
287
288 car: String,
289
290 // this field should not generate any arguments
291 #[structopt(skip)]
292 meta: Vec<u64>
293}
294```
295
296### Add optional feature to support `paw` by [@gameldar](https://github.com/gameldar) ([#187](https://github.com/TeXitoi/structopt/issues/187))
297
298### Significantly improve error reporting by [@CreepySkeleton](https://github.com/CreepySkeleton) ([#225](https://github.com/TeXitoi/structopt/pull/225/))
299Now (almost) every error message points to the location it originates from:
300
301```text
302error: default_value is meaningless for bool
303 --> $DIR/bool_default_value.rs:14:24
304 |
30514 | #[structopt(short, default_value = true)]
306 | ^^^^^^^^^^^^^
307```
308
309# v0.2.16 (2019-05-29)
310
311### Support optional options with optional argument, allowing `cmd [--opt[=value]]` by [@sphynx](https://github.com/sphynx) ([#188](https://github.com/TeXitoi/structopt/issues/188))
312Sometimes you want to represent an optional option that optionally takes an argument,
313i.e `[--opt[=value]]`. This is represented by `Option<Option<T>>`
314
315```rust
316#[derive(StructOpt)]
317struct Opt {
318 #[structopt(long)]
319 fruit: Option<Option<String>>,
320}
321
322fn main() {
323 assert_eq!(Opt::from_args(&["test"]), None);
324 assert_eq!(Opt::from_args(&["test", "--fruit"]), Some(None));
325 assert_eq!(Opt::from_args(&["test", "--fruit=apple"]), Some("apple"));
326}
327```
328
329# v0.2.15 (2019-03-08)
330
331* Fix [#168](https://github.com/TeXitoi/structopt/issues/168) by [@TeXitoi](https://github.com/TeXitoi)
332
333# v0.2.14 (2018-12-10)
334
335* Introduce smarter parsing of doc comments by [@0ndorio](https://github.com/0ndorio)
336
337# v0.2.13 (2018-11-01)
338
339* Automatic naming of fields and subcommands by [@0ndorio](https://github.com/0ndorio)
340
341# v0.2.12 (2018-10-11)
342
343* Fix minimal clap version by [@TeXitoi](https://github.com/TeXitoi)
344
345# v0.2.11 (2018-10-05)
346
347* Upgrade syn to 0.15 by [@konstin](https://github.com/konstin)
348
349# v0.2.10 (2018-06-07)
350
351* 1.21.0 is the minimum required rustc version by
352 [@TeXitoi](https://github.com/TeXitoi)
353
354# v0.2.9 (2018-06-05)
355
356* Fix a bug when using `flatten` by
357 [@fbenkstein](https://github.com/fbenkstein)
358* Update syn, quote and proc_macro2 by
359 [@TeXitoi](https://github.com/TeXitoi)
360* Fix a regression when there is multiple authors by
361 [@windwardly](https://github.com/windwardly)
362
363# v0.2.8 (2018-04-28)
364
365* Add `StructOpt::from_iter_safe()`, which returns an `Error` instead of
366 killing the program when it fails to parse, or parses one of the
367 short-circuiting flags. ([#98](https://github.com/TeXitoi/structopt/pull/98)
368 by [@quodlibetor](https://github.com/quodlibetor))
369* Allow users to enable `clap` features independently by
370 [@Kerollmops](https://github.com/Kerollmops)
371* Fix a bug when flattening an enum
372 ([#103](https://github.com/TeXitoi/structopt/pull/103) by
373 [@TeXitoi](https://github.com/TeXitoi)
374
375# v0.2.7 (2018-04-12)
376
377* Add flattening, the insertion of options of another StructOpt struct
378 into another ([#92](https://github.com/TeXitoi/structopt/pull/92))
379 by [@birkenfeld](https://github.com/birkenfeld)
380* Fail compilation when using `default_value` or `required` with
381 `Option` ([#88](https://github.com/TeXitoi/structopt/pull/88)) by
382 [@Kerollmops](https://github.com/Kerollmops)
383
384# v0.2.6 (2018-03-31)
385
386* Fail compilation when using `default_value` or `required` with `bool` ([#80](https://github.com/TeXitoi/structopt/issues/80)) by [@TeXitoi](https://github.com/TeXitoi)
387* Fix compilation with `#[deny(warnings)]` with the `!` type (https://github.com/rust-lang/rust/pull/49039#issuecomment-376398999) by [@TeXitoi](https://github.com/TeXitoi)
388* Improve first example in the documentation ([#82](https://github.com/TeXitoi/structopt/issues/82)) by [@TeXitoi](https://github.com/TeXitoi)
389
390# v0.2.5 (2018-03-07)
391
392* Work around breakage when `proc-macro2`'s nightly feature is enabled. ([#77](https://github.com/Texitoi/structopt/pull/77) and [proc-macro2#67](https://github.com/alexcrichton/proc-macro2/issues/67)) by [@fitzgen](https://github.com/fitzgen)
393
394# v0.2.4 (2018-02-25)
395
396* Fix compilation with `#![deny(missig_docs]` ([#74](https://github.com/TeXitoi/structopt/issues/74)) by [@TeXitoi](https://github.com/TeXitoi)
397* Fix [#76](https://github.com/TeXitoi/structopt/issues/76) by [@TeXitoi](https://github.com/TeXitoi)
398* Re-licensed to Apache-2.0/MIT by [@CAD97](https://github.com/cad97)
399
400# v0.2.3 (2018-02-16)
401
402* An empty line in a doc comment will result in a double linefeed in the generated about/help call by [@TeXitoi](https://github.com/TeXitoi)
403
404# v0.2.2 (2018-02-12)
405
406* Fix [#66](https://github.com/TeXitoi/structopt/issues/66) by [@TeXitoi](https://github.com/TeXitoi)
407
408# v0.2.1 (2018-02-11)
409
410* Fix a bug around enum tuple and the about message in the global help by [@TeXitoi](https://github.com/TeXitoi)
411* Fix [#65](https://github.com/TeXitoi/structopt/issues/65) by [@TeXitoi](https://github.com/TeXitoi)
412
413# v0.2.0 (2018-02-10)
414
415## Breaking changes
416
417### Don't special case `u64` by [@SergioBenitez](https://github.com/SergioBenitez)
418
419If you are using a `u64` in your struct to get the number of occurence of a flag, you should now add `parse(from_occurrences)` on the flag.
420
421For example
422```rust
423#[structopt(short = "v", long = "verbose")]
424verbose: u64,
425```
426must be changed by
427```rust
428#[structopt(short = "v", long = "verbose", parse(from_occurrences))]
429verbose: u64,
430```
431
432This feature was surprising as shown in [#30](https://github.com/TeXitoi/structopt/issues/30). Using the `parse` feature seems much more natural.
433
434### Change the signature of `Structopt::from_clap` to take its argument by reference by [@TeXitoi](https://github.com/TeXitoi)
435
436There was no reason to take the argument by value. Most of the StructOpt users will not be impacted by this change. If you are using `StructOpt::from_clap`, just add a `&` before the argument.
437
438### Fail if attributes are not used by [@TeXitoi](https://github.com/TeXitoi)
439
440StructOpt was quite fuzzy in its attribute parsing: it was only searching for interresting things, e. g. something like `#[structopt(foo(bar))]` was accepted but not used. It now fails the compilation.
441
442You should have nothing to do here. This breaking change may highlight some missuse that can be bugs.
443
444In future versions, if there is cases that are not highlighed, they will be considerated as bugs, not breaking changes.
445
446### Use `raw()` wrapping instead of `_raw` suffixing by [@TeXitoi](https://github.com/TeXitoi)
447
448The syntax of raw attributes is changed to improve the syntax.
449
450You have to change `foo_raw = "bar", baz_raw = "foo"` by `raw(foo = "bar", baz = "foo")` or `raw(foo = "bar"), raw(baz = "foo")`.
451
452## New features
453
454* Add `parse(from_occurrences)` parser by [@SergioBenitez](https://github.com/SergioBenitez)
455* Support 1-uple enum variant as subcommand by [@TeXitoi](https://github.com/TeXitoi)
456* structopt-derive crate is now an implementation detail, structopt reexport the custom derive macro by [@TeXitoi](https://github.com/TeXitoi)
457* Add the `StructOpt::from_iter` method by [@Kerollmops](https://github.com/Kerollmops)
458
459## Documentation
460
461* Improve doc by [@bestouff](https://github.com/bestouff)
462* All the documentation is now on the structopt crate by [@TeXitoi](https://github.com/TeXitoi)
463
464# v0.1.7 (2018-01-23)
465
466* Allow opting out of clap default features by [@ski-csis](https://github.com/ski-csis)
467
468# v0.1.6 (2017-11-25)
469
470* Improve documentation by [@TeXitoi](https://github.com/TeXitoi)
471* Fix bug [#31](https://github.com/TeXitoi/structopt/issues/31) by [@TeXitoi](https://github.com/TeXitoi)
472
473# v0.1.5 (2017-11-14)
474
475* Fix a bug with optional subsubcommand and Enum by [@TeXitoi](https://github.com/TeXitoi)
476
477# v0.1.4 (2017-11-09)
478
479* Implement custom string parser from either `&str` or `&OsStr` by [@kennytm](https://github.com/kennytm)
480
481# v0.1.3 (2017-11-01)
482
483* Improve doc by [@TeXitoi](https://github.com/TeXitoi)
484
485# v0.1.2 (2017-11-01)
486
487* Fix bugs [#24](https://github.com/TeXitoi/structopt/issues/24) and [#25](https://github.com/TeXitoi/structopt/issues/25) by [@TeXitoi](https://github.com/TeXitoi)
488* Support of methods with something else that a string as argument thanks to `_raw` suffix by [@Flakebi](https://github.com/Flakebi)
489
490# v0.1.1 (2017-09-22)
491
492* Better formating of multiple authors by [@killercup](https://github.com/killercup)
493
494# v0.1.0 (2017-07-17)
495
496* Subcommand support by [@williamyaoh](https://github.com/williamyaoh)
497
498# v0.0.5 (2017-06-16)
499
500* Using doc comment to populate help by [@killercup](https://github.com/killercup)
501
502# v0.0.3 (2017-02-11)
503
504* First version with flags, arguments and options support by [@TeXitoi](https://github.com/TeXitoi)