1
1
#![ allow( clippy:: wildcard_imports, clippy:: enum_glob_use) ]
2
2
3
- use clippy_utils:: ast_utils:: { eq_field_pat, eq_id, eq_pat, eq_path} ;
3
+ use clippy_utils:: ast_utils:: { eq_field_pat, eq_id, eq_pat, eq_path, eq_maybe_qself } ;
4
4
use clippy_utils:: diagnostics:: span_lint_and_then;
5
5
use clippy_utils:: { meets_msrv, msrvs, over} ;
6
6
use rustc_ast:: mut_visit:: * ;
@@ -273,16 +273,16 @@ fn transform_with_focus_on_idx(alternatives: &mut Vec<P<Pat>>, focus_idx: usize)
273
273
|k| always_pat ! ( k, Tuple ( ps) => ps) ,
274
274
) ,
275
275
// Transform `S(pre, x, post) | ... | S(pre, y, post)` into `S(pre, x | y, post)`.
276
- TupleStruct ( path1, ps1) => extend_with_matching_product (
276
+ TupleStruct ( qself1 , path1, ps1) => extend_with_matching_product (
277
277
ps1, start, alternatives,
278
278
|k, ps1, idx| matches ! (
279
279
k,
280
- TupleStruct ( path2, ps2) if eq_path( path1, path2) && eq_pre_post( ps1, ps2, idx)
280
+ TupleStruct ( qself2 , path2, ps2) if eq_maybe_qself ( qself1 , qself2 ) && eq_path( path1, path2) && eq_pre_post( ps1, ps2, idx)
281
281
) ,
282
- |k| always_pat ! ( k, TupleStruct ( _, ps) => ps) ,
282
+ |k| always_pat ! ( k, TupleStruct ( _, _ , ps) => ps) ,
283
283
) ,
284
284
// Transform a record pattern `S { fp_0, ..., fp_n }`.
285
- Struct ( path1, fps1, rest1) => extend_with_struct_pat ( path1, fps1, * rest1, start, alternatives) ,
285
+ Struct ( qself1 , path1, fps1, rest1) => extend_with_struct_pat ( qself1 , path1, fps1, * rest1, start, alternatives) ,
286
286
} ;
287
287
288
288
alternatives[ focus_idx] . kind = focus_kind;
@@ -294,6 +294,7 @@ fn transform_with_focus_on_idx(alternatives: &mut Vec<P<Pat>>, focus_idx: usize)
294
294
/// So when we fixate on some `ident_k: pat_k`, we try to find `ident_k` in the other pattern
295
295
/// and check that all `fp_i` where `i ∈ ((0...n) \ k)` between two patterns are equal.
296
296
fn extend_with_struct_pat (
297
+ qself1 : & Option < ast:: QSelf > ,
297
298
path1 : & ast:: Path ,
298
299
fps1 : & mut Vec < ast:: PatField > ,
299
300
rest1 : bool ,
@@ -306,8 +307,9 @@ fn extend_with_struct_pat(
306
307
start,
307
308
alternatives,
308
309
|k| {
309
- matches ! ( k, Struct ( path2, fps2, rest2)
310
+ matches ! ( k, Struct ( qself2 , path2, fps2, rest2)
310
311
if rest1 == * rest2 // If one struct pattern has `..` so must the other.
312
+ && eq_maybe_qself( qself1, qself2)
311
313
&& eq_path( path1, path2)
312
314
&& fps1. len( ) == fps2. len( )
313
315
&& fps1. iter( ) . enumerate( ) . all( |( idx_1, fp1) | {
@@ -323,7 +325,7 @@ fn extend_with_struct_pat(
323
325
} ) )
324
326
} ,
325
327
// Extract `p2_k`.
326
- |k| always_pat ! ( k, Struct ( _, mut fps, _) => fps. swap_remove( pos_in_2. take( ) . unwrap( ) ) . pat) ,
328
+ |k| always_pat ! ( k, Struct ( _, _ , mut fps, _) => fps. swap_remove( pos_in_2. take( ) . unwrap( ) ) . pat) ,
327
329
) ;
328
330
extend_with_tail_or ( & mut fps1[ idx] . pat , tail_or)
329
331
} )
0 commit comments