mirror of
https://github.com/rust-lang/rust-clippy
synced 2025-02-17 14:38:46 +00:00
Refactor to check for multiple reference patterns
This commit is contained in:
parent
22144c02c2
commit
fc32425521
3 changed files with 7 additions and 96 deletions
|
@ -1187,7 +1187,7 @@ where
|
|||
'b: 'a,
|
||||
I: Clone + Iterator<Item = &'a Pat<'b>>,
|
||||
{
|
||||
if !has_only_ref_pats(pats.clone()) {
|
||||
if !has_multiple_ref_pats(pats.clone()) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -1693,12 +1693,12 @@ fn is_ref_some_arm(cx: &LateContext<'_>, arm: &Arm<'_>) -> Option<BindingAnnotat
|
|||
None
|
||||
}
|
||||
|
||||
fn has_only_ref_pats<'a, 'b, I>(pats: I) -> bool
|
||||
fn has_multiple_ref_pats<'a, 'b, I>(pats: I) -> bool
|
||||
where
|
||||
'b: 'a,
|
||||
I: Iterator<Item = &'a Pat<'b>>,
|
||||
{
|
||||
let mut at_least_one_is_true = false;
|
||||
let mut ref_count = 0;
|
||||
for opt in pats.map(|pat| match pat.kind {
|
||||
PatKind::Ref(..) => Some(true), // &-patterns
|
||||
PatKind::Wild => Some(false), // an "anything" wildcard is also fine
|
||||
|
@ -1706,13 +1706,13 @@ where
|
|||
}) {
|
||||
if let Some(inner) = opt {
|
||||
if inner {
|
||||
at_least_one_is_true = true;
|
||||
ref_count += 1;
|
||||
}
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
at_least_one_is_true
|
||||
ref_count > 1
|
||||
}
|
||||
|
||||
pub fn overlapping<T>(ranges: &[SpannedRange<T>]) -> Option<(&SpannedRange<T>, &SpannedRange<T>)>
|
||||
|
|
|
@ -110,23 +110,6 @@ LL | | _ => false,
|
|||
LL | | };
|
||||
| |_________^ help: try this: `matches!(&val, &Some(ref _a))`
|
||||
|
||||
error: you don't need to add `&` to both the expression and the patterns
|
||||
--> $DIR/match_expr_like_matches_macro.rs:166:20
|
||||
|
|
||||
LL | let _res = match &val {
|
||||
| ____________________^
|
||||
LL | | &Some(ref _a) => true,
|
||||
LL | | _ => false,
|
||||
LL | | };
|
||||
| |_________^
|
||||
|
|
||||
= note: `-D clippy::match-ref-pats` implied by `-D warnings`
|
||||
help: try
|
||||
|
|
||||
LL ~ let _res = match val {
|
||||
LL ~ Some(ref _a) => true,
|
||||
|
|
||||
|
||||
error: match expression looks like `matches!` macro
|
||||
--> $DIR/match_expr_like_matches_macro.rs:178:20
|
||||
|
|
||||
|
@ -137,21 +120,5 @@ LL | | _ => false,
|
|||
LL | | };
|
||||
| |_________^ help: try this: `matches!(&val, &Some(ref _a))`
|
||||
|
||||
error: you don't need to add `&` to both the expression and the patterns
|
||||
--> $DIR/match_expr_like_matches_macro.rs:178:20
|
||||
|
|
||||
LL | let _res = match &val {
|
||||
| ____________________^
|
||||
LL | | &Some(ref _a) => true,
|
||||
LL | | _ => false,
|
||||
LL | | };
|
||||
| |_________^
|
||||
|
|
||||
help: try
|
||||
|
|
||||
LL ~ let _res = match val {
|
||||
LL ~ Some(ref _a) => true,
|
||||
|
|
||||
|
||||
error: aborting due to 14 previous errors
|
||||
error: aborting due to 12 previous errors
|
||||
|
||||
|
|
|
@ -15,21 +15,6 @@ LL ~ Some(v) => println!("{:?}", v),
|
|||
LL ~ None => println!("none"),
|
||||
|
|
||||
|
||||
error: you don't need to add `&` to all patterns
|
||||
--> $DIR/match_ref_pats.rs:18:5
|
||||
|
|
||||
LL | / match tup {
|
||||
LL | | &(v, 1) => println!("{}", v),
|
||||
LL | | _ => println!("none"),
|
||||
LL | | }
|
||||
| |_____^
|
||||
|
|
||||
help: instead of prefixing all patterns with `&`, you can dereference the expression
|
||||
|
|
||||
LL ~ match *tup {
|
||||
LL ~ (v, 1) => println!("{}", v),
|
||||
|
|
||||
|
||||
error: you don't need to add `&` to both the expression and the patterns
|
||||
--> $DIR/match_ref_pats.rs:24:5
|
||||
|
|
||||
|
@ -54,52 +39,11 @@ LL | if let &None = a {
|
|||
|
|
||||
= note: `-D clippy::redundant-pattern-matching` implied by `-D warnings`
|
||||
|
||||
error: you don't need to add `&` to all patterns
|
||||
--> $DIR/match_ref_pats.rs:36:5
|
||||
|
|
||||
LL | / if let &None = a {
|
||||
LL | | println!("none");
|
||||
LL | | }
|
||||
| |_____^
|
||||
|
|
||||
help: instead of prefixing all patterns with `&`, you can dereference the expression
|
||||
|
|
||||
LL | if let None = *a {
|
||||
| ~~~~ ~~
|
||||
|
||||
error: redundant pattern matching, consider using `is_none()`
|
||||
--> $DIR/match_ref_pats.rs:41:12
|
||||
|
|
||||
LL | if let &None = &b {
|
||||
| -------^^^^^----- help: try this: `if b.is_none()`
|
||||
|
||||
error: you don't need to add `&` to both the expression and the patterns
|
||||
--> $DIR/match_ref_pats.rs:41:5
|
||||
|
|
||||
LL | / if let &None = &b {
|
||||
LL | | println!("none");
|
||||
LL | | }
|
||||
| |_____^
|
||||
|
|
||||
help: try
|
||||
|
|
||||
LL | if let None = b {
|
||||
| ~~~~ ~
|
||||
|
||||
error: you don't need to add `&` to all patterns
|
||||
--> $DIR/match_ref_pats.rs:68:9
|
||||
|
|
||||
LL | / match foo_variant!(0) {
|
||||
LL | | &Foo::A => println!("A"),
|
||||
LL | | _ => println!("Wild"),
|
||||
LL | | }
|
||||
| |_________^
|
||||
|
|
||||
help: instead of prefixing all patterns with `&`, you can dereference the expression
|
||||
|
|
||||
LL ~ match *foo_variant!(0) {
|
||||
LL ~ Foo::A => println!("A"),
|
||||
|
|
||||
|
||||
error: aborting due to 8 previous errors
|
||||
error: aborting due to 4 previous errors
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue