Skip to content

Commit 6d7e5df

Browse files
committed
Some tests illustrating where the revised lint does and does not apply.
1 parent 6046f4a commit 6d7e5df

5 files changed

+346
-0
lines changed
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
// Under the 2015 edition with the keyword_idents lint, `dyn` is not
2+
// entirely acceptable as an identifier. We currently do not attempt
3+
// to detect or fix uses of `dyn` under a macro. Since we are testing
4+
// this file via `rustfix`, we want the rustfix output to be
5+
// compilable; so the macros here carefully use `dyn` "correctly."
6+
7+
// run-rustfix
8+
9+
#![allow(non_camel_case_types)]
10+
#![deny(keyword_idents)]
11+
12+
mod outer_mod {
13+
pub mod r#dyn {
14+
//~^ ERROR `dyn` is a keyword
15+
//~| WARN was previously accepted
16+
pub struct r#dyn;
17+
//~^ ERROR `dyn` is a keyword
18+
//~| WARN was previously accepted
19+
}
20+
}
21+
use outer_mod::r#dyn::r#dyn;
22+
//~^ ERROR `dyn` is a keyword
23+
//~| WARN was previously accepted
24+
//~| ERROR `dyn` is a keyword
25+
//~| WARN was previously accepted
26+
27+
fn main() {
28+
match r#dyn { r#dyn => {} }
29+
//~^ ERROR `dyn` is a keyword
30+
//~| WARN was previously accepted
31+
//~| ERROR `dyn` is a keyword
32+
//~| WARN was previously accepted
33+
macro_defn::r#dyn();
34+
//~^ ERROR `dyn` is a keyword
35+
//~| WARN was previously accepted
36+
37+
macro_defn::boxed();
38+
}
39+
40+
mod macro_defn {
41+
use super::Trait;
42+
43+
macro_rules! r#dyn {
44+
//~^ ERROR `dyn` is a keyword
45+
//~| WARN was previously accepted
46+
47+
// Note that we do not lint nor fix occurrences under macros
48+
($dyn:ident) => { Box<dyn Trait> }
49+
}
50+
51+
pub fn r#dyn() -> ::outer_mod::r#dyn::r#dyn {
52+
//~^ ERROR `dyn` is a keyword
53+
//~| WARN was previously accepted
54+
//~| ERROR `dyn` is a keyword
55+
//~| WARN was previously accepted
56+
//~| ERROR `dyn` is a keyword
57+
//~| WARN was previously accepted
58+
::outer_mod::r#dyn::r#dyn
59+
//~^ ERROR `dyn` is a keyword
60+
//~| WARN was previously accepted
61+
//~| ERROR `dyn` is a keyword
62+
//~| WARN was previously accepted
63+
}
64+
65+
66+
67+
pub fn boxed() -> r#dyn!(
68+
//~^ ERROR `dyn` is a keyword
69+
//~| WARN was previously accepted
70+
71+
// Note that we do not lint nor fix occurrences under macros
72+
dyn
73+
)
74+
{
75+
Box::new(10)
76+
}
77+
}
78+
79+
pub trait Trait { }
80+
81+
impl Trait for u32 { }
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
// Under the 2015 edition with the keyword_idents lint, `dyn` is not
2+
// entirely acceptable as an identifier. We currently do not attempt
3+
// to detect or fix uses of `dyn` under a macro. Since we are testing
4+
// this file via `rustfix`, we want the rustfix output to be
5+
// compilable; so the macros here carefully use `dyn` "correctly."
6+
7+
// run-rustfix
8+
9+
#![allow(non_camel_case_types)]
10+
#![deny(keyword_idents)]
11+
12+
mod outer_mod {
13+
pub mod dyn {
14+
//~^ ERROR `dyn` is a keyword
15+
//~| WARN was previously accepted
16+
pub struct dyn;
17+
//~^ ERROR `dyn` is a keyword
18+
//~| WARN was previously accepted
19+
}
20+
}
21+
use outer_mod::dyn::dyn;
22+
//~^ ERROR `dyn` is a keyword
23+
//~| WARN was previously accepted
24+
//~| ERROR `dyn` is a keyword
25+
//~| WARN was previously accepted
26+
27+
fn main() {
28+
match dyn { dyn => {} }
29+
//~^ ERROR `dyn` is a keyword
30+
//~| WARN was previously accepted
31+
//~| ERROR `dyn` is a keyword
32+
//~| WARN was previously accepted
33+
macro_defn::dyn();
34+
//~^ ERROR `dyn` is a keyword
35+
//~| WARN was previously accepted
36+
37+
macro_defn::boxed();
38+
}
39+
40+
mod macro_defn {
41+
use super::Trait;
42+
43+
macro_rules! dyn {
44+
//~^ ERROR `dyn` is a keyword
45+
//~| WARN was previously accepted
46+
47+
// Note that we do not lint nor fix occurrences under macros
48+
($dyn:ident) => { Box<dyn Trait> }
49+
}
50+
51+
pub fn dyn() -> ::outer_mod::dyn::dyn {
52+
//~^ ERROR `dyn` is a keyword
53+
//~| WARN was previously accepted
54+
//~| ERROR `dyn` is a keyword
55+
//~| WARN was previously accepted
56+
//~| ERROR `dyn` is a keyword
57+
//~| WARN was previously accepted
58+
::outer_mod::dyn::dyn
59+
//~^ ERROR `dyn` is a keyword
60+
//~| WARN was previously accepted
61+
//~| ERROR `dyn` is a keyword
62+
//~| WARN was previously accepted
63+
}
64+
65+
66+
67+
pub fn boxed() -> dyn!(
68+
//~^ ERROR `dyn` is a keyword
69+
//~| WARN was previously accepted
70+
71+
// Note that we do not lint nor fix occurrences under macros
72+
dyn
73+
)
74+
{
75+
Box::new(10)
76+
}
77+
}
78+
79+
pub trait Trait { }
80+
81+
impl Trait for u32 { }
Lines changed: 133 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,133 @@
1+
error: `dyn` is a keyword in the 2018 edition
2+
--> $DIR/dyn-2015-edition-keyword-ident-lint.rs:13:13
3+
|
4+
LL | pub mod dyn {
5+
| ^^^ help: you can use a raw identifier to stay compatible: `r#dyn`
6+
|
7+
note: lint level defined here
8+
--> $DIR/dyn-2015-edition-keyword-ident-lint.rs:10:9
9+
|
10+
LL | #![deny(keyword_idents)]
11+
| ^^^^^^^^^^^^^^
12+
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in the 2018 edition!
13+
= note: for more information, see issue #49716 <https://github.com/rust-lang/rust/issues/49716>
14+
15+
error: `dyn` is a keyword in the 2018 edition
16+
--> $DIR/dyn-2015-edition-keyword-ident-lint.rs:16:20
17+
|
18+
LL | pub struct dyn;
19+
| ^^^ help: you can use a raw identifier to stay compatible: `r#dyn`
20+
|
21+
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in the 2018 edition!
22+
= note: for more information, see issue #49716 <https://github.com/rust-lang/rust/issues/49716>
23+
24+
error: `dyn` is a keyword in the 2018 edition
25+
--> $DIR/dyn-2015-edition-keyword-ident-lint.rs:21:16
26+
|
27+
LL | use outer_mod::dyn::dyn;
28+
| ^^^ help: you can use a raw identifier to stay compatible: `r#dyn`
29+
|
30+
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in the 2018 edition!
31+
= note: for more information, see issue #49716 <https://github.com/rust-lang/rust/issues/49716>
32+
33+
error: `dyn` is a keyword in the 2018 edition
34+
--> $DIR/dyn-2015-edition-keyword-ident-lint.rs:21:21
35+
|
36+
LL | use outer_mod::dyn::dyn;
37+
| ^^^ help: you can use a raw identifier to stay compatible: `r#dyn`
38+
|
39+
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in the 2018 edition!
40+
= note: for more information, see issue #49716 <https://github.com/rust-lang/rust/issues/49716>
41+
42+
error: `dyn` is a keyword in the 2018 edition
43+
--> $DIR/dyn-2015-edition-keyword-ident-lint.rs:28:11
44+
|
45+
LL | match dyn { dyn => {} }
46+
| ^^^ help: you can use a raw identifier to stay compatible: `r#dyn`
47+
|
48+
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in the 2018 edition!
49+
= note: for more information, see issue #49716 <https://github.com/rust-lang/rust/issues/49716>
50+
51+
error: `dyn` is a keyword in the 2018 edition
52+
--> $DIR/dyn-2015-edition-keyword-ident-lint.rs:28:17
53+
|
54+
LL | match dyn { dyn => {} }
55+
| ^^^ help: you can use a raw identifier to stay compatible: `r#dyn`
56+
|
57+
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in the 2018 edition!
58+
= note: for more information, see issue #49716 <https://github.com/rust-lang/rust/issues/49716>
59+
60+
error: `dyn` is a keyword in the 2018 edition
61+
--> $DIR/dyn-2015-edition-keyword-ident-lint.rs:33:17
62+
|
63+
LL | macro_defn::dyn();
64+
| ^^^ help: you can use a raw identifier to stay compatible: `r#dyn`
65+
|
66+
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in the 2018 edition!
67+
= note: for more information, see issue #49716 <https://github.com/rust-lang/rust/issues/49716>
68+
69+
error: `dyn` is a keyword in the 2018 edition
70+
--> $DIR/dyn-2015-edition-keyword-ident-lint.rs:43:18
71+
|
72+
LL | macro_rules! dyn {
73+
| ^^^ help: you can use a raw identifier to stay compatible: `r#dyn`
74+
|
75+
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in the 2018 edition!
76+
= note: for more information, see issue #49716 <https://github.com/rust-lang/rust/issues/49716>
77+
78+
error: `dyn` is a keyword in the 2018 edition
79+
--> $DIR/dyn-2015-edition-keyword-ident-lint.rs:51:12
80+
|
81+
LL | pub fn dyn() -> ::outer_mod::dyn::dyn {
82+
| ^^^ help: you can use a raw identifier to stay compatible: `r#dyn`
83+
|
84+
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in the 2018 edition!
85+
= note: for more information, see issue #49716 <https://github.com/rust-lang/rust/issues/49716>
86+
87+
error: `dyn` is a keyword in the 2018 edition
88+
--> $DIR/dyn-2015-edition-keyword-ident-lint.rs:51:34
89+
|
90+
LL | pub fn dyn() -> ::outer_mod::dyn::dyn {
91+
| ^^^ help: you can use a raw identifier to stay compatible: `r#dyn`
92+
|
93+
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in the 2018 edition!
94+
= note: for more information, see issue #49716 <https://github.com/rust-lang/rust/issues/49716>
95+
96+
error: `dyn` is a keyword in the 2018 edition
97+
--> $DIR/dyn-2015-edition-keyword-ident-lint.rs:51:39
98+
|
99+
LL | pub fn dyn() -> ::outer_mod::dyn::dyn {
100+
| ^^^ help: you can use a raw identifier to stay compatible: `r#dyn`
101+
|
102+
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in the 2018 edition!
103+
= note: for more information, see issue #49716 <https://github.com/rust-lang/rust/issues/49716>
104+
105+
error: `dyn` is a keyword in the 2018 edition
106+
--> $DIR/dyn-2015-edition-keyword-ident-lint.rs:58:22
107+
|
108+
LL | ::outer_mod::dyn::dyn
109+
| ^^^ help: you can use a raw identifier to stay compatible: `r#dyn`
110+
|
111+
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in the 2018 edition!
112+
= note: for more information, see issue #49716 <https://github.com/rust-lang/rust/issues/49716>
113+
114+
error: `dyn` is a keyword in the 2018 edition
115+
--> $DIR/dyn-2015-edition-keyword-ident-lint.rs:58:27
116+
|
117+
LL | ::outer_mod::dyn::dyn
118+
| ^^^ help: you can use a raw identifier to stay compatible: `r#dyn`
119+
|
120+
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in the 2018 edition!
121+
= note: for more information, see issue #49716 <https://github.com/rust-lang/rust/issues/49716>
122+
123+
error: `dyn` is a keyword in the 2018 edition
124+
--> $DIR/dyn-2015-edition-keyword-ident-lint.rs:67:23
125+
|
126+
LL | pub fn boxed() -> dyn!(
127+
| ^^^ help: you can use a raw identifier to stay compatible: `r#dyn`
128+
|
129+
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in the 2018 edition!
130+
= note: for more information, see issue #49716 <https://github.com/rust-lang/rust/issues/49716>
131+
132+
error: aborting due to 14 previous errors
133+
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
// compile-pass
2+
3+
// Under the 2015 edition with the keyword_idents lint, `dyn` is
4+
// not entirely acceptable as an identifier.
5+
//
6+
// We currently do not attempt to detect or fix uses of `dyn` as an
7+
// identifier under a macro.
8+
9+
#![allow(non_camel_case_types)]
10+
#![deny(keyword_idents)]
11+
12+
mod outer_mod {
13+
pub mod r#dyn {
14+
pub struct r#dyn;
15+
}
16+
}
17+
18+
macro_rules! defn_has_dyn_idents {
19+
($arg:ident) => { ::outer_mod::dyn::dyn }
20+
}
21+
22+
fn main() {
23+
defn_has_dyn_idents!(dyn);
24+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
// Under the 2015 edition without the keyword_idents lint, `dyn` is
2+
// entirely acceptable as an identifier.
3+
4+
// compile-pass
5+
6+
#![allow(non_camel_case_types)]
7+
8+
mod outer_mod {
9+
pub mod dyn {
10+
pub struct dyn;
11+
}
12+
}
13+
use outer_mod::dyn::dyn;
14+
15+
fn main() {
16+
match dyn { dyn => {} }
17+
macro_defn::dyn();
18+
}
19+
mod macro_defn {
20+
macro_rules! dyn {
21+
() => { ::outer_mod::dyn::dyn }
22+
}
23+
24+
pub fn dyn() -> ::outer_mod::dyn::dyn {
25+
dyn!()
26+
}
27+
}

0 commit comments

Comments
 (0)