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