Skip to content

chore(deps): update rust crate thiserror to v2#195

Merged
l50 merged 1 commit intomainfrom
renovate/thiserror-2.x
Apr 15, 2026
Merged

chore(deps): update rust crate thiserror to v2#195
l50 merged 1 commit intomainfrom
renovate/thiserror-2.x

Conversation

@dreadnode-renovate-bot
Copy link
Copy Markdown
Contributor

This PR contains the following updates:

Package Type Update Change
thiserror workspace.dependencies major 12

Warning

Some dependencies could not be looked up. Check the Dependency Dashboard for more information.


Release Notes

dtolnay/thiserror (thiserror)

v2.0.18

Compare Source

v2.0.17

Compare Source

  • Use differently named __private module per patch release (#​434)

v2.0.16

Compare Source

  • Add to "no-std" crates.io category (#​429)

v2.0.15

Compare Source

  • Prevent Error::provide API becoming unavailable from a future new compiler lint (#​427)

v2.0.14

Compare Source

  • Allow build-script cleanup failure with NFSv3 output directory to be non-fatal (#​426)

v2.0.13

Compare Source

  • Documentation improvements

v2.0.12

Compare Source

  • Prevent elidable_lifetime_names pedantic clippy lint in generated impl (#​413)

v2.0.11

Compare Source

v2.0.10

Compare Source

  • Support errors containing a generic type parameter's associated type in a field (#​408)

v2.0.9

Compare Source

  • Work around missing_inline_in_public_items clippy restriction being triggered in macro-generated code (#​404)

v2.0.8

Compare Source

  • Improve support for macro-generated derive(Error) call sites (#​399)

v2.0.7

Compare Source

  • Work around conflict with #[deny(clippy::allow_attributes)] (#​397, thanks @​zertosh)

v2.0.6

Compare Source

  • Suppress deprecation warning on generated From impls (#​396)

v2.0.5

Compare Source

  • Prevent deprecation warning on generated impl for deprecated type (#​394)

v2.0.4

Compare Source

v2.0.3

Compare Source

  • 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

Compare Source

  • Fix hang on invalid input inside #[error(...)] attribute (#​382)

v2.0.1

Compare Source

  • 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

Compare Source

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 the thiserror 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's Error::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),
    }

Configuration

📅 Schedule: (UTC)

  • 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 has been generated by Renovate Bot.

| datasource | package   | from   | to     |
| ---------- | --------- | ------ | ------ |
| crate      | thiserror | 1.0.69 | 2.0.18 |
@dreadnode-renovate-bot dreadnode-renovate-bot Bot added type/digest Dependency digest updates area/rust labels Apr 15, 2026
@l50 l50 added this pull request to the merge queue Apr 15, 2026
Merged via the queue into main with commit 01a4dcf Apr 15, 2026
9 checks passed
@l50 l50 deleted the renovate/thiserror-2.x branch April 15, 2026 19:29
l50 pushed a commit that referenced this pull request Apr 15, 2026
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [thiserror](https://redirect.github.com/dtolnay/thiserror) |
workspace.dependencies | major | `1` → `2` |

---

> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.

---

### Release Notes

<details>
<summary>dtolnay/thiserror (thiserror)</summary>

###
[`v2.0.18`](https://redirect.github.com/dtolnay/thiserror/releases/tag/2.0.18)

[Compare
Source](https://redirect.github.com/dtolnay/thiserror/compare/2.0.17...2.0.18)

- Make compatible with project-level `needless_lifetimes = "forbid"`
([#&#8203;443](https://redirect.github.com/dtolnay/thiserror/issues/443),
thanks
[@&#8203;LucaCappelletti94](https://redirect.github.com/LucaCappelletti94))

###
[`v2.0.17`](https://redirect.github.com/dtolnay/thiserror/releases/tag/2.0.17)

[Compare
Source](https://redirect.github.com/dtolnay/thiserror/compare/2.0.16...2.0.17)

- Use differently named \_\_private module per patch release
([#&#8203;434](https://redirect.github.com/dtolnay/thiserror/issues/434))

###
[`v2.0.16`](https://redirect.github.com/dtolnay/thiserror/releases/tag/2.0.16)

[Compare
Source](https://redirect.github.com/dtolnay/thiserror/compare/2.0.15...2.0.16)

- Add to "no-std" crates.io category
([#&#8203;429](https://redirect.github.com/dtolnay/thiserror/issues/429))

###
[`v2.0.15`](https://redirect.github.com/dtolnay/thiserror/releases/tag/2.0.15)

[Compare
Source](https://redirect.github.com/dtolnay/thiserror/compare/2.0.14...2.0.15)

- Prevent `Error::provide` API becoming unavailable from a future new
compiler lint
([#&#8203;427](https://redirect.github.com/dtolnay/thiserror/issues/427))

###
[`v2.0.14`](https://redirect.github.com/dtolnay/thiserror/releases/tag/2.0.14)

[Compare
Source](https://redirect.github.com/dtolnay/thiserror/compare/2.0.13...2.0.14)

- Allow build-script cleanup failure with NFSv3 output directory to be
non-fatal
([#&#8203;426](https://redirect.github.com/dtolnay/thiserror/issues/426))

###
[`v2.0.13`](https://redirect.github.com/dtolnay/thiserror/releases/tag/2.0.13)

[Compare
Source](https://redirect.github.com/dtolnay/thiserror/compare/2.0.12...2.0.13)

- Documentation improvements

###
[`v2.0.12`](https://redirect.github.com/dtolnay/thiserror/releases/tag/2.0.12)

[Compare
Source](https://redirect.github.com/dtolnay/thiserror/compare/2.0.11...2.0.12)

- Prevent elidable\_lifetime\_names pedantic clippy lint in generated
impl
([#&#8203;413](https://redirect.github.com/dtolnay/thiserror/issues/413))

###
[`v2.0.11`](https://redirect.github.com/dtolnay/thiserror/releases/tag/2.0.11)

[Compare
Source](https://redirect.github.com/dtolnay/thiserror/compare/2.0.10...2.0.11)

- Add feature gate to tests that use std
([#&#8203;409](https://redirect.github.com/dtolnay/thiserror/issues/409),
[#&#8203;410](https://redirect.github.com/dtolnay/thiserror/issues/410),
thanks [@&#8203;Maytha8](https://redirect.github.com/Maytha8))

###
[`v2.0.10`](https://redirect.github.com/dtolnay/thiserror/releases/tag/2.0.10)

[Compare
Source](https://redirect.github.com/dtolnay/thiserror/compare/2.0.9...2.0.10)

- Support errors containing a generic type parameter's associated type
in a field
([#&#8203;408](https://redirect.github.com/dtolnay/thiserror/issues/408))

###
[`v2.0.9`](https://redirect.github.com/dtolnay/thiserror/releases/tag/2.0.9)

[Compare
Source](https://redirect.github.com/dtolnay/thiserror/compare/2.0.8...2.0.9)

- Work around `missing_inline_in_public_items` clippy restriction being
triggered in macro-generated code
([#&#8203;404](https://redirect.github.com/dtolnay/thiserror/issues/404))

###
[`v2.0.8`](https://redirect.github.com/dtolnay/thiserror/releases/tag/2.0.8)

[Compare
Source](https://redirect.github.com/dtolnay/thiserror/compare/2.0.7...2.0.8)

- Improve support for macro-generated `derive(Error)` call sites
([#&#8203;399](https://redirect.github.com/dtolnay/thiserror/issues/399))

###
[`v2.0.7`](https://redirect.github.com/dtolnay/thiserror/releases/tag/2.0.7)

[Compare
Source](https://redirect.github.com/dtolnay/thiserror/compare/2.0.6...2.0.7)

- Work around conflict with #\[deny(clippy::allow\_attributes)]
([#&#8203;397](https://redirect.github.com/dtolnay/thiserror/issues/397),
thanks [@&#8203;zertosh](https://redirect.github.com/zertosh))

###
[`v2.0.6`](https://redirect.github.com/dtolnay/thiserror/releases/tag/2.0.6)

[Compare
Source](https://redirect.github.com/dtolnay/thiserror/compare/2.0.5...2.0.6)

- Suppress deprecation warning on generated From impls
([#&#8203;396](https://redirect.github.com/dtolnay/thiserror/issues/396))

###
[`v2.0.5`](https://redirect.github.com/dtolnay/thiserror/releases/tag/2.0.5)

[Compare
Source](https://redirect.github.com/dtolnay/thiserror/compare/2.0.4...2.0.5)

- Prevent deprecation warning on generated impl for deprecated type
([#&#8203;394](https://redirect.github.com/dtolnay/thiserror/issues/394))

###
[`v2.0.4`](https://redirect.github.com/dtolnay/thiserror/releases/tag/2.0.4)

[Compare
Source](https://redirect.github.com/dtolnay/thiserror/compare/2.0.3...2.0.4)

- Eliminate needless\_lifetimes clippy lint in generated `From` impls
([#&#8203;391](https://redirect.github.com/dtolnay/thiserror/issues/391),
thanks [@&#8203;matt-phylum](https://redirect.github.com/matt-phylum))

###
[`v2.0.3`](https://redirect.github.com/dtolnay/thiserror/releases/tag/2.0.3)

[Compare
Source](https://redirect.github.com/dtolnay/thiserror/compare/2.0.2...2.0.3)

- Support the same Path field being repeated in both Debug and Display
representation in error message
([#&#8203;383](https://redirect.github.com/dtolnay/thiserror/issues/383))
- Improve error message when a format trait used in error message is not
implemented by some field
([#&#8203;384](https://redirect.github.com/dtolnay/thiserror/issues/384))

###
[`v2.0.2`](https://redirect.github.com/dtolnay/thiserror/releases/tag/2.0.2)

[Compare
Source](https://redirect.github.com/dtolnay/thiserror/compare/2.0.1...2.0.2)

- Fix hang on invalid input inside #\[error(...)] attribute
([#&#8203;382](https://redirect.github.com/dtolnay/thiserror/issues/382))

###
[`v2.0.1`](https://redirect.github.com/dtolnay/thiserror/releases/tag/2.0.1)

[Compare
Source](https://redirect.github.com/dtolnay/thiserror/compare/2.0.0...2.0.1)

- Support errors that contain a dynamically sized final field
([#&#8203;375](https://redirect.github.com/dtolnay/thiserror/issues/375))
- Improve inference of trait bounds for fields that are interpolated
multiple times in an error message
([#&#8203;377](https://redirect.github.com/dtolnay/thiserror/issues/377))

###
[`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.69...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}`
([#&#8203;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
([#&#8203;345](https://redirect.github.com/dtolnay/thiserror/issues/345))

  ```rust
  // 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
([#&#8203;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
([#&#8203;368](https://redirect.github.com/dtolnay/thiserror/issues/368),
[#&#8203;369](https://redirect.github.com/dtolnay/thiserror/issues/369),
[#&#8203;370](https://redirect.github.com/dtolnay/thiserror/issues/370),
[#&#8203;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 }`
([#&#8203;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()`
([#&#8203;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
([#&#8203;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
([#&#8203;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<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
([#&#8203;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),
  }
  ```

</details>

---

### Configuration

📅 **Schedule**: (UTC)

- 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.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Renovate
Bot](https://redirect.github.com/renovatebot/renovate).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xMjMuMyIsInVwZGF0ZWRJblZlciI6IjQzLjEyMy4zIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->

Co-authored-by: dreadnode-renovate-bot[bot] <184170622+dreadnode-renovate-bot[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

type/digest Dependency digest updates

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant