Update Rust crate thiserror to v2 - autoclosed
This MR contains the following updates:
Package | Type | Update | Change |
---|---|---|---|
thiserror | dependencies | major |
1 -> 2
|
Release Notes
dtolnay/thiserror (thiserror)
v2.0.3
- Support the same Path field being repeated in both Debug and Display representation in error message (#383)
- Improve error message when a format trait used in error message is not implemented by some field (#384)
v2.0.2
- Fix hang on invalid input inside #[error(...)] attribute (#382)
v2.0.1
- Support errors that contain a dynamically sized final field (#375)
- Improve inference of trait bounds for fields that are interpolated multiple times in an error message (#377)
v2.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)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.
#[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)
// Before: impl<T: Octal> Display for Error<T> // After: impl<T> Display for Error<T> #[derive(Error, Debug)] #[error("{thing:o}", thing = "...")] pub struct Error<T> { 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)#[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 thethiserror
crate regardless of the error data structure's contents (#368, #369, #370, #372)
Features
-
Support disabling thiserror's standard library dependency by disabling the default "std" Cargo feature:
thiserror = { version = "2", default-features = false }
(#373) -
Support using
r#source
as field name to opt out of a field named "source" being treated as an error'sError::source()
(#350)#[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)#[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)#[derive(Error, Debug)] pub enum Error { #[error(fmt = demo_fmt)] Demo { code: u16, message: Option<String> }, } fn demo_fmt(code: &u16, message: &Option<String>, 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)#[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.69
- Backport 2.0.2 fixes
v1.0.68
- Handle incomplete expressions more robustly in format arguments, such as while code is being typed (#341, #344)
v1.0.67
v1.0.66
- Improve compile error on malformed format attribute (#327)
v1.0.65
- Ensure OUT_DIR is left with deterministic contents after build script execution (#325)
v1.0.64
v1.0.63
- Documentation improvements
v1.0.62
- Support referring to nested tuple struct fields inside
#[error("…", …)]
attribute (#309)
v1.0.61
v1.0.60
- Resolve unexpected_cfgs warning (#298)
v1.0.59
- Unblock testing of rustc
debug-fmt-detail
option (#297)
v1.0.58
- Make backtrace support available when using -Dwarnings (#292)
v1.0.57
- Generate more efficient
Display
impl for error message which do not contain any interpolated value (#286, thanks @nyurik)
v1.0.56
- Update proc-macro2 to fix caching issue when using a rustc-wrapper such as sccache
v1.0.55
- Work around improperly cached build script result by sccache – second attempt (#280)
v1.0.54
- Work around improperly cached build script result by sccache – first attempt (#279)
v1.0.53
- Reduce spurious rebuilds under RustRover IDE when using a nightly toolchain (#270)
v1.0.52
- Fix interaction with RUSTC_BOOTSTRAP (#269)
v1.0.51
- Improve diagnostics when an invalid attribute previously caused thiserror to generate no
Error
impl (#266)
v1.0.50
- Improve diagnostic when a #[source], #[from], or #[transparant] attribute refers to a type that has no std::error::Error impl (#258, thanks @de-vri-es)
v1.0.49
v1.0.48
- Improve implementation of displaying Path values in a generated Display impl (#251, thanks @mina86)
v1.0.47
- Work around rust-analyzer bug (https://github.com/rust-lang/rust-analyzer/issues/9911)
v1.0.46
- Add bootstrap workaround to allow rustc to depend on thiserror (#248, thanks @RalfJung)
v1.0.45
- Update backtrace support to nightly's new Error::provide API (https://github.com/rust-lang/rust/pull/113464, #246)
v1.0.44
- Documentation improvements
v1.0.43
v1.0.42
- Fix compile error in derived Display impl if there was a nonstandard
write!
macro in scope (#239)
v1.0.41
v1.0.40
- Update syn dependency to 2.x
v1.0.39
- Set html_root_url attribute
v1.0.38
- Documentation improvements
v1.0.37
- Documentation improvements
v1.0.36
v1.0.35
- More work on integrating std::any::Provider for backtrace support
- Fix "Multiple applicable
provide
methods in scope" error when the caller has both std::error::Error and std::any::Provide traits in scope (#185)
v1.0.34
- Tweak "generic member access" based Backtrace implementation (#184)
v1.0.33
- Expose backtraces via the new "generic member access" API on the Error trait (https://github.com/rust-lang/rust/issues/99301, https://github.com/rust-lang/rust/issues/96024)
v1.0.32
- Add keywords to crates.io metadata
v1.0.31
- Improve diagnostic when there is an enum variant containing
#[from] #[backtrace] Error, Backtrace
(#163)
Configuration
-
If you want to rebase/retry this MR, check this box
This MR has been generated by Renovate Bot.