Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Tracking Issue for error_generic_member_access #99301

Open
2 of 4 tasks
yaahc opened this issue Jul 15, 2022 · 3 comments
Open
2 of 4 tasks

Tracking Issue for error_generic_member_access #99301

yaahc opened this issue Jul 15, 2022 · 3 comments
Labels
C-tracking-issue Category: A tracking issue for an RFC or an unstable feature. T-libs-api Relevant to the library API team, which will review and decide on the PR/issue.

Comments

@yaahc
Copy link
Member

yaahc commented Jul 15, 2022

Feature gate: #![feature(error_generic_member_access)]

This is a tracking issue for the generic member access API on the error trait, which generalizes the pattern of fn source(&self) -> Option<&dyn Error> and fn backtrace(&self) -> Option<&Backtrace> into fn request_ref::<T>(&self) -> Option<&T>

Public API

// std::error

pub trait Error: Debug + Display {
    // existing API unchanged

    fn provide<'a>(&'a self, req: &mut Demand<'a>) {}
}

impl dyn Error + Send + Sync + 'static { // and all combinations of send/sync
    pub fn request_ref<T: ?Sized + 'static>(&self) -> Option<&T> {
        core::any::request_ref(self)
    }

    pub fn request_value<T: 'static>(&self) -> Option<T> {
        core::any::request_value(self)
    }
}

Steps / History

Unresolved Questions

  • None yet.

Footnotes

  1. https://std-dev-guide.rust-lang.org/feature-lifecycle/stabilization.html

@yaahc yaahc added T-libs-api Relevant to the library API team, which will review and decide on the PR/issue. C-tracking-issue Category: A tracking issue for an RFC or an unstable feature. labels Jul 15, 2022
dbanty pushed a commit to knope-dev/knope that referenced this issue Sep 4, 2022
[![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [thiserror](https://togithub.com/dtolnay/thiserror) | dependencies | patch | `1.0.32` -> `1.0.33` |

---

### Release Notes

<details>
<summary>dtolnay/thiserror</summary>

### [`v1.0.33`](https://togithub.com/dtolnay/thiserror/releases/tag/1.0.33)

[Compare Source](https://togithub.com/dtolnay/thiserror/compare/1.0.32...1.0.33)

-   Expose backtraces via the new "generic member access" API on the Error trait ([rust-lang/rust#99301, [rust-lang/rust#96024)

</details>

---

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

---

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

---

This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://app.renovatebot.com/dashboard#github/knope-dev/knope).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzMi4xODQuMiIsInVwZGF0ZWRJblZlciI6IjMyLjE4NC4yIn0=-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
@dtolnay
Copy link
Member

dtolnay commented Sep 5, 2022

Hello from dtolnay/thiserror#185. I noticed it can be problematic for macros that Provider and Error both have a method named provide. I know this has been the case for other traits (Display and Debug both have a fmt method, for example) but one thing that makes the situation worse for provide is that we're commonly forced to rely on deref in order to call it, so fully-qualified method call syntax is not suitable to resolve the ambiguity:

  • In the case of Display, macros can write core::fmt::Display::fmt(&$thing, formatter) and that will always work, because even if $thing is something like Box<dyn Display>, there is an impl<T> Display for Box<T> where T: Display + ?Sized which makes it work.

  • However in the case of Error, writing core::error::Error::provide(&$thing, demand) is less good than $thing.provide(demand) because there is no impl<E> Error for Box<E> where E: Error + ?Sized. If $thing is Box<dyn Error + Send + Sync + 'static>, or anyhow::Error, these things rely on the deref done implicitly by .provide(demand) in order to deref to dyn Error + Send + Sync + 'static, which calling fully qualified core::error::Error::provide will not do.

  • The situation gets worse as other traits in the ecosystem follow the lead of Error and possibly add their own provide method. Maybe it's not so common that Provider and Error would be both in scope at the same time, but are we confident that Error and arbitrary other ecosystem trait won't be?

Two proposals:

  1. There should be impl Provider for Box<dyn Error + …> in the standard library. This makes core::any::Provider::provide(&$thing, demand) accommodate more cases, but still not as good as having a deref.

  2. Is there someone who might be interested in pursuing a "fully qualified method call but with deref/autoref" RFC? I believe the syntax thing.core::any::Provider::provide(demand) has been floated for this in the past, and would eliminate the difficulty for macros that want a deref or autoref but also need to be robust to multiple traits having the same method name.

@JonasJebing
Copy link

JonasJebing commented Oct 23, 2022

I agree, that

a "fully qualified method call but with deref/autoref" RFC

would be great.
An immediate remedy would also be to rename Error::provide.
The error_generic_member_access RFC and the dyno/provide_any RFC were already using Error::provide_context instead of Error::provide in their examples.
I'd gladly create a PR to change the name if there are no objections.

bors bot pushed a commit to stackabletech/operator-rs that referenced this issue Nov 4, 2022
[![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [Swatinem/rust-cache](https://togithub.com/Swatinem/rust-cache) | action | patch | `v2.0.0` -> `v2.0.2` |
| [clap](https://togithub.com/clap-rs/clap) | dependencies | patch | `3.2.17` -> `3.2.23` |
| [const_format](https://togithub.com/rodrimati1992/const_format_crates) | dependencies | patch | `0.2.26` -> `0.2.30` |
| [darling](https://togithub.com/TedDriggs/darling) | dependencies | patch | `0.14.1` -> `0.14.2` |
| [futures](https://rust-lang.github.io/futures-rs) ([source](https://togithub.com/rust-lang/futures-rs)) | dependencies | patch | `0.3.23` -> `0.3.25` |
| [proc-macro2](https://togithub.com/dtolnay/proc-macro2) | dependencies | patch | `1.0.43` -> `1.0.47` |
| [serde](https://serde.rs) ([source](https://togithub.com/serde-rs/serde)) | dependencies | patch | `1.0.144` -> `1.0.147` |
| [serde_json](https://togithub.com/serde-rs/json) | dependencies | patch | `1.0.85` -> `1.0.87` |
| [serde_yaml](https://togithub.com/dtolnay/serde-yaml) | dependencies | patch | `0.9.10` -> `0.9.14` |
| [snafu](https://togithub.com/shepmaster/snafu) | dependencies | patch | `0.7.1` -> `0.7.3` |
| [syn](https://togithub.com/dtolnay/syn) | dependencies | patch | `1.0.99` -> `1.0.103` |
| [thiserror](https://togithub.com/dtolnay/thiserror) | dependencies | patch | `1.0.32` -> `1.0.37` |
| [tokio](https://tokio.rs) ([source](https://togithub.com/tokio-rs/tokio)) | dependencies | patch | `1.21.1` -> `1.21.2` |
| [tracing](https://tokio.rs) ([source](https://togithub.com/tokio-rs/tracing)) | dependencies | patch | `0.1.36` -> `0.1.37` |
| [tracing-subscriber](https://tokio.rs) ([source](https://togithub.com/tokio-rs/tracing)) | dependencies | patch | `0.3.15` -> `0.3.16` |

---

### Release Notes

<details>
<summary>Swatinem/rust-cache</summary>

### [`v2.0.2`](https://togithub.com/Swatinem/rust-cache/releases/tag/v2.0.2)

[Compare Source](https://togithub.com/Swatinem/rust-cache/compare/v2.0.1...v2.0.2)

-   Avoid calling cargo metadata on pre-cleanup.

### [`v2.0.1`](https://togithub.com/Swatinem/rust-cache/releases/tag/v2.0.1)

[Compare Source](https://togithub.com/Swatinem/rust-cache/compare/v2.0.0...v2.0.1)

-   Primarily just updating dependencies to fix GitHub deprecation notices.

</details>

<details>
<summary>clap-rs/clap</summary>

### [`v3.2.23`](https://togithub.com/clap-rs/clap/releases/tag/v3.2.23)

[Compare Source](https://togithub.com/clap-rs/clap/compare/v3.2.22...v3.2.23)

#### \[3.2.23] - 2022-10-24

##### Fixes

-   Upgrade to `textwrap` 0.16

### [`v3.2.22`](https://togithub.com/clap-rs/clap/releases/tag/v3.2.22)

[Compare Source](https://togithub.com/clap-rs/clap/compare/v3.2.21...v3.2.22)

##### \[3.2.22] - 2022-09-16

##### Fixes

-   Unify dependencies on `terminal_size` to the 0.2 release

### [`v3.2.21`](https://togithub.com/clap-rs/clap/releases/tag/v3.2.21)

[Compare Source](https://togithub.com/clap-rs/clap/compare/v3.2.20...v3.2.21)

#### \[3.2.21] - 2022-09-12

##### Features

-   `TypedValueParser::map` to allow reusing existing value parsers for other purposes

### [`v3.2.20`](https://togithub.com/clap-rs/clap/releases/tag/v3.2.20)

[Compare Source](https://togithub.com/clap-rs/clap/compare/v3.2.19...v3.2.20)

#### \[3.2.20] - 2022-09-02

##### Features

-   `ArgMatches::get_count` help for `ArgAction::Count`
-   `ArgMatches::get_flag` help for `ArgAction::SetTrue` / `ArgAction::SetFalse`

### [`v3.2.19`](https://togithub.com/clap-rs/clap/releases/tag/v3.2.19)

[Compare Source](https://togithub.com/clap-rs/clap/compare/v3.2.18...v3.2.19)

#### \[3.2.19] - 2022-08-30

##### Fixes

-   *(help)* Ensure required arguments for parent commands aren't shown in their subcommands when using `args_conflicts_with_subcommand`

### [`v3.2.18`](https://togithub.com/clap-rs/clap/blob/HEAD/CHANGELOG.md#&#8203;3218---2022-08-29)

[Compare Source](https://togithub.com/clap-rs/clap/compare/v3.2.17...v3.2.18)

##### Fixes

-   *(help)* `Command::print_help` now respects `Command::colored_help`
-   *(derive)* Improved error messages

</details>

<details>
<summary>rodrimati1992/const_format_crates</summary>

### [`v0.2.29`](https://togithub.com/rodrimati1992/const_format_crates/blob/HEAD/Changelog.md#&#8203;0229)

Added lowercase hexadecimal formatting support.

Breaking: to add lowercase hexadecimal formatting, this crate changed the uppercase hexadecimal formatter from `{:x}` to `{:X}`

### [`v0.2.27`](https://togithub.com/rodrimati1992/const_format_crates/blob/HEAD/Changelog.md#&#8203;0227)

Replacing existing features with these:

-   `"rust_1_64"`: superceeding the soft-deprecated `"more_str_macros"` feature.
-   `"rust_1_51"`: superceeding the soft-deprecated `"const_generics"` feature.
    The new features are enabled by the feature they superceede.

Now the `"fmt"` feature enables the `"rust_1_64"` feature.

</details>

<details>
<summary>TedDriggs/darling</summary>

### [`v0.14.2`](https://togithub.com/TedDriggs/darling/blob/HEAD/CHANGELOG.md#v0142-October-26-2022)

[Compare Source](https://togithub.com/TedDriggs/darling/compare/v0.14.1...v0.14.2)

-   Derived impls of `FromMeta` will now error on literals, rather than silently ignoring them. [#&#8203;193](https://togithub.com/TedDriggs/darling/pull/193)
-   Don't include property paths in compile errors when spans are available. [#&#8203;203](https://togithub.com/TedDriggs/darling/pull/203)

</details>

<details>
<summary>rust-lang/futures-rs</summary>

### [`v0.3.25`](https://togithub.com/rust-lang/futures-rs/blob/HEAD/CHANGELOG.md#&#8203;0325---2022-10-20)

[Compare Source](https://togithub.com/rust-lang/futures-rs/compare/0.3.24...0.3.25)

-   Fix soundness issue in `join!` and `try_join!` macros ([#&#8203;2649](https://togithub.com/rust-lang/futures-rs/issues/2649))
-   Implement `Clone` for `sink::Drain` ([#&#8203;2650](https://togithub.com/rust-lang/futures-rs/issues/2650))

### [`v0.3.24`](https://togithub.com/rust-lang/futures-rs/blob/HEAD/CHANGELOG.md#&#8203;0324---2022-08-29)

[Compare Source](https://togithub.com/rust-lang/futures-rs/compare/0.3.23...0.3.24)

-   Fix incorrect termination of `select_with_strategy` streams ([#&#8203;2635](https://togithub.com/rust-lang/futures-rs/issues/2635))

</details>

<details>
<summary>dtolnay/proc-macro2</summary>

### [`v1.0.47`](https://togithub.com/dtolnay/proc-macro2/releases/tag/1.0.47)

[Compare Source](https://togithub.com/dtolnay/proc-macro2/compare/1.0.46...1.0.47)

-   Fix integer overflow when nesting depth of nested comments exceeds 4 billion ([#&#8203;357](https://togithub.com/dtolnay/proc-macro2/issues/357))

### [`v1.0.46`](https://togithub.com/dtolnay/proc-macro2/releases/tag/1.0.46)

[Compare Source](https://togithub.com/dtolnay/proc-macro2/compare/1.0.45...1.0.46)

-   Make proc_macro2::TokenStream's `FromStr` impl consistent with proc_macro::TokenStream's on strings that begin with a byte order mark `\u{feff}` ([#&#8203;353](https://togithub.com/dtolnay/proc-macro2/issues/353))

### [`v1.0.45`](https://togithub.com/dtolnay/proc-macro2/releases/tag/1.0.45)

[Compare Source](https://togithub.com/dtolnay/proc-macro2/compare/1.0.44...1.0.45)

-   Fix panic on parsing disallowed raw identifiers such as `r#self` ([#&#8203;351](https://togithub.com/dtolnay/proc-macro2/issues/351))

### [`v1.0.44`](https://togithub.com/dtolnay/proc-macro2/releases/tag/1.0.44)

[Compare Source](https://togithub.com/dtolnay/proc-macro2/compare/1.0.43...1.0.44)

-   Expose `span.before()` and `span.after()` to access an empty `Span` located immediately before or after the input span ([#&#8203;348](https://togithub.com/dtolnay/proc-macro2/issues/348), upstream tracking issue: [rust-lang/rust#87552)

</details>

<details>
<summary>serde-rs/serde</summary>

### [`v1.0.147`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.147)

[Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.146...v1.0.147)

-   Add `serde:🇩🇪:value::EnumAccessDeserializer` which transforms an `EnumAccess` into a `Deserializer` ([#&#8203;2305](https://togithub.com/serde-rs/serde/issues/2305))

### [`v1.0.146`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.146)

[Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.145...v1.0.146)

-   Allow internally tagged newtype variant to contain unit ([#&#8203;2303](https://togithub.com/serde-rs/serde/issues/2303), thanks [@&#8203;tage64](https://togithub.com/tage64))

### [`v1.0.145`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.145)

[Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.144...v1.0.145)

-   Allow RefCell\<T>, Mutex\<T>, and RwLock\<T> to be serialized regardless of whether T is `Sized` ([#&#8203;2282](https://togithub.com/serde-rs/serde/issues/2282), thanks [@&#8203;ChayimFriedman2](https://togithub.com/ChayimFriedman2))

</details>

<details>
<summary>serde-rs/json</summary>

### [`v1.0.87`](https://togithub.com/serde-rs/json/releases/tag/v1.0.87)

[Compare Source](https://togithub.com/serde-rs/json/compare/v1.0.86...v1.0.87)

-   Add `write_i128` and `write_u128` methods to `serde_json::Formatter` to control the formatting of 128-bit integers ([#&#8203;940](https://togithub.com/serde-rs/json/issues/940), thanks [@&#8203;Lucretiel](https://togithub.com/Lucretiel))

### [`v1.0.86`](https://togithub.com/serde-rs/json/releases/tag/v1.0.86)

[Compare Source](https://togithub.com/serde-rs/json/compare/v1.0.85...v1.0.86)

-   Support `arbitrary_precision` feature even in no-std mode ([#&#8203;928](https://togithub.com/serde-rs/json/issues/928), thanks [@&#8203;kvinwang](https://togithub.com/kvinwang))

</details>

<details>
<summary>dtolnay/serde-yaml</summary>

### [`v0.9.14`](https://togithub.com/dtolnay/serde-yaml/releases/tag/0.9.14)

[Compare Source](https://togithub.com/dtolnay/serde-yaml/compare/0.9.13...0.9.14)

-   Implement `Deserializer` for `TaggedValue` and `&TaggedValue` ([#&#8203;339](https://togithub.com/dtolnay/serde-yaml/issues/339))

### [`v0.9.13`](https://togithub.com/dtolnay/serde-yaml/releases/tag/0.9.13)

[Compare Source](https://togithub.com/dtolnay/serde-yaml/compare/0.9.12...0.9.13)

-   Recognize `True`, `TRUE`, `False`, `FALSE` as booleans, `Null`, `NULL` as null ([#&#8203;330](https://togithub.com/dtolnay/serde-yaml/issues/330))

### [`v0.9.12`](https://togithub.com/dtolnay/serde-yaml/releases/tag/0.9.12)

[Compare Source](https://togithub.com/dtolnay/serde-yaml/compare/0.9.11...0.9.12)

-   Support deserializing tagged literal scalar into primitive ([#&#8203;327](https://togithub.com/dtolnay/serde-yaml/issues/327))

    ```yaml
    "foo": !!int |-
      7200
    ```

### [`v0.9.11`](https://togithub.com/dtolnay/serde-yaml/releases/tag/0.9.11)

[Compare Source](https://togithub.com/dtolnay/serde-yaml/compare/0.9.10...0.9.11)

-   Serialize strings on a single line when they do not already contain a newline character, regardless of string length ([#&#8203;321](https://togithub.com/dtolnay/serde-yaml/issues/321), [#&#8203;322](https://togithub.com/dtolnay/serde-yaml/issues/322))

</details>

<details>
<summary>shepmaster/snafu</summary>

### [`v0.7.3`](https://togithub.com/shepmaster/snafu/blob/HEAD/CHANGELOG.md#&#8203;073---2022-10-20)

[Compare Source](https://togithub.com/shepmaster/snafu/compare/0.7.2...0.7.3)

##### Fixed

-   The macro no longer generates invalid code when implicitly-generated
    types (such as backtraces) were used in conjunction with
    `#[snafu(source(from))]` and the type before transformation does not
    implement `std::error::Error`.

[0.7.3]: https://togithub.com/shepmaster/snafu/releases/tag/0.7.3

### [`v0.7.2`](https://togithub.com/shepmaster/snafu/blob/HEAD/CHANGELOG.md#&#8203;072---2022-10-09)

[Compare Source](https://togithub.com/shepmaster/snafu/compare/0.7.1...0.7.2)

##### Added

-   `Report` can be returned from `main` or test functions to provide a
    user-friendly display of errors.

-   A cheat sheet for the most common `#[snafu(...)]` attribute usages
    has been added to the `Snafu` macro's documentation.

-   Optional support for using the standard library's
    `std::backtrace::Backtrace` type via the `backtraces-impl-std`
    feature flag.

-   Optional support for implementing the Provider API using the
    `std::error::Error::provide` method via the `unstable-provider-api`
    feature flag.

-   Optional support for implementing the `core::error::Error` trait
    instead of `std::error::Error` via the `unstable-core-error` feature
    flag.

-   `GenerateImplicitData` has a new method `generate_with_source`.

##### Changed

-   `ErrorCompat::iter_chain` and `ChainCompat` are now available in
    no_std environments.

-   `ChainCompat` now implements `Clone`.

-   The `Debug` implementation for `Location` no longer shows some
    irrelevant internal details.

[0.7.2]: https://togithub.com/shepmaster/snafu/releases/tag/0.7.2

</details>

<details>
<summary>dtolnay/syn</summary>

### [`v1.0.103`](https://togithub.com/dtolnay/syn/releases/tag/1.0.103)

[Compare Source](https://togithub.com/dtolnay/syn/compare/1.0.102...1.0.103)

-   Implement `PartialOrd` for `Cursor` ([#&#8203;1236](https://togithub.com/dtolnay/syn/issues/1236), [#&#8203;1237](https://togithub.com/dtolnay/syn/issues/1237), thanks [@&#8203;CAD97](https://togithub.com/CAD97))

### [`v1.0.102`](https://togithub.com/dtolnay/syn/releases/tag/1.0.102)

[Compare Source](https://togithub.com/dtolnay/syn/compare/1.0.101...1.0.102)

-   More efficient internal representation for `TokenBuffer` ([#&#8203;1223](https://togithub.com/dtolnay/syn/issues/1223), thanks [@&#8203;CAD97](https://togithub.com/CAD97))
-   Fix parsing of a left shift after macro metavariable in type position ([#&#8203;1229](https://togithub.com/dtolnay/syn/issues/1229))

### [`v1.0.101`](https://togithub.com/dtolnay/syn/releases/tag/1.0.101)

[Compare Source](https://togithub.com/dtolnay/syn/compare/1.0.100...1.0.101)

-   Eliminate a bunch of redundant work done by LitStr::parse ([#&#8203;1221](https://togithub.com/dtolnay/syn/issues/1221))

### [`v1.0.100`](https://togithub.com/dtolnay/syn/releases/tag/1.0.100)

[Compare Source](https://togithub.com/dtolnay/syn/compare/1.0.99...1.0.100)

-   Parse closures with explicit empty lifetime parameter list `for<> || -> T {…}` ([#&#8203;1212](https://togithub.com/dtolnay/syn/issues/1212), [rust-lang/rust#97362)
-   Parse `dyn*` provisional syntax ([#&#8203;1213](https://togithub.com/dtolnay/syn/issues/1213), [rust-lang/rust#91611)
-   Parse attributes on the "rest" pattern of a struct in pattern position, `Struct { #[attr] .. }` ([#&#8203;1214](https://togithub.com/dtolnay/syn/issues/1214))
-   Parse `static async` and `static async move` closures ([#&#8203;1215](https://togithub.com/dtolnay/syn/issues/1215), [rust-lang/rust#62290)

</details>

<details>
<summary>dtolnay/thiserror</summary>

### [`v1.0.37`](https://togithub.com/dtolnay/thiserror/releases/tag/1.0.37)

[Compare Source](https://togithub.com/dtolnay/thiserror/compare/1.0.36...1.0.37)

-   Documentation improvements

### [`v1.0.36`](https://togithub.com/dtolnay/thiserror/releases/tag/1.0.36)

[Compare Source](https://togithub.com/dtolnay/thiserror/compare/1.0.35...1.0.36)

-   Documentation improvements ([#&#8203;195](https://togithub.com/dtolnay/thiserror/issues/195), thanks [@&#8203;matklad](https://togithub.com/matklad))

### [`v1.0.35`](https://togithub.com/dtolnay/thiserror/releases/tag/1.0.35)

[Compare Source](https://togithub.com/dtolnay/thiserror/compare/1.0.34...1.0.35)

-   More work on integrating [std::any::Provider](https://doc.rust-lang.org/std/any/trait.Provider.html) 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 ([#&#8203;185](https://togithub.com/dtolnay/thiserror/issues/185))

### [`v1.0.34`](https://togithub.com/dtolnay/thiserror/releases/tag/1.0.34)

[Compare Source](https://togithub.com/dtolnay/thiserror/compare/1.0.33...1.0.34)

-   Tweak "generic member access" based Backtrace implementation ([#&#8203;184](https://togithub.com/dtolnay/thiserror/issues/184))

### [`v1.0.33`](https://togithub.com/dtolnay/thiserror/releases/tag/1.0.33)

[Compare Source](https://togithub.com/dtolnay/thiserror/compare/1.0.32...1.0.33)

-   Expose backtraces via the new "generic member access" API on the Error trait ([rust-lang/rust#99301, [rust-lang/rust#96024)

</details>

<details>
<summary>tokio-rs/tokio</summary>

### [`v1.21.2`](https://togithub.com/tokio-rs/tokio/releases/tag/tokio-1.21.2)

[Compare Source](https://togithub.com/tokio-rs/tokio/compare/tokio-1.21.1...tokio-1.21.2)

### 1.21.2 (September 27, 2022)

This release removes the dependency on the `once_cell` crate to restore the MSRV of 1.21.x, which is the latest minor version at the time of release. ([#&#8203;5048])

[#&#8203;5048]: https://togithub.com/tokio-rs/tokio/pull/5048

</details>

<details>
<summary>tokio-rs/tracing</summary>

### [`v0.1.37`](https://togithub.com/tokio-rs/tracing/releases/tag/tracing-0.1.37)

[Compare Source](https://togithub.com/tokio-rs/tracing/compare/tracing-0.1.36...tracing-0.1.37)

This release of `tracing` incorporates changes from `tracing-core`
[v0.1.30][core-0.1.30] and `tracing-attributes` [v0.1.23][attrs-0.1.23],
including the new `Subscriber::on_register_dispatch` method for performing late
initialization after a `Subscriber` is registered as a `Dispatch`, and bugfixes
for the `#[instrument]` attribute. Additionally, it fixes instances of the
`bare_trait_objects` lint, which is now a warning on `tracing`'s MSRV and will
become an error in the next edition.

##### Fixed

-   **attributes**: Incorrect handling of inner attributes in `#[instrument]`ed
    functions ([#&#8203;2307])
-   **attributes**: Incorrect location of compiler diagnostic spans generated for
    type errors in `#[instrument]`ed `async fn`s ([#&#8203;2270])
-   **attributes**: Updated `syn` dependency to fix compilation with `-Z
    minimal-versions` ([#&#8203;2246])
-   `bare_trait_objects` warning in `valueset!` macro expansion ([#&#8203;2308])

##### Added

-   **core**: `Subscriber::on_register_dispatch` method ([#&#8203;2269])
-   **core**: `WeakDispatch` type and `Dispatch::downgrade()` function ([#&#8203;2293])

##### Changed

-   `tracing-core`: updated to [0.1.30][core-0.1.30]
-   `tracing-attributes`: updated to [0.1.23][attrs-0.1.23]

##### Documented

-   Added [`tracing-web`][tracing-web] and [`reqwest-tracing`][reqwest-tracing] to related crates ([#&#8203;2283],
    [#&#8203;2331])

Thanks to new contributors [@&#8203;compiler-errors](https://togithub.com/compiler-errors), [@&#8203;e-nomem](https://togithub.com/e-nomem), [@&#8203;WorldSEnder](https://togithub.com/WorldSEnder), [@&#8203;Xiami2012](https://togithub.com/Xiami2012),
and [@&#8203;tl-rodrigo-gryzinski](https://togithub.com/tl-rodrigo-gryzinski), as well as [@&#8203;jswrenn](https://togithub.com/jswrenn) and [@&#8203;CAD97](https://togithub.com/CAD97), for contributing to
this release!

[core-0.1.30]: https://togithub.com/tokio-rs/tracing/releases/tag/tracing-core-0.1.30

[attrs-0.1.23]: https://togithub.com/tokio-rs/tracing/releases/tag/tracing-attributes-0.1.23

[`tracing-web`]: https://crates.io/crates/tracing-web/

[`reqwest-tracing`]: https://crates.io/crates/reqwest-tracing/

[#&#8203;2246]: https://togithub.com/tokio-rs/tracing/pull/2246

[#&#8203;2269]: https://togithub.com/tokio-rs/tracing/pull/2269

[#&#8203;2283]: https://togithub.com/tokio-rs/tracing/pull/2283

[#&#8203;2270]: https://togithub.com/tokio-rs/tracing/pull/2270

[#&#8203;2293]: https://togithub.com/tokio-rs/tracing/pull/2293

[#&#8203;2307]: https://togithub.com/tokio-rs/tracing/pull/2307

[#&#8203;2308]: https://togithub.com/tokio-rs/tracing/pull/2308

[#&#8203;2331]: https://togithub.com/tokio-rs/tracing/pull/2331

</details>

---

### Configuration

📅 **Schedule**: Branch creation - "after 5:00 and before 6:00 every weekday" in timezone Europe/Berlin, 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.

👻 **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://togithub.com/renovatebot/renovate/discussions) if that's undesired.

---

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

---

This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://app.renovatebot.com/dashboard#github/stackabletech/operator-rs).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzMi4yMTcuMCIsInVwZGF0ZWRJblZlciI6IjM0LjE0LjAifQ==-->
@robamler
Copy link
Contributor

Not sure if this has been proposed before, but maybe an alternative to "fully qualified method call but with deref/autoref" could be that, in case of an ambiguity, trait method resolution favors traits that were introduced in inner scopes.

Currently, the following code doesn't compile:

fn foo(x: u32, formatter: &mut core::fmt::Formatter) {
    use core::fmt::{Display, Debug};

    { // Imagine this block was generated by a macro that only needs `Display` but not `Debug`.
        use core::fmt::Display; // currently leads to a warning: "the item `Display` is imported redundantly"
        x.fmt(formatter); // currently leads to an error: "multiple `fmt` found"
    }
}

The proposal would be to allow the above code, and to resolve x.fmt(formatter) to core::fmt::Display::fmt(&x, formatter) since Display was used in a strictly narrower scope than Debug.

I don't think this would change any behavior in code that currently compiles since it would only disambiguate cases that are currently ambiguous. And it would allow macro authors to simply introduce a new scope and use any traits that their macros will need (this wouldn't leak any identifies to the outer scope since, already today, those uses are scoped to the inner block).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
C-tracking-issue Category: A tracking issue for an RFC or an unstable feature. T-libs-api Relevant to the library API team, which will review and decide on the PR/issue.
Projects
None yet
Development

No branches or pull requests

4 participants