Skip to content

Commit

Permalink
Auto merge of #6603 - ThibsG:MatchOverlappingArm5986, r=flip1995
Browse files Browse the repository at this point in the history
Do not lint when range is completely included into another one

This fix has been developed following this [comment](#5986 (comment)).
So this will be linted:
```
|----------|
        |-----------|
```
Now this won't be linted:
```
              |---|
|--------------------|
```
and this will still lint:
```
|--------|
|--------------|
```

Fixes: #5986

changelog: none
  • Loading branch information
bors committed Jan 31, 2021
2 parents ed11274 + 0518911 commit cdc75dc
Show file tree
Hide file tree
Showing 3 changed files with 57 additions and 17 deletions.
12 changes: 11 additions & 1 deletion clippy_lints/src/matches.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1592,7 +1592,17 @@ where
}
},
(&Kind::End(a, _), &Kind::Start(b, _)) if a != Bound::Included(b) => (),
_ => return Some((a.range(), b.range())),
_ => {
// skip if the range `a` is completely included into the range `b`
if let Ordering::Equal | Ordering::Less = a.cmp(&b) {
let kind_a = Kind::End(a.range().node.1, a.range());
let kind_b = Kind::End(b.range().node.1, b.range());
if let Ordering::Equal | Ordering::Greater = kind_a.cmp(&kind_b) {
return None;
}
}
return Some((a.range(), b.range()));
},
}
}

Expand Down
30 changes: 30 additions & 0 deletions tests/ui/match_overlapping_arm.rs
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,36 @@ fn overlapping() {
_ => (),
}

match 42 {
5..7 => println!("5 .. 7"),
0..10 => println!("0 .. 10"),
_ => (),
}

match 42 {
5..10 => println!("5 .. 10"),
0..=10 => println!("0 ... 10"),
_ => (),
}

match 42 {
0..14 => println!("0 .. 14"),
5..10 => println!("5 .. 10"),
_ => (),
}

match 42 {
5..14 => println!("5 .. 14"),
0..=10 => println!("0 ... 10"),
_ => (),
}

match 42 {
0..7 => println!("0 .. 7"),
0..=10 => println!("0 ... 10"),
_ => (),
}

/*
// FIXME(JohnTitor): uncomment this once rustfmt knows half-open patterns
match 42 {
Expand Down
32 changes: 16 additions & 16 deletions tests/ui/match_overlapping_arm.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -24,39 +24,39 @@ LL | FOO..=11 => println!("0 ... 11"),
| ^^^^^^^^

error: some ranges overlap
--> $DIR/match_overlapping_arm.rs:26:9
--> $DIR/match_overlapping_arm.rs:55:9
|
LL | 0..=5 => println!("0 ... 5"),
LL | 0..11 => println!("0 .. 11"),
| ^^^^^
|
note: overlaps with this
--> $DIR/match_overlapping_arm.rs:25:9
--> $DIR/match_overlapping_arm.rs:56:9
|
LL | 2 => println!("2"),
| ^
LL | 0..=11 => println!("0 ... 11"),
| ^^^^^^

error: some ranges overlap
--> $DIR/match_overlapping_arm.rs:32:9
--> $DIR/match_overlapping_arm.rs:80:9
|
LL | 0..=2 => println!("0 ... 2"),
| ^^^^^
LL | 0..=10 => println!("0 ... 10"),
| ^^^^^^
|
note: overlaps with this
--> $DIR/match_overlapping_arm.rs:31:9
--> $DIR/match_overlapping_arm.rs:79:9
|
LL | 2 => println!("2"),
| ^
LL | 5..14 => println!("5 .. 14"),
| ^^^^^

error: some ranges overlap
--> $DIR/match_overlapping_arm.rs:55:9
--> $DIR/match_overlapping_arm.rs:85:9
|
LL | 0..11 => println!("0 .. 11"),
| ^^^^^
LL | 0..7 => println!("0 .. 7"),
| ^^^^
|
note: overlaps with this
--> $DIR/match_overlapping_arm.rs:56:9
--> $DIR/match_overlapping_arm.rs:86:9
|
LL | 0..=11 => println!("0 ... 11"),
LL | 0..=10 => println!("0 ... 10"),
| ^^^^^^

error: aborting due to 5 previous errors
Expand Down

0 comments on commit cdc75dc

Please sign in to comment.