-
Notifications
You must be signed in to change notification settings - Fork 1.6k
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
Suggestion does not compile: use self with associated types #4140
Labels
C-bug
Category: Clippy is not doing the correct thing
I-suggestion-causes-error
Issue: The suggestions provided by this Lint cause an ICE/error when applied
L-suggestion
Lint: Improving, adding or fixing lint suggestions
Comments
lopopolo
changed the title
Suggestion does not compile: use self with type parameters
Suggestion does not compile: use self with associated types
May 25, 2019
This is a more minimal and self-contained example: #![deny(clippy::all, clippy::pedantic)]
pub struct Error<From, To> {
_from: From,
_too: To,
}
pub trait From<T> {
type From;
type To;
fn from(value: T) -> Self;
}
pub trait TryFrom<T>
where
Self: Sized,
{
type From;
type To;
fn try_from(value: T) -> Result<Self, Error<Self::From, Self::To>>;
}
impl<F, T> TryFrom<F> for T
where
T: From<F>,
{
type From = T::From;
type To = T::To;
fn try_from(value: F) -> Result<Self, Error<Self::From, Self::To>> {
Ok(From::from(value))
}
}
impl From<bool> for i64 {
type From = bool;
type To = Self;
fn from(value: bool) -> Self {
if value {
100
} else {
0
}
}
}
fn main() {} Following clippy's suggestions results in this compilation error:
|
It seems the way to make the compiler and clippy happy is to do this: impl<F, T> TryFrom<F> for T
where
T: From<F>,
{
type From = <Self as From<F>>::From;
type To = <Self as From<F>>::To;
fn try_from(value: F) -> Result<Self, Error<Self::From, Self::To>> {
Ok(From::from(value))
}
} |
flip1995
added
C-bug
Category: Clippy is not doing the correct thing
I-suggestion-causes-error
Issue: The suggestions provided by this Lint cause an ICE/error when applied
labels
May 28, 2019
lopopolo
added a commit
to artichoke/ferrocarril
that referenced
this issue
Jul 4, 2019
phansch
added
the
L-suggestion
Lint: Improving, adding or fixing lint suggestions
label
Aug 24, 2019
tnielens
added a commit
to tnielens/rust-clippy
that referenced
this issue
Apr 26, 2020
tnielens
added a commit
to tnielens/rust-clippy
that referenced
this issue
Apr 27, 2020
flip1995
pushed a commit
to flip1995/rust-clippy
that referenced
this issue
Apr 29, 2020
bors
added a commit
that referenced
this issue
Oct 13, 2020
…itive, r=<try> rework use_self impl based on ty::Ty comparison #3410 `use_self` lint refactoring. As suggested by `@eddyb` , implement the lint based on `ty::Ty` comparison instead of `hir::Path` checks. This PR introduces negative regressions. The cases were covered in the previous implementation. See the test file. It fixes #3410, #2843, #3859, #4734 and #4140. Should fix #4143 (example doesn't compile). #4305 false positive seems also fixed but the uitest fails to compile the unmodified test case in `use_self.rs.fixed`. Implements #5078. Generally the implementation checks are done at mir level and offers higher guarantees against false positives. It is probably fixing other unreported false positives. changelog: fix use_self generics false positives
bors
added a commit
that referenced
this issue
Jan 19, 2021
Rework use_self impl based on ty::Ty comparison #3410 | Take 2 This builds on top of #5531 I already reviewed and approved the commits by `@montrivo.` So only the review of my commits should be necessary. I would also appreciate your review `@montrivo,` since you are familiar with the challenges here. Fixes #3410 and Fixes #4143 (same problem) Fixes #2843 Fixes #3859 Fixes #4734 and fixes #6221 Fixes #4305 Fixes #5078 (even at expression level now 🎉) Fixes #3881 and Fixes #4887 (same problem) Fixes #3909 Not yet: #4140 (test added) All the credit for the fixes goes to `@montrivo.` I only refactored and copy and pasted his code. changelog: rewrite [`use_self`] lint and fix multiple (8) FPs. One to go.
bors
added a commit
that referenced
this issue
Feb 10, 2021
Rework use_self impl based on ty::Ty comparison #3410 | Take 2 This builds on top of #5531 I already reviewed and approved the commits by `@montrivo.` So only the review of my commits should be necessary. I would also appreciate your review `@montrivo,` since you are familiar with the challenges here. Fixes #3410 and Fixes #4143 (same problem) Fixes #2843 Fixes #3859 Fixes #4734 and fixes #6221 Fixes #4305 Fixes #5078 (even at expression level now 🎉) Fixes #3881 and Fixes #4887 (same problem) Fixes #3909 Not yet: #4140 (test added) All the credit for the fixes goes to `@montrivo.` I only refactored and copy and pasted his code. changelog: rewrite [`use_self`] lint and fix multiple (8) FPs. One to go.
bors
added a commit
that referenced
this issue
Feb 12, 2021
Rework use_self impl based on ty::Ty comparison #3410 | Take 2 This builds on top of #5531 I already reviewed and approved the commits by `@montrivo.` So only the review of my commits should be necessary. I would also appreciate your review `@montrivo,` since you are familiar with the challenges here. Fixes #3410 and Fixes #4143 (same problem) Fixes #2843 Fixes #3859 Fixes #4734 and fixes #6221 Fixes #4305 Fixes #5078 (even at expression level now 🎉) Fixes #3881 and Fixes #4887 (same problem) Fixes #3909 Not yet: #4140 (test added) All the credit for the fixes goes to `@montrivo.` I only refactored and copy and pasted his code. changelog: rewrite [`use_self`] lint and fix multiple (8) FPs. One to go.
Really like the |
@rustbot claim |
4140 |
kraktus
added a commit
to kraktus/rust-clippy
that referenced
this issue
Oct 26, 2022
Previously the following wrong suggestion was given ```rust impl Error for std::fmt::Error { fn custom<T: std::fmt::Display>(_msg: T) -> Self { - std::fmt::Error // Should lint + Self::Error // Should lint } } ``` Also remove known problem line related to rust-lang#4140 since it's been closed, and refactor the lint
kraktus
added a commit
to kraktus/rust-clippy
that referenced
this issue
Oct 26, 2022
Previously the following wrong suggestion was given ```rust impl Error for std::fmt::Error { fn custom<T: std::fmt::Display>(_msg: T) -> Self { - std::fmt::Error // Should lint + Self::Error // Should lint } } ``` Also remove known problem line related to rust-lang#4140 since it's been closed, and refactor the lint
bors
added a commit
that referenced
this issue
Oct 27, 2022
[`use_self`] fix suggestion when full path to struct was given Previously the following wrong suggestion was given ```rust impl Error for std::fmt::Error { fn custom<T: std::fmt::Display>(_msg: T) -> Self { - std::fmt::Error // Should lint + Self::Error // Should lint } } ``` Also remove known problem line related to #4140 since it's been closed, and refactor the lint changelog: [`use_self`] fix suggestion when full path to struct was given
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Labels
C-bug
Category: Clippy is not doing the correct thing
I-suggestion-causes-error
Issue: The suggestions provided by this Lint cause an ICE/error when applied
L-suggestion
Lint: Improving, adding or fixing lint suggestions
I have two traits that have the same associated types that are shaped like
From
andTryFrom
. I provide a defaultTryFrom
implementation for types that implementFrom
. Clippy suggests I modify the code below to replace theTo::From
andTo::To
references withSelf::From
andSelf::To
, which causes a recursive overflow.The text was updated successfully, but these errors were encountered: