- let mut suggestions = Vec::new();
-
- for element_pat in itertools::chain(before, after) {
- if let PatKind::Binding(BindingAnnotation::REF, _, ident, None) = element_pat.kind {
- // `&[..., ref ident, ...]`
- // ^^^^
- let span = element_pat.span.until(ident.span);
- suggestions.push((span, String::new()));
- } else {
- return;
- }
- }
+ check_subpatterns(
+ cx,
+ "dereferencing a slice pattern where every element takes a reference",
+ ref_pat,
+ pat,
+ itertools::chain(before, after),
+ );
+ },
+ PatKind::Tuple(subpatterns, _) | PatKind::TupleStruct(_, subpatterns, _) => {
+ check_subpatterns(
+ cx,
+ "dereferencing a tuple pattern where every element takes a reference",
+ ref_pat,
+ pat,
+ subpatterns,
+ );
+ },
+ PatKind::Struct(_, fields, _) => {
+ check_subpatterns(
+ cx,
+ "dereferencing a struct pattern where every field's pattern takes a reference",
+ ref_pat,
+ pat,
+ fields.iter().map(|field| field.pat),
+ );
+ },
+ _ => {},
+ }
+ }
+}