mirror of
https://github.com/rust-lang/rust.git
synced 2025-04-28 11:07:42 +00:00
Rollup merge of #99593 - TaKO8Ki:suggest-removing-tuple-struct-field, r=compiler-errors
Suggest removing the tuple struct field for the unwrapped value fixes #99416
This commit is contained in:
commit
d89e99a805
@ -287,6 +287,21 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
|||||||
expr_ty: Ty<'tcx>,
|
expr_ty: Ty<'tcx>,
|
||||||
) {
|
) {
|
||||||
if let ty::Adt(expected_adt, substs) = expected.kind() {
|
if let ty::Adt(expected_adt, substs) = expected.kind() {
|
||||||
|
if let hir::ExprKind::Field(base, ident) = expr.kind {
|
||||||
|
let base_ty = self.typeck_results.borrow().expr_ty(base);
|
||||||
|
if self.can_eq(self.param_env, base_ty, expected).is_ok()
|
||||||
|
&& let Some(base_span) = base.span.find_ancestor_inside(expr.span)
|
||||||
|
{
|
||||||
|
err.span_suggestion_verbose(
|
||||||
|
expr.span.with_lo(base_span.hi()),
|
||||||
|
format!("consider removing the tuple struct field `{ident}`"),
|
||||||
|
"",
|
||||||
|
Applicability::MaybeIncorrect,
|
||||||
|
);
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// If the expression is of type () and it's the return expression of a block,
|
// If the expression is of type () and it's the return expression of a block,
|
||||||
// we suggest adding a separate return expression instead.
|
// we suggest adding a separate return expression instead.
|
||||||
// (To avoid things like suggesting `Ok(while .. { .. })`.)
|
// (To avoid things like suggesting `Ok(while .. { .. })`.)
|
||||||
|
@ -0,0 +1,17 @@
|
|||||||
|
// run-rustfix
|
||||||
|
|
||||||
|
macro_rules! my_wrapper {
|
||||||
|
($expr:expr) => { MyWrapper($expr) }
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct MyWrapper(u32);
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let value = MyWrapper(123);
|
||||||
|
some_fn(value); //~ ERROR mismatched types
|
||||||
|
some_fn(my_wrapper!(123)); //~ ERROR mismatched types
|
||||||
|
}
|
||||||
|
|
||||||
|
fn some_fn(wrapped: MyWrapper) {
|
||||||
|
drop(wrapped);
|
||||||
|
}
|
@ -0,0 +1,17 @@
|
|||||||
|
// run-rustfix
|
||||||
|
|
||||||
|
macro_rules! my_wrapper {
|
||||||
|
($expr:expr) => { MyWrapper($expr) }
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct MyWrapper(u32);
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let value = MyWrapper(123);
|
||||||
|
some_fn(value.0); //~ ERROR mismatched types
|
||||||
|
some_fn(my_wrapper!(123).0); //~ ERROR mismatched types
|
||||||
|
}
|
||||||
|
|
||||||
|
fn some_fn(wrapped: MyWrapper) {
|
||||||
|
drop(wrapped);
|
||||||
|
}
|
@ -0,0 +1,41 @@
|
|||||||
|
error[E0308]: mismatched types
|
||||||
|
--> $DIR/suggest-removing-tulpe-struct-field.rs:11:13
|
||||||
|
|
|
||||||
|
LL | some_fn(value.0);
|
||||||
|
| ------- ^^^^^^^ expected struct `MyWrapper`, found `u32`
|
||||||
|
| |
|
||||||
|
| arguments to this function are incorrect
|
||||||
|
|
|
||||||
|
note: function defined here
|
||||||
|
--> $DIR/suggest-removing-tulpe-struct-field.rs:15:4
|
||||||
|
|
|
||||||
|
LL | fn some_fn(wrapped: MyWrapper) {
|
||||||
|
| ^^^^^^^ ------------------
|
||||||
|
help: consider removing the tuple struct field `0`
|
||||||
|
|
|
||||||
|
LL - some_fn(value.0);
|
||||||
|
LL + some_fn(value);
|
||||||
|
|
|
||||||
|
|
||||||
|
error[E0308]: mismatched types
|
||||||
|
--> $DIR/suggest-removing-tulpe-struct-field.rs:12:13
|
||||||
|
|
|
||||||
|
LL | some_fn(my_wrapper!(123).0);
|
||||||
|
| ------- ^^^^^^^^^^^^^^^^^^ expected struct `MyWrapper`, found `u32`
|
||||||
|
| |
|
||||||
|
| arguments to this function are incorrect
|
||||||
|
|
|
||||||
|
note: function defined here
|
||||||
|
--> $DIR/suggest-removing-tulpe-struct-field.rs:15:4
|
||||||
|
|
|
||||||
|
LL | fn some_fn(wrapped: MyWrapper) {
|
||||||
|
| ^^^^^^^ ------------------
|
||||||
|
help: consider removing the tuple struct field `0`
|
||||||
|
|
|
||||||
|
LL - some_fn(my_wrapper!(123).0);
|
||||||
|
LL + some_fn(my_wrapper!(123));
|
||||||
|
|
|
||||||
|
|
||||||
|
error: aborting due to 2 previous errors
|
||||||
|
|
||||||
|
For more information about this error, try `rustc --explain E0308`.
|
Loading…
Reference in New Issue
Block a user