fix #105028, Only suggest removing struct field from destructive binding in shorthand scenario
This commit is contained in:
parent
41e0363055
commit
0e24cee063
3 changed files with 37 additions and 2 deletions
|
@ -1548,7 +1548,13 @@ impl<'tcx> Liveness<'_, 'tcx> {
|
||||||
.or_insert_with(|| (ln, var, vec![id_and_sp]));
|
.or_insert_with(|| (ln, var, vec![id_and_sp]));
|
||||||
});
|
});
|
||||||
|
|
||||||
let can_remove = matches!(&pat.kind, hir::PatKind::Struct(_, _, true));
|
let can_remove = match pat.kind {
|
||||||
|
hir::PatKind::Struct(_, fields, true) => {
|
||||||
|
// if all fields are shorthand, remove the struct field, otherwise, mark with _ as prefix
|
||||||
|
fields.iter().all(|f| f.is_shorthand)
|
||||||
|
}
|
||||||
|
_ => false,
|
||||||
|
};
|
||||||
|
|
||||||
for (_, (ln, var, hir_ids_and_spans)) in vars {
|
for (_, (ln, var, hir_ids_and_spans)) in vars {
|
||||||
if self.used_on_entry(ln, var) {
|
if self.used_on_entry(ln, var) {
|
||||||
|
|
|
@ -14,4 +14,19 @@ fn use_foo(x: Foo) -> i32 {
|
||||||
return foo;
|
return foo;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// issue #105028, suggest removing the field only for shorthand
|
||||||
|
fn use_match(x: Foo) {
|
||||||
|
match x {
|
||||||
|
Foo { foo: unused, .. } => { //~ WARNING unused variable
|
||||||
|
//~| help: if this is intentional, prefix it with an underscore
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
match x {
|
||||||
|
Foo { foo, .. } => { //~ WARNING unused variable
|
||||||
|
//~| help: try removing the field
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn main() {}
|
fn main() {}
|
||||||
|
|
|
@ -8,5 +8,19 @@ LL | let Foo { foo, bar, .. } = x;
|
||||||
|
|
|
|
||||||
= note: `#[warn(unused_variables)]` on by default
|
= note: `#[warn(unused_variables)]` on by default
|
||||||
|
|
||||||
warning: 1 warning emitted
|
warning: unused variable: `unused`
|
||||||
|
--> $DIR/try-removing-the-field.rs:20:20
|
||||||
|
|
|
||||||
|
LL | Foo { foo: unused, .. } => {
|
||||||
|
| ^^^^^^ help: if this is intentional, prefix it with an underscore: `_unused`
|
||||||
|
|
||||||
|
warning: unused variable: `foo`
|
||||||
|
--> $DIR/try-removing-the-field.rs:26:15
|
||||||
|
|
|
||||||
|
LL | Foo { foo, .. } => {
|
||||||
|
| ^^^-
|
||||||
|
| |
|
||||||
|
| help: try removing the field
|
||||||
|
|
||||||
|
warning: 3 warnings emitted
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue