Add a lint for not using field pattern shorthands

Closes #17792.
@P1start I see! My bad, I completely forgot about DefLocal. I think this should work:

```rust
for fieldpat in v.iter().
                                 .filter(|fieldpat| def_map.find(&fieldpat.node.pat.id) == Some(&def::DefLocal(fieldpat.node.pat.id)))
                                 .filter(|fieldpat| !fieldpat.node.is_shorthand)
{
                    match fieldpat.node.pat.node {
```

(no need for `if fieldpat.node.is_shorthand { continue }`).