- Notifications
You must be signed in to change notification settings - Fork 1.8k
Open
Labels
C-bugCategory: Clippy is not doing the correct thingCategory: Clippy is not doing the correct thingI-false-positiveIssue: The lint was triggered on code it shouldn't haveIssue: The lint was triggered on code it shouldn't have
Description
Summary
A common pattern in Rust is forwarding the members of an enum to their inner implementation:
impl Display for FetchUrl { fn fmt(&self, f: &mut Formatter) -> std::fmt::Result { match self { Self::Index(index) => Display::fmt(index, f), Self::Realm(realm) => Display::fmt(realm, f), } } }
impl Debug for OptionSet { fn fmt(&self, f: &mut Formatter) -> std::fmt::Result { Display::fmt(self, f) } }
We use the fully-qualified Display::fmt
or Debug::fmt
to avoid ambiguity over which trait's method we are calling.
When using the same pattern for Deref
on nightly, explicit_deref_methods
triggers:
impl Deref for SyncEnvironment { type Target = PythonEnvironment; fn deref(&self) -> &Self::Target { match self { Self::Project(environment) => Deref::deref(environment), Self::Script(environment) => Deref::deref(environment), } } }
The lint description says:
This lint excludes all of:
let _ = d.unwrap().deref(); let _ = Foo::deref(&foo); let _ = <Foo as Deref>::deref(&foo);
Maybe this should be extended to Deref::deref
, especially in Deref
impls?
Lint Name
explicit_deref_methods
Reproducer
I tried this code:
impl Deref for SyncEnvironment { type Target = PythonEnvironment; fn deref(&self) -> &Self::Target { match self { Self::Project(environment) => Deref::deref(environment), Self::Script(environment) => Deref::deref(environment), } } }
I saw this happen:
warning: explicit `deref` method call --> crates/uv/src/commands/project/sync.rs:549:42 | 549 | Self::Script(environment) => Deref::deref(environment), | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `&**environment` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#explicit_deref_methods = note: `-W clippy::explicit-deref-methods` implied by `-W clippy::pedantic` = help: to override `-W clippy::pedantic` add `#[allow(clippy::explicit_deref_methods)]`
I expected to see this happen:
No error.
Version
rustc 1.90.0-nightly (4b55fe199 2025-08-01) binary: rustc commit-hash: 4b55fe199cfe9c710555a5af7f2a49491ad38254 commit-date: 2025-08-01 host: x86_64-unknown-linux-gnu release: 1.90.0-nightly LLVM version: 20.1.8
Additional Labels
No response
Metadata
Metadata
Assignees
Labels
C-bugCategory: Clippy is not doing the correct thingCategory: Clippy is not doing the correct thingI-false-positiveIssue: The lint was triggered on code it shouldn't haveIssue: The lint was triggered on code it shouldn't have