-
Notifications
You must be signed in to change notification settings - Fork 12.9k
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
Adjust and slightly generalize operator error suggestion #101424
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.