`cucumber` changelog
====================
All user visible changes to `cucumber` crate will be documented in this file. This project uses [Semantic Versioning 2.0.0].
## [0.22.0] · 2025-12-12
[0.22.0]: https://github.com/cucumber-rs/cucumber/tree/v0.22.0
### BC Breaks
- Bumped up [MSRV] to 1.88 to get rid of `once_cell` crate, for `#[expect]` attribute usage, and because of migration to 2024 edition. ([4010c1ad], [f1307038], [b46930c3], [9705253b], [0c7dfc3c], [a4cbd3d2])
- Replaced `Arc` with `PartialEq`/`Hash` pointer-optimized `Source` in `event`s: ([#352])
- `Source<gherkin::Feature>` in `event::Cucumber::Feature`.
- `Source<gherkin::Rule>` in `event::Feature::Rule`.
- `Source<gherkin::Scenario>` in `event::Feature::Scenario` and `event::Rule::Scenario`.
- `Source<gherkin::Step>` in `event::Scenario::Background` and `event::Scenario::Step`.
- Made non-`const` the following constructor functions for input type polymorphism: ([#352])
- `event::Cucumber::feature_started()` and `event::Cucumber::feature_finished()`.
- `event::Cucumber::rule_started()` and `event::Cucumber::rule_finished()`.
- `event::Scenario::step_started()`, `event::Scenario::step_passed()` and `event::Scenario::step_skipped()`.
- `event::Scenario::background_step_started()`, `event::Scenario::background_step_passed()` and `event::Scenario::background_step_skipped()`.
- Kept only currently executed row of `Examples` table in expanded `Scenario Outline`s. ([#371], [#369])
### Added
- `CUCUMBER_FILTER_TAGS` environment variable support. ([#372])
### Fixed
- Performance degradation on large `.feature` files. ([#352], [#331])
- `clippy::trivial_regex` lint triggering on `#[given]`/`#[when]`/`#[then]` steps without regular expression. ([81acba84], [#384])
[#331]: https://github.com/cucumber-rs/cucumber/issues/331
[#352]: https://github.com/cucumber-rs/cucumber/pull/352
[#369]: https://github.com/cucumber-rs/cucumber/issues/369
[#371]: https://github.com/cucumber-rs/cucumber/pull/371
[#372]: https://github.com/cucumber-rs/cucumber/pull/372
[#384]: https://github.com/cucumber-rs/cucumber/issues/384
[0c7dfc3c]: https://github.com/cucumber-rs/cucumber/commit/0c7dfc3c80f0f58ce9a52f252485d1d14e6eb0ed
[4010c1ad]: https://github.com/cucumber-rs/cucumber/commit/4010c1ad6a53d6b7f0b28cefea73c8c13e880e9f
[81acba84]: https://github.com/cucumber-rs/cucumber/commit/81acba84697a5b04c45e2c5d5446f1ffbe289632
[9705253b]: https://github.com/cucumber-rs/cucumber/commit/9705253bda5caadfe3eea91f50420222158dd944
[a4cbd3d2]: https://github.com/cucumber-rs/cucumber/commit/a4cbd3d282fe8e01f05609eabea6410c0e2b46a3
[b46930c3]: https://github.com/cucumber-rs/cucumber/commit/b46930c32ef5ae490df8063905144a45de27eda1
[f1307038]: https://github.com/cucumber-rs/cucumber/commit/f1307038cb6b1e38c1cc259a0e09fb583033d0cf
## [0.21.1] · 2024-06-16
[0.21.1]: https://github.com/cucumber-rs/cucumber/tree/v0.21.1
### Fixed
- Wrong case of statuses reported in `writer::Json`. ([#335])
[#335]: https://github.com/cucumber-rs/cucumber/pull/335
## [0.21.0] · 2024-04-22
[0.21.0]: https://github.com/cucumber-rs/cucumber/tree/v0.21.0
### BC Breaks
- Removed `#[async_trait]` attribute from `World`, `Writer` and `writer::Arbitrary` traits. ([#324])
- Bumped up [MSRV] to 1.75 for using `async fn` in traits. ([#324])
### Fixed
- Possible truncation of long output messages. ([#333], [#332])
[#324]: https://github.com/cucumber-rs/cucumber/pull/324
[#332]: https://github.com/cucumber-rs/cucumber/issues/332
[#333]: https://github.com/cucumber-rs/cucumber/pull/333
## [0.20.2] · 2023-12-04
[0.20.2]: https://github.com/cucumber-rs/cucumber/tree/v0.20.2
### Fixed
- Ignored verbosity when printing `World` on hook/background step failure. ([#313])
[#313]: https://github.com/cucumber-rs/cucumber/pull/313
## [0.20.1] · 2023-10-16
[0.20.1]: https://github.com/cucumber-rs/cucumber/tree/v0.20.1
### Fixed
- Incorrect terminal width detection when its height is low. ([#298])
- Incorrect terminal lines clearing in interactive mode. ([#300], [#302], [#299])
[#298]: https://github.com/cucumber-rs/cucumber/pull/298
[#299]: https://github.com/cucumber-rs/cucumber/issues/299
[#300]: https://github.com/cucumber-rs/cucumber/pull/300
[#302]: https://github.com/cucumber-rs/cucumber/pull/302
## [0.20.0] · 2023-07-10
[0.20.0]: https://github.com/cucumber-rs/cucumber/tree/v0.20.0
### BC Breaks
- Added `Log` variant to `event::Scenario`. ([#258])
- Added `embeddings` field to `writer::json::Step` and `writer::json::HookResult`. ([#261])
- Added `report_time` field to `writer::libtest::Cli`. ([#264], [#265])
- Bumped up [MSRV] to 1.70 for using the `IsTerminal` trait from `std`. ([#288])
### Added
- [`tracing`] crate integration behind the `tracing` feature flag. ([#213], [#258], [#261])
- Support of `--report-time` CLI option for `writer::Libtest`. ([#264], [#265])
### Fixed
- Clearing lines that are wrapped because of terminal width. ([#272], [#273])
[#213]: https://github.com/cucumber-rs/cucumber/issues/213
[#258]: https://github.com/cucumber-rs/cucumber/pull/258
[#261]: https://github.com/cucumber-rs/cucumber/pull/261
[#264]: https://github.com/cucumber-rs/cucumber/issues/264
[#265]: https://github.com/cucumber-rs/cucumber/pull/265
[#272]: https://github.com/cucumber-rs/cucumber/discussions/272
[#273]: https://github.com/cucumber-rs/cucumber/pull/273
[#288]: https://github.com/cucumber-rs/cucumber/pull/288
## [0.19.1] · 2022-12-29
[0.19.1]: https://github.com/cucumber-rs/cucumber/tree/v0.19.1
### Fixed
- Using autodetect for colors on `color=always|never` CLI options. ([#253])
[#253]: https://github.com/cucumber-rs/cucumber/pull/253
## [0.19.0] · 2022-12-16
[0.19.0]: https://github.com/cucumber-rs/cucumber/tree/v0.19.0
### BC Breaks
- Replaced `writer::FailOnSkipped::writer` field with `writer::FailOnSkipped::inner_writer()` method. ([56456e66])
- Replaced `writer::Normalized::writer` field with `writer::Normalized::inner_writer()` method. ([56456e66])
- Replaced `writer::Or::left`/`writer::Or::right` fields with `writer::Or::left_writer()`/`writer::Or::right_writer()` methods. ([56456e66])
- Replaced `writer::Repeat::writer` field with `writer::Repeat::inner_writer()` method. ([56456e66])
- Replaced `writer::Summarize::writer` field with `writer::Summarize::inner_writer()` method. ([56456e66])
- Replaced `writer::Summarize::scenarios`/`writer::Summarize::steps` fields with `writer::Summarize::scenarios_stats()`/`writer::Summarize::steps_stats()` methods. ([56456e66])
- Made `writer::Summarize::features`/`writer::Summarize::rules` fields private. ([56456e66])
- Made `writer::Summarize::parsing_errors`/`writer::Summarize::failed_hooks` fields private in favour of `writer::Stats::parsing_errors()`/`writer::Stats::failed_hooks()` methods. ([56456e66])
### Added
- [Gherkin] syntax highlighting in the Book. ([#251])
- `runner::Basic::fail_fast()` method as `Cucumber::fail_fast()`. ([#252])
- `Cucumber::with_default_cli()` method. ([56456e66])
- `Default` implementation for CLI types. ([56456e66])
### Fixed
- `@serial` `Scenario`s continue running after failure when `--fail-fast()` CLI option is specified. ([#252])
[#251]: https://github.com/cucumber-rs/cucumber/pull/251
[#252]: https://github.com/cucumber-rs/cucumber/pull/252
[56456e66]: https://github.com/cucumber-rs/cucumber/commit/56456e666be41b4190f62fecaf727042ed69c15a
## [0.18.0] · 2022-12-07
[0.18.0]: https://github.com/cucumber-rs/cucumber/tree/v0.18.0
### BC Breaks
- Added `NotFound` variant to `event::StepError`. ([#250])
### Fixed
- Not panicking on `fail_on_skipped()` with retries. ([#250], [#249])
[#249]: https://github.com/cucumber-rs/cucumber/issues/249
[#250]: https://github.com/cucumber-rs/cucumber/pull/250
## [0.17.0] · 2022-11-23
[0.17.0]: https://github.com/cucumber-rs/cucumber/tree/v0.17.0
### BC Breaks
- Added `event::ScenarioFinished` as [`Cucumber::after`][0170-1] hook's argument, explaining why the `Scenario` has finished. ([#246], [#245])
### Fixed
- Uncaught panics of user code, when they happen before first poll of the returned `Future`s. ([#246])
[#245]: https://github.com/cucumber-rs/cucumber/discussions/245
[#246]: https://github.com/cucumber-rs/cucumber/pull/246
[0170-1]: https://docs.rs/cucumber/0.17.0/cucumber/struct.Cucumber.html#method.after
## [0.16.0] · 2022-11-09
[0.16.0]: https://github.com/cucumber-rs/cucumber/tree/v0.16.0
### BC Breaks
- Bumped up [MSRV] to 1.65 for using `let`-`else` statements. ([7f52d4a5])
### Added
- `--ff` CLI alias for `--fail-fast` CLI option. ([#242])
### Fixed
- `--fail-fast` CLI option causing execution to hang. ([#242], [#241])
[#241]: https://github.com/cucumber-rs/cucumber/issues/241
[#242]: https://github.com/cucumber-rs/cucumber/pull/242
[7f52d4a5]: https://github.com/cucumber-rs/cucumber/commit/7f52d4a5faa3b69bec6c7fb765b50455cf7802aa
## [0.15.3] · 2022-11-01
[0.15.3]: https://github.com/cucumber-rs/cucumber/tree/v0.15.3
### Added
- `Clone` implementations to all public types where possible. ([#238])
[#238]: https://github.com/cucumber-rs/cucumber/pull/238
## [0.15.2] · 2022-10-25
[0.15.2]: https://github.com/cucumber-rs/cucumber/tree/v0.15.2
### Changed
- Upgraded [`gherkin`] crate to 0.13 version. ([4cad49f8])
### Fixed
- Parsing error on a `Feature` having comment and tag simultaneously. ([4cad49f8], [cucumber-rs/gherkin#37], [cucumber-rs/gherkin#35])
- `@retry`, `@serial` and `@allow.skipped` tags semantics inheritance. ([#237])
[#237]: https://github.com/cucumber-rs/cucumber/pull/237
[4cad49f8]: https://github.com/cucumber-rs/cucumber/commit/4cad49f8d8f5d0458dcb538aa044a5fff1e6fa10
[cucumber-rs/gherkin#35]: https://github.com/cucumber-rs/gherkin/issues/35
[cucumber-rs/gherkin#37]: https://github.com/cucumber-rs/gherkin/pull/37
## [0.15.1] · 2022-10-12
[0.15.1]: https://github.com/cucumber-rs/cucumber/tree/v0.15.1
### Fixed
- Conflicting [`Id`][0151-1]s of CLI options. ([#232], [#231])
[#231]: https://github.com/cucumber-rs/cucumber/issues/231
[#232]: https://github.com/cucumber-rs/cucumber/pull/232
[0151-1]: https://docs.rs/clap/latest/clap/struct.Id.html
## [0.15.0] · 2022-10-05
[0.15.0]: https://github.com/cucumber-rs/cucumber/tree/v0.15.0
### BC Breaks
- Upgraded [`clap`] crate to 4.0 version. ([#230])
[#230]: https://github.com/cucumber-rs/cucumber/pull/230
## [0.14.2] · 2022-09-19
[0.14.2]: https://github.com/cucumber-rs/cucumber/tree/v0.14.2
[Diff](https://github.com/cucumber-rs/cucumber/compare/v0.14.1...v0.14.2)
### Fixed
- `#[derive(World)]` macro being unhygienic regarding custom `Result` types. ([186af8b1])
[186af8b1]: https://github.com/cucumber-rs/cucumber/commit/186af8b1de37275b308897e2e30d6982830b0278
## [0.14.1] · 2022-09-12
[0.14.1]: https://github.com/cucumber-rs/cucumber/tree/v0.14.1
### Changed
- Considered stripping `CARGO_WORKSPACE_DIR` from output paths whenever is defined. ([ad0bb22f])
### Fixed
- `CARGO_MANIFEST_DIR` being detected in compile time. ([ad0bb22f])
### Security updated
- `junit-report` crate to 0.8 version to fix [RUSTSEC-2022-0048]. ([#229], [#226])
[#226]: https://github.com/cucumber-rs/cucumber/issues/226
[#229]: https://github.com/cucumber-rs/cucumber/pull/229
[ad0bb22f]: https://github.com/cucumber-rs/cucumber/commit/ad0bb22f9234099985cb1966f92ccefbc97060fb
[RUSTSEC-2022-0048]: https://rustsec.org/advisories/RUSTSEC-2022-0048.html
## [0.14.0] · 2022-09-08
[0.14.0]: https://github.com/cucumber-rs/cucumber/tree/v0.14.0
### BC Breaks
- Bumped up [MSRV] to 1.62 for more clever support of [Cargo feature]s and simplified codegen. ([fbd08ec2], [cf055ac0], [8ad5cc86])
- Replaced `#[derive(WorldInit)]` with `#[derive(World)]` to remove the need of manual `World` trait implementation. ([#219], [#217])
- Merged `WorldInit` trait into the `World` trait. ([#219])
- Added `ParsingFinished` variant to `event::Cucumber`. ([#220])
- Reworked `writer::Failure`/`writer::discard::Failure` as `writer::Stats`/`writer::discard::Stats`. ([#220])
- Renamed `WriterExt::discard_failure_writes()` to `WriterExt::discard_stats_writes()`. ([#220])
- Added `Option<step::Location>` field to `event::Step::Passed` and `event::Step::Failed`. ([#221])
- Wrapped `event::Scenario` into `event::RetryableScenario` for storing in other `event`s. ([#223], [#212])
- Added `retried_steps()` method to `writer::Stats`. ([#223], [#212])
### Added
- `writer::Libtest` (enables [IntelliJ Rust integration][0140-1]) behind the `libtest` feature flag. ([#220])
- `writer::Or` to alternate between 2 `Writer`s basing on a predicate. ([#220])
- `writer::Stats::passed_steps()` and `writer::Stats::skipped_steps()` methods. ([#220])
- `FeatureExt::count_steps()` method. ([#220])
- Location of the `fn` matching a failed `Step` in output. ([#221])
- Ability to retry failed `Scenario`s. ([#223], [#212])
- `--retry`, `--retry-after` and `--retry-tag-filter` CLI options. ([#223], [#212])
### Changed
- Provided default CLI options are now global (allowed to be specified after custom subcommands). ([#216], [#215])
- Stripped `CARGO_MANIFEST_DIR` from output paths whenever is possible. ([#221])
[#212]: https://github.com/cucumber-rs/cucumber/issues/212
[#215]: https://github.com/cucumber-rs/cucumber/issues/215
[#216]: https://github.com/cucumber-rs/cucumber/pull/216
[#217]: https://github.com/cucumber-rs/cucumber/issues/217
[#219]: https://github.com/cucumber-rs/cucumber/pull/219
[#220]: https://github.com/cucumber-rs/cucumber/pull/220
[#221]: https://github.com/cucumber-rs/cucumber/pull/221
[#223]: https://github.com/cucumber-rs/cucumber/pull/223
[8ad5cc86]: https://github.com/cucumber-rs/cucumber/commit/8ad5cc866bb9d6b49470790e3b0dd40690f63a09
[cf055ac0]: https://github.com/cucumber-rs/cucumber/commit/cf055ac06c7b72f572882ce15d6a60da92ad60a0
[fbd08ec2]: https://github.com/cucumber-rs/cucumber/commit/fbd08ec24dbd036c89f5f0af4d936b616790a166
[0140-1]: book/src/output/intellij.md
## [0.13.0] · 2022-03-29
[0.13.0]: https://github.com/cucumber-rs/cucumber/tree/v0.13.0
### BC Breaks
- Upgraded [`gherkin`] crate to 0.12 version. ([#211])
[#211]: https://github.com/cucumber-rs/cucumber/pull/211
## [0.12.2] · 2022-03-28
[0.12.2]: https://github.com/cucumber-rs/cucumber/tree/v0.12.2
### Changed
- [`Cucumber::after`][0122-1] now gets the `World` instance even if some `Step` or a `Hook` before it has failed. ([#209], [#207])
[#207]: https://github.com/cucumber-rs/cucumber/issues/207
[#209]: https://github.com/cucumber-rs/cucumber/pull/209
[0122-1]: https://docs.rs/cucumber/0.12.2/cucumber/struct.Cucumber.html#method.after
## [0.12.1] · 2022-03-09
[0.12.1]: https://github.com/cucumber-rs/cucumber/tree/v0.12.1
### Security updated
- `regex` crate to 1.5.5 version to fix [CVE-2022-24713].
[CVE-2022-24713]: https://blog.rust-lang.org/2022/03/08/cve-2022-24713.html
## [0.12.0] · 2022-02-10
[0.12.0]: https://github.com/cucumber-rs/cucumber/tree/v0.12.0
### BC Breaks
- `step::Context::matches` now contains regex capturing group names in addition to captured values. ([#204])
### Added
- Support for multiple capturing groups in `Parameter` regex (previously was forbidden). ([#204])
### Fixed
- Book examples failing on Windows. ([#202], [#200])
- `{string}` parameter in [Cucumber Expressions] returning its enclosing quotes. ([cucumber-rs/cucumber-expressions#7])
[#200]: https://github.com/cucumber-rs/cucumber/issues/200
[#202]: https://github.com/cucumber-rs/cucumber/pull/202
[#204]: https://github.com/cucumber-rs/cucumber/pull/204
[cucumber-rs/cucumber-expressions#7]: https://github.com/cucumber-rs/cucumber-expressions/issues/7
## [0.11.3] · 2022-01-31
[0.11.3]: https://github.com/cucumber-rs/cucumber/tree/v0.11.3
### Fixed
- `parser::Basic` skipping files named `.feature`. ([#201])
[#201]: https://github.com/cucumber-rs/cucumber/pull/201
## [0.11.2] · 2022-01-19
[0.11.2]: https://github.com/cucumber-rs/cucumber/tree/v0.11.2
### Fixed
- Skipped `Background` steps not failing in `writer::FailOnSkipped`. ([#199], [#198])
[#198]: https://github.com/cucumber-rs/cucumber/issues/198
[#199]: https://github.com/cucumber-rs/cucumber/pull/199
## [0.11.1] · 2022-01-07
[0.11.1]: https://github.com/cucumber-rs/cucumber/tree/v0.11.1
### Added
- `--fail-fast` CLI option to `runner::Basic`. ([#196])
### Changed
- Optimized `runner::Basic` to not wait the whole batch to complete before executing next `Scenario`s. ([#195])
[#195]: https://github.com/cucumber-rs/cucumber/pull/195
[#196]: https://github.com/cucumber-rs/cucumber/pull/196
## [0.11.0] · 2022-01-03
[0.11.0]: https://github.com/cucumber-rs/cucumber/tree/v0.11.0
### BC Breaks
- Moved `World` type parameter of `WriterExt` trait to methods. ([#160])
- Renamed `Normalized` and `Summarized` `Writer`s to `Normalize` and `Summarize`. ([#162])
- Removed `writer::Basic` `Default` impl and change `writer::Basic::new()` return type to `writer::Normalize<writer::Basic>`. ([#162])
- Bump up [MSRV] to 1.57 for better error reporting in `const` assertions. ([cef3d480])
- Switch to [`gherkin`] crate instead of [`gherkin_rust`]. ([e2a41ab0])
- Renamed `@allow_skipped` built-in tag to `@allow.skipped`. ([#181])
- Switched CLI to [`clap`] from `structopt`. ([#188], [#155])
- Reworked `verbose` CLI option of `writer::Basic`: ([#193], [#192])
- Removed long form.
- Made `-v` default behavior (no additional output).
- Made `-vv` additionally output `World` on failed steps.
- Made `-vvv` additionally output docstrings (old behavior).
### Added
- Ability for step functions to return `Result`. ([#151])
- Arbitrary output for `writer::Basic`. ([#147])
- `writer::JUnit` ([JUnit XML report][0110-1]) behind the `output-junit` feature flag. ([#147])
- `writer::Json` ([Cucumber JSON format][0110-2]) behind the `output-json` feature flag. ([#159])
- `writer::Tee` for outputting to multiple terminating `Writer`s simultaneously. ([#160])
- `writer::discard::Arbitrary` and `writer::discard::Failure` for providing no-op implementations of the corresponding `Writer` traits. ([#160])
- Inability to build invalid `Writer`s pipelines:
- `writer::Normalized` trait required for `Writer`s in `Cucumber` running methods. ([#162])
- `writer::NonTransforming` trait required for `writer::Repeat`. ([#162])
- `writer::Summarizable` trait required for `writer::Summarize`. ([#162])
- Support for [Cucumber Expressions] via `#[given(expr = ...)]`, `#[when(expr = ...)]` and `#[then(expr = ...)]` syntax. ([#157])
- Support for custom parameters in [Cucumber Expressions] via `#[derive(cucumber::Parameter)]` macro. ([#168])
- Merging tags from `Feature` and `Rule` with `Scenario` when filtering with `--tags` CLI option. ([#166])
- `writer::AssertNormalized` forcing `Normalized` implementation. ([#182])
- `cli::Colored` trait for propagating `Coloring` to arbitrary `Writer`s. ([#189], [#186])
### Fixed
- Template regex in `Scenario Outline` expansion from `<(\S+)>` to `<([^>\s]+)>`. ([#163])
- Multiple `Examples` in `Scenario Outline`. ([#165], [#164])
- Docstring and name expansion in `Scenario Outline`. ([#178], [#172])
- `writer::Summarized` ignoring `Coloring` options. ([#189], [#186])
[#147]: https://github.com/cucumber-rs/cucumber/pull/147
[#151]: https://github.com/cucumber-rs/cucumber/pull/151
[#155]: https://github.com/cucumber-rs/cucumber/issues/155
[#157]: https://github.com/cucumber-rs/cucumber/pull/157
[#159]: https://github.com/cucumber-rs/cucumber/pull/159
[#160]: https://github.com/cucumber-rs/cucumber/pull/160
[#162]: https://github.com/cucumber-rs/cucumber/pull/162
[#163]: https://github.com/cucumber-rs/cucumber/pull/163
[#164]: https://github.com/cucumber-rs/cucumber/issues/164
[#165]: https://github.com/cucumber-rs/cucumber/pull/165
[#166]: https://github.com/cucumber-rs/cucumber/pull/166
[#168]: https://github.com/cucumber-rs/cucumber/pull/168
[#172]: https://github.com/cucumber-rs/cucumber/issues/172
[#178]: https://github.com/cucumber-rs/cucumber/pull/178
[#181]: https://github.com/cucumber-rs/cucumber/pull/181
[#182]: https://github.com/cucumber-rs/cucumber/pull/182
[#186]: https://github.com/cucumber-rs/cucumber/issues/186
[#188]: https://github.com/cucumber-rs/cucumber/pull/188
[#189]: https://github.com/cucumber-rs/cucumber/pull/189
[#192]: https://github.com/cucumber-rs/cucumber/issues/192
[#193]: https://github.com/cucumber-rs/cucumber/pull/193
[cef3d480]: https://github.com/cucumber-rs/cucumber/commit/cef3d480579190425461ddb04a1248675248351e
[e2a41ab0]: https://github.com/cucumber-rs/cucumber/commit/e2a41ab0a4398fe26075f0b066cc67e6e8a19e6c
[0110-1]: https://llg.cubic.org/docs/junit
[0110-2]: https://github.com/cucumber/cucumber-json-schema
## [0.10.2] · 2021-11-03
[0.10.2]: https://github.com/cucumber-rs/cucumber/tree/v0.10.2
### Fixed
- Multiple `WorldInit` derivers conflicting implementations in a single module. ([#150])
[#150]: https://github.com/cucumber-rs/cucumber/pull/150
## [0.10.1] · 2021-10-29
[0.10.1]: https://github.com/cucumber-rs/cucumber/tree/v0.10.1
### Fixed
- Console output hanging because of executing wrong `Concurrent` `Scenario`s. ([#146])
[#146]: https://github.com/cucumber-rs/cucumber/pull/146
## [0.10.0] · 2021-10-26
[0.10.0]: https://github.com/cucumber-rs/cucumber/tree/v0.10.0
### BC Breaks
- Renamed crate to `cucumber`.
- Complete redesign: ([#128])
- Introduce new abstractions: `Parser`, `Runner`, `Writer`;
- Provide reference implementations for those abstractions;
- Enable `macros` feature by default.
- Replaced `#[given(step)]`, `#[when(step)]` and `#[then(step)]` function argument attributes with a single `#[step]`. ([#128])
- Made test callbacks first argument `&mut World` instead of `World`. ([#128])
- Made `#[step]` argument of step functions `Step` instead of `StepContext` again, while test callbacks still receive `StepContext` as a second parameter. ([#128])
- Completely redesign and reworked CLI, making it composable and extendable. ([#144])
- [Hooks](https://cucumber.io/docs/cucumber/api#hooks) now accept optional `&mut World` as their last parameter. ([#142])
### Added
- Ability to run `Scenario`s concurrently. ([#128])
- Highlighting of regex capture groups in terminal output with __bold__ style. ([#136])
- Error on a step matching multiple step functions ([#143]).
- `timestamps` Cargo feature that enables collecting of timestamps for all the happened events during tests execution (useful for `Writer`s which format requires them) ([#145]).
[#128]: https://github.com/cucumber-rs/cucumber/pull/128
[#136]: https://github.com/cucumber-rs/cucumber/pull/136
[#137]: https://github.com/cucumber-rs/cucumber/pull/137
[#142]: https://github.com/cucumber-rs/cucumber/pull/142
[#143]: https://github.com/cucumber-rs/cucumber/pull/143
[#144]: https://github.com/cucumber-rs/cucumber/pull/144
[#145]: https://github.com/cucumber-rs/cucumber/pull/145
## [0.9.0] · 2021-07-19
[0.9.0]: https://github.com/cucumber-rs/cucumber/tree/v0.9.0
[Diff](https://github.com/cucumber-rs/cucumber/compare/v0.8.4...v0.9.0)
### BC Breaks
- The second parameter in the test callbacks is now a `StepContext` object, which contains the `Step` as a `step` field.
### Added
- Add `before` and `after` lifecycle functions to the `Cucumber` builder. These functions take a selector for determining when to run `before` or `after`, and a callback.
### Fixed
- Literal paths to `.feature` files will now work in the `Cucumber` builder.
- Removed unnecessary internal `Rc<T>` usage.
## [0.8.4] · 2021-02-18
[0.8.4]: https://github.com/cucumber-rs/cucumber/tree/v0.8.4
[Diff](https://github.com/cucumber-rs/cucumber/compare/v0.8.3...v0.8.4)
### Added
- `language` argument to `Cucumber` builder to set default language for all `.feature` files.
- `--debug` flag to always print STDOUT and STDERR per step.
## [0.8.3] · 2021-02-09
[0.8.3]: https://github.com/cucumber-rs/cucumber/tree/v0.8.3
[Diff](https://github.com/cucumber-rs/cucumber/compare/v0.8.2...v0.8.3)
### Changed
- Update `t!` macro to support specifying type of `World` argument in closure.
## [0.8.2] · 2021-01-30
[0.8.2]: https://github.com/cucumber-rs/cucumber/tree/v0.8.2
[Diff](https://github.com/cucumber-rs/cucumber/compare/v0.8.1...v0.8.2)
### Added
- Re-export `async_trait::async_trait` and `futures` crate for convenience.
- Update examples to use `tokio`.
## [0.8.1] · 2021-01-30
[0.8.1]: https://github.com/cucumber-rs/cucumber/tree/v0.8.1
[Diff](https://github.com/cucumber-rs/cucumber/compare/v0.8.0...v0.8.1)
### Added
- Proper i18n support via [`gherkin_rust`] `0.9`.
## [0.8.0] · 2021-01-18
[0.8.0]: https://github.com/cucumber-rs/cucumber/tree/v0.8.0
[Diff](https://github.com/cucumber-rs/cucumber/compare/v0.7.3...v0.8.0)
### Added
- Failure reporting. ([#91])
- `macros` feature providing attributes: ([#81])
- [`given`](https://docs.rs/cucumber_rust/0.8.0/cucumber_rust/attr.given.html);
- [`when`](https://docs.rs/cucumber_rust/0.8.0/cucumber_rust/attr.when.html);
- [`then`](https://docs.rs/cucumber_rust/0.8.0/cucumber_rust/attr.then.html).
### Fixed
- Filtering of tests by tag. ([#67])
- Removed unnecessary dependent traits from `World` trait.
[#67]: https://github.com/cucumber-rs/cucumber/issues/67
[#81]: https://github.com/cucumber-rs/cucumber/pull/81
[#91]: https://github.com/cucumber-rs/cucumber/issues/91
## [0.7.3] · 2020-09-20
[0.7.3]: https://github.com/cucumber-rs/cucumber/tree/v0.7.3
[Diff](https://github.com/cucumber-rs/cucumber/compare/v0.7.2...v0.7.3)
### Fixed
- Fix missing `mut` in `t!` macro for regexes — thanks [@stefanpieck](https://github.com/stefanpieck)! ([#68])
[#68]: https://github.com/cucumber-rs/cucumber/issues/68
## [0.7.2] · 2020-09-14
[0.7.2]: https://github.com/cucumber-rs/cucumber/tree/v0.7.2
[Diff](https://github.com/cucumber-rs/cucumber/compare/v0.7.1...v0.7.2)
### Added
- Enforce `UnwindSafe` on async test types.
## [0.7.1] · 2020-09-09
[0.7.1]: https://github.com/cucumber-rs/cucumber/tree/v0.7.1
[Diff](https://github.com/cucumber-rs/cucumber/compare/v0.7.0...v0.7.1)
### Fixed
- Issue with `t!` macro for unbraced blocks.
## [0.7.0] · 2020-09-07
[0.7.0]: https://github.com/cucumber-rs/cucumber/tree/v0.7.0
[Diff](https://github.com/cucumber-rs/cucumber/compare/v0.6.8...v0.7.0)
### BC Breaks
- The macro approach provided in `0.6.x` and lower has been entirely removed. It was hard to maintain and limited maintenance of the tests themselves.
### Added
- A new builder approach has been implemented.
- Support for asynchronous tests has been implemented — this is runtime agnostic.
[`clap`]: https://docs.rs/clap
[`gherkin`]: https://docs.rs/gherkin
[`gherkin_rust`]: https://docs.rs/gherkin_rust
[`tracing`]: https://docs.rs/tracing
[Cargo feature]: https://doc.rust-lang.org/cargo/reference/features.html
[Cucumber Expressions]: https://cucumber.github.io/cucumber-expressions
[Gherkin]: https://cucumber.io/docs/gherkin
[MSRV]: https://doc.rust-lang.org/cargo/reference/manifest.html#the-rust-version-field
[Semantic Versioning 2.0.0]: https://semver.org