Skip to content

Commit 69c7d2c

Browse files
committed
Only ignore external macros.
1 parent 4a6f7ab commit 69c7d2c

5 files changed

+50
-17
lines changed

clippy_lints/src/almost_complete_letter_range.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ use clippy_utils::{meets_msrv, msrvs};
44
use rustc_ast::ast::{Expr, ExprKind, LitKind, Pat, PatKind, RangeEnd, RangeLimits};
55
use rustc_errors::Applicability;
66
use rustc_lint::{EarlyContext, EarlyLintPass, LintContext};
7+
use rustc_middle::lint::in_external_macro;
78
use rustc_semver::RustcVersion;
89
use rustc_session::{declare_tool_lint, impl_lint_pass};
910
use rustc_span::Span;
@@ -79,7 +80,7 @@ fn check_range(cx: &EarlyContext<'_>, span: Span, start: &Expr, end: &Expr, sugg
7980
(LitKind::Byte(b'a') | LitKind::Char('a'), LitKind::Byte(b'z') | LitKind::Char('z'))
8081
| (LitKind::Byte(b'A') | LitKind::Char('A'), LitKind::Byte(b'Z') | LitKind::Char('Z'))
8182
)
82-
&& !span.from_expansion()
83+
&& !in_external_macro(cx.sess(), span)
8384
{
8485
span_lint_and_then(
8586
cx,

tests/ui/almost_complete_letter_range.fixed

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
// run-rustfix
22
// edition:2018
3+
// aux-build:macro_rules.rs
34

45
#![feature(custom_inner_attributes)]
56
#![feature(exclusive_range_pattern)]
@@ -8,6 +9,9 @@
89
#![allow(ellipsis_inclusive_range_patterns)]
910
#![allow(clippy::needless_parens_on_range_literals)]
1011

12+
#[macro_use]
13+
extern crate macro_rules;
14+
1115
macro_rules! a {
1216
() => {
1317
'a'
@@ -16,7 +20,7 @@ macro_rules! a {
1620

1721
macro_rules! b {
1822
() => {
19-
let _ = 'a'..'z';
23+
let _ = 'a'..='z';
2024
};
2125
}
2226

@@ -37,7 +41,6 @@ fn main() {
3741
let _ = b'B'..b'Z';
3842

3943
let _ = a!()..='z';
40-
b!();
4144

4245
let _ = match 0u8 {
4346
b'a'..=b'z' if true => 1,
@@ -54,6 +57,9 @@ fn main() {
5457
'B'..'Z' => 4,
5558
_ => 5,
5659
};
60+
61+
almost_complete_letter_range!();
62+
b!();
5763
}
5864

5965
fn _under_msrv() {

tests/ui/almost_complete_letter_range.rs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
// run-rustfix
22
// edition:2018
3+
// aux-build:macro_rules.rs
34

45
#![feature(custom_inner_attributes)]
56
#![feature(exclusive_range_pattern)]
@@ -8,6 +9,9 @@
89
#![allow(ellipsis_inclusive_range_patterns)]
910
#![allow(clippy::needless_parens_on_range_literals)]
1011

12+
#[macro_use]
13+
extern crate macro_rules;
14+
1115
macro_rules! a {
1216
() => {
1317
'a'
@@ -37,7 +41,6 @@ fn main() {
3741
let _ = b'B'..b'Z';
3842

3943
let _ = a!()..'z';
40-
b!();
4144

4245
let _ = match 0u8 {
4346
b'a'..b'z' if true => 1,
@@ -54,6 +57,9 @@ fn main() {
5457
'B'..'Z' => 4,
5558
_ => 5,
5659
};
60+
61+
almost_complete_letter_range!();
62+
b!();
5763
}
5864

5965
fn _under_msrv() {
Lines changed: 26 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
error: almost complete ascii letter range
2-
--> $DIR/almost_complete_letter_range.rs:26:17
2+
--> $DIR/almost_complete_letter_range.rs:30:17
33
|
44
LL | let _ = ('a') ..'z';
55
| ^^^^^^--^^^
@@ -9,92 +9,105 @@ LL | let _ = ('a') ..'z';
99
= note: `-D clippy::almost-complete-letter-range` implied by `-D warnings`
1010

1111
error: almost complete ascii letter range
12-
--> $DIR/almost_complete_letter_range.rs:27:17
12+
--> $DIR/almost_complete_letter_range.rs:31:17
1313
|
1414
LL | let _ = 'A' .. ('Z');
1515
| ^^^^--^^^^^^
1616
| |
1717
| help: use an inclusive range: `..=`
1818

1919
error: almost complete ascii letter range
20-
--> $DIR/almost_complete_letter_range.rs:33:13
20+
--> $DIR/almost_complete_letter_range.rs:37:13
2121
|
2222
LL | let _ = (b'a')..(b'z');
2323
| ^^^^^^--^^^^^^
2424
| |
2525
| help: use an inclusive range: `..=`
2626

2727
error: almost complete ascii letter range
28-
--> $DIR/almost_complete_letter_range.rs:34:13
28+
--> $DIR/almost_complete_letter_range.rs:38:13
2929
|
3030
LL | let _ = b'A'..b'Z';
3131
| ^^^^--^^^^
3232
| |
3333
| help: use an inclusive range: `..=`
3434

3535
error: almost complete ascii letter range
36-
--> $DIR/almost_complete_letter_range.rs:39:13
36+
--> $DIR/almost_complete_letter_range.rs:43:13
3737
|
3838
LL | let _ = a!()..'z';
3939
| ^^^^--^^^
4040
| |
4141
| help: use an inclusive range: `..=`
4242

4343
error: almost complete ascii letter range
44-
--> $DIR/almost_complete_letter_range.rs:43:9
44+
--> $DIR/almost_complete_letter_range.rs:46:9
4545
|
4646
LL | b'a'..b'z' if true => 1,
4747
| ^^^^--^^^^
4848
| |
4949
| help: use an inclusive range: `..=`
5050

5151
error: almost complete ascii letter range
52-
--> $DIR/almost_complete_letter_range.rs:44:9
52+
--> $DIR/almost_complete_letter_range.rs:47:9
5353
|
5454
LL | b'A'..b'Z' if true => 2,
5555
| ^^^^--^^^^
5656
| |
5757
| help: use an inclusive range: `..=`
5858

5959
error: almost complete ascii letter range
60-
--> $DIR/almost_complete_letter_range.rs:51:9
60+
--> $DIR/almost_complete_letter_range.rs:54:9
6161
|
6262
LL | 'a'..'z' if true => 1,
6363
| ^^^--^^^
6464
| |
6565
| help: use an inclusive range: `..=`
6666

6767
error: almost complete ascii letter range
68-
--> $DIR/almost_complete_letter_range.rs:52:9
68+
--> $DIR/almost_complete_letter_range.rs:55:9
6969
|
7070
LL | 'A'..'Z' if true => 2,
7171
| ^^^--^^^
7272
| |
7373
| help: use an inclusive range: `..=`
7474

7575
error: almost complete ascii letter range
76-
--> $DIR/almost_complete_letter_range.rs:62:9
76+
--> $DIR/almost_complete_letter_range.rs:23:17
77+
|
78+
LL | let _ = 'a'..'z';
79+
| ^^^--^^^
80+
| |
81+
| help: use an inclusive range: `..=`
82+
...
83+
LL | b!();
84+
| ---- in this macro invocation
85+
|
86+
= note: this error originates in the macro `b` (in Nightly builds, run with -Z macro-backtrace for more info)
87+
88+
error: almost complete ascii letter range
89+
--> $DIR/almost_complete_letter_range.rs:68:9
7790
|
7891
LL | 'a'..'z' => 1,
7992
| ^^^--^^^
8093
| |
8194
| help: use an inclusive range: `...`
8295

8396
error: almost complete ascii letter range
84-
--> $DIR/almost_complete_letter_range.rs:69:13
97+
--> $DIR/almost_complete_letter_range.rs:75:13
8598
|
8699
LL | let _ = 'a'..'z';
87100
| ^^^--^^^
88101
| |
89102
| help: use an inclusive range: `..=`
90103

91104
error: almost complete ascii letter range
92-
--> $DIR/almost_complete_letter_range.rs:71:9
105+
--> $DIR/almost_complete_letter_range.rs:77:9
93106
|
94107
LL | 'a'..'z' => 1,
95108
| ^^^--^^^
96109
| |
97110
| help: use an inclusive range: `..=`
98111

99-
error: aborting due to 12 previous errors
112+
error: aborting due to 13 previous errors
100113

tests/ui/auxiliary/macro_rules.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,3 +140,10 @@ macro_rules! manual_rem_euclid {
140140
macro_rules! equatable_if_let {
141141
($a:ident) => {{ if let 2 = $a {} }};
142142
}
143+
144+
#[macro_export]
145+
macro_rules! almost_complete_letter_range {
146+
() => {
147+
let _ = 'a'..'z';
148+
};
149+
}

0 commit comments

Comments
 (0)