dtolnay/thiserror (thiserror)
### [`v2.0.0`](https://redirect.github.com/dtolnay/thiserror/releases/tag/2.0.0)
[Compare Source](https://redirect.github.com/dtolnay/thiserror/compare/1.0.68...2.0.0)
#### Breaking changes
- Referencing keyword-named fields by a raw identifier like `{r#type}` inside a format string is no longer accepted; simply use the unraw name like `{type}` ([#347](https://redirect.github.com/dtolnay/thiserror/issues/347))
This aligns thiserror with the standard library's formatting macros, which gained support for implicit argument capture later than the release of this feature in thiserror 1.x.
```rust
#[derive(Error, Debug)]
#[error("... {type} ...")] // Before: {r#type}
pub struct Error {
pub r#type: Type,
}
```
- Trait bounds are no longer inferred on fields whose value is shadowed by an explicit named argument in a format message ([#345](https://redirect.github.com/dtolnay/thiserror/issues/345))
```rust
// Before: impl Display for Error
// After: impl Display for Error
#[derive(Error, Debug)]
#[error("{thing:o}", thing = "...")]
pub struct Error {
thing: T,
}
```
- Tuple structs and tuple variants can no longer use numerical `{0}` `{1}` access at the same time as supplying extra positional arguments for a format message, as this makes it ambiguous whether the number refers to a tuple field vs a different positional arg ([#354](https://redirect.github.com/dtolnay/thiserror/issues/354))
```rust
#[derive(Error, Debug)]
#[error("ambiguous: {0} {}", $N)]
// ^^^ Not allowed, use #[error("... {0} {n}", n = $N)]
pub struct TupleError(i32);
```
- Code containing invocations of thiserror's `derive(Error)` must now have a direct dependency on the `thiserror` crate regardless of the error data structure's contents ([#368](https://redirect.github.com/dtolnay/thiserror/issues/368), [#369](https://redirect.github.com/dtolnay/thiserror/issues/369), [#370](https://redirect.github.com/dtolnay/thiserror/issues/370), [#372](https://redirect.github.com/dtolnay/thiserror/issues/372))
#### Features
- Support disabling thiserror's standard library dependency by disabling the default "std" Cargo feature: `thiserror = { version = "2", default-features = false }` ([#373](https://redirect.github.com/dtolnay/thiserror/issues/373))
- Support using `r#source` as field name to opt out of a field named "source" being treated as an error's `Error::source()` ([#350](https://redirect.github.com/dtolnay/thiserror/issues/350))
```rust
#[derive(Error, Debug)]
#[error("{source} ==> {destination}")]
pub struct Error {
r#source: char,
destination: char,
}
let error = Error { source: 'S', destination: 'D' };
```
- Infinite recursion in a generated Display impl now produces an `unconditional_recursion` warning ([#359](https://redirect.github.com/dtolnay/thiserror/issues/359))
```rust
#[derive(Error, Debug)]
#[error("??? {self}")]
pub struct Error;
```
- A new attribute `#[error(fmt = path::to::myfmt)]` can be used to write formatting logic for an enum variant out-of-line ([#367](https://redirect.github.com/dtolnay/thiserror/issues/367))
```rust
#[derive(Error, Debug)]
pub enum Error {
#[error(fmt = demo_fmt)]
Demo { code: u16, message: Option },
}
fn demo_fmt(code: &u16, message: &Option, formatter: &mut fmt::Formatter) -> fmt::Result {
write!(formatter, "{code}")?;
if let Some(msg) = message {
write!(formatter, " - {msg}")?;
}
Ok(())
}
```
- Enums with an enum-level format message are now able to have individual variants that are `transparent` to supersede the enum-level message ([#366](https://redirect.github.com/dtolnay/thiserror/issues/366))
```rust
#[derive(Error, Debug)]
#[error("my error {0}")]
pub enum Error {
Json(#[from] serde_json::Error),
Yaml(#[from] serde_yaml::Error),
#[error(transparent)]
Other(#[from] anyhow::Error),
}
```
### [`v1.0.68`](https://redirect.github.com/dtolnay/thiserror/releases/tag/1.0.68)
[Compare Source](https://redirect.github.com/dtolnay/thiserror/compare/1.0.67...1.0.68)
- Handle incomplete expressions more robustly in format arguments, such as while code is being typed ([#341](https://redirect.github.com/dtolnay/thiserror/issues/341), [#344](https://redirect.github.com/dtolnay/thiserror/issues/344))
### [`v1.0.67`](https://redirect.github.com/dtolnay/thiserror/releases/tag/1.0.67)
[Compare Source](https://redirect.github.com/dtolnay/thiserror/compare/1.0.66...1.0.67)
- Improve expression syntax support inside format arguments ([#335](https://redirect.github.com/dtolnay/thiserror/issues/335), [#337](https://redirect.github.com/dtolnay/thiserror/issues/337), [#339](https://redirect.github.com/dtolnay/thiserror/issues/339), [#340](https://redirect.github.com/dtolnay/thiserror/issues/340))
### [`v1.0.66`](https://redirect.github.com/dtolnay/thiserror/releases/tag/1.0.66)
[Compare Source](https://redirect.github.com/dtolnay/thiserror/compare/1.0.65...1.0.66)
- Improve compile error on malformed format attribute ([#327](https://redirect.github.com/dtolnay/thiserror/issues/327))
### [`v1.0.65`](https://redirect.github.com/dtolnay/thiserror/releases/tag/1.0.65)
[Compare Source](https://redirect.github.com/dtolnay/thiserror/compare/1.0.64...1.0.65)
- Ensure OUT_DIR is left with deterministic contents after build script execution ([#325](https://redirect.github.com/dtolnay/thiserror/issues/325))
### [`v1.0.64`](https://redirect.github.com/dtolnay/thiserror/releases/tag/1.0.64)
[Compare Source](https://redirect.github.com/dtolnay/thiserror/compare/1.0.63...1.0.64)
- Exclude derived impls from coverage instrumentation ([#322](https://redirect.github.com/dtolnay/thiserror/issues/322), thanks [@oxalica](https://redirect.github.com/oxalica))
### [`v1.0.63`](https://redirect.github.com/dtolnay/thiserror/releases/tag/1.0.63)
[Compare Source](https://redirect.github.com/dtolnay/thiserror/compare/1.0.62...1.0.63)
- Documentation improvements
### [`v1.0.62`](https://redirect.github.com/dtolnay/thiserror/releases/tag/1.0.62)
[Compare Source](https://redirect.github.com/dtolnay/thiserror/compare/1.0.61...1.0.62)
- Support referring to nested tuple struct fields inside `#[error("ā¦", ā¦)]` attribute ([#309](https://redirect.github.com/dtolnay/thiserror/issues/309))
Configuration
š Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).
š¦ Automerge: Disabled by config. Please merge this manually once you are satisfied.
ā» Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
š Ignore: Close this PR and you won't be reminded about this update again.
[ ] If you want to rebase/retry this PR, check this box
This PR contains the following updates:
1.0.61
->2.0.0
Release Notes
dtolnay/thiserror (thiserror)
### [`v2.0.0`](https://redirect.github.com/dtolnay/thiserror/releases/tag/2.0.0) [Compare Source](https://redirect.github.com/dtolnay/thiserror/compare/1.0.68...2.0.0) #### Breaking changes - Referencing keyword-named fields by a raw identifier like `{r#type}` inside a format string is no longer accepted; simply use the unraw name like `{type}` ([#347](https://redirect.github.com/dtolnay/thiserror/issues/347)) This aligns thiserror with the standard library's formatting macros, which gained support for implicit argument capture later than the release of this feature in thiserror 1.x. ```rust #[derive(Error, Debug)] #[error("... {type} ...")] // Before: {r#type} pub struct Error { pub r#type: Type, } ``` - Trait bounds are no longer inferred on fields whose value is shadowed by an explicit named argument in a format message ([#345](https://redirect.github.com/dtolnay/thiserror/issues/345)) ```rust // Before: implConfiguration
š Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).
š¦ Automerge: Disabled by config. Please merge this manually once you are satisfied.
ā» Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
š Ignore: Close this PR and you won't be reminded about this update again.
This PR was generated by Mend Renovate. View the repository job log.