Use MIR body to identify more "default equivalent" calls for derivable_impls
#13988
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
When looking for
Default
impls that could be derived, we look at the body of theirfn default()
and if it is an fn call or literal we check if they are equivalent to what#[derive(Default)]
would have used.Now, when checking those fn calls in the
fn default()
body, we also compare against the corresponding type'sDefault::default
body to see if our call is equivalent to that one.For example, given
<S as Default>::default()
andS::new()
are considered equivalent. Given that, if the user also writesthe
derivable_impls
lint will now trigger.changelog: [
derivable_impls
]: detect when aDefault
impl is using the same fn call that that type'sDefault::default
calls