-
Notifications
You must be signed in to change notification settings - Fork 13.4k
Adjust and slightly generalize operator error suggestion #101424
New issue
Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? # to your account
Conversation
r? @TaKO8Ki (rust-highfive has picked a reviewer for you, use r? to override) |
311410d
to
dadef26
Compare
IsAssign::Yes => "=", | ||
IsAssign::No => "", | ||
}, | ||
lhs_deref_ty.peel_refs(), |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Peeling the type here is actually wrong -- when we have /* &&i32 */ + /* i32 */
and we deref the LHS, we are adding &i32
and i32
, not i32
and i32
.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks good to me. r=me after a nit is addressed or not.
), | ||
}; | ||
let output_def_id = trait_def_id.map_or(None, |def_id| { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
nit: Option::and_then
can simplify this.
let output_def_id = trait_def_id.map_or(None, |def_id| { | |
let output_def_id = trait_def_id.and_then(|def_id| { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Do you mean is_some_and
?
edit: I was looking at the wrong map_or
in that file... 🤦 you're right!
☔ The latest upstream changes (presumably #101432) made this pull request unmergeable. Please resolve the merge conflicts. |
dadef26
to
48281b0
Compare
@bors r=TaKO8Ki |
… r=TaKO8Ki Adjust and slightly generalize operator error suggestion (in no particular order) * Stop passing around a whole extra `ProjectionPredicate` * Add spaces around `=` in `Trait<..., Output = Ty>` suggestion * Some code clean-ups, including * add `lang_item_for_op` to turn a `Op` into a `DefId` * avoid `SourceMap` because we don't really need to render an expr * Remove `TypeParamVisitor` in favor of just checking `ty.has_param_types_or_consts` -- this acts a bit differently, but shouldn't cause erroneous suggestions (actually might generalize them a bit) * We now suggest `Output = Ty` in the `where` clause suggestion when we fail to add `Struct<T>` and `T`. I can split this out into more PRs if needed, but they're all just miscellaneous generalizations, changes, and nitpicks I saw when messing with this operator code.
Rollup of 7 pull requests Successful merges: - rust-lang#98933 (Opaque types' generic params do not imply anything about their hidden type's lifetimes) - rust-lang#101041 (translations(rustc_session): migrates rustc_session to use SessionDiagnostic - Pt. 2) - rust-lang#101424 (Adjust and slightly generalize operator error suggestion) - rust-lang#101496 (Allow lower_lifetime_binder receive a closure) - rust-lang#101501 (Allow lint passes to be bound by `TyCtxt`) - rust-lang#101515 (Recover from typo where == is used in place of =) - rust-lang#101545 (Remove unnecessary `PartialOrd` and `Ord`) Failed merges: r? `@ghost` `@rustbot` modify labels: rollup
Rollup of 7 pull requests Successful merges: - rust-lang#98933 (Opaque types' generic params do not imply anything about their hidden type's lifetimes) - rust-lang#101041 (translations(rustc_session): migrates rustc_session to use SessionDiagnostic - Pt. 2) - rust-lang#101424 (Adjust and slightly generalize operator error suggestion) - rust-lang#101496 (Allow lower_lifetime_binder receive a closure) - rust-lang#101501 (Allow lint passes to be bound by `TyCtxt`) - rust-lang#101515 (Recover from typo where == is used in place of =) - rust-lang#101545 (Remove unnecessary `PartialOrd` and `Ord`) Failed merges: r? `@ghost` `@rustbot` modify labels: rollup
(in no particular order)
ProjectionPredicate
=
inTrait<..., Output = Ty>
suggestionlang_item_for_op
to turn aOp
into aDefId
SourceMap
because we don't really need to render an exprTypeParamVisitor
in favor of just checkingty.has_param_types_or_consts
-- this acts a bit differently, but shouldn't cause erroneous suggestions (actually might generalize them a bit)Output = Ty
in thewhere
clause suggestion when we fail to addStruct<T>
andT
.I can split this out into more PRs if needed, but they're all just miscellaneous generalizations, changes, and nitpicks I saw when messing with this operator code.