// Under the 2015 edition with the keyword_idents lint, `dyn` is not // entirely acceptable as an identifier. We currently do not attempt // to detect or fix uses of `dyn` under a macro. Since we are testing // this file via `rustfix`, we want the rustfix output to be // compilable; so the macros here carefully use `dyn` "correctly." // //@ edition:2015 //@ run-rustfix #![allow(non_camel_case_types)] #![deny(keyword_idents)] mod outer_mod { pub mod r#dyn { //~^ ERROR `dyn` is a keyword //~| WARN this is accepted in the current edition pub struct r#dyn; //~^ ERROR `dyn` is a keyword //~| WARN this is accepted in the current edition } } use outer_mod::r#dyn::r#dyn; //~^ ERROR `dyn` is a keyword //~| WARN this is accepted in the current edition //~| ERROR `dyn` is a keyword //~| WARN this is accepted in the current edition fn main() { match r#dyn { r#dyn => {} } //~^ ERROR `dyn` is a keyword //~| WARN this is accepted in the current edition //~| ERROR `dyn` is a keyword //~| WARN this is accepted in the current edition macro_defn::r#dyn(); //~^ ERROR `dyn` is a keyword //~| WARN this is accepted in the current edition macro_defn::boxed(); } mod macro_defn { use super::Trait; macro_rules! r#dyn { //~^ ERROR `dyn` is a keyword //~| WARN this is accepted in the current edition // Note that we do not lint nor fix occurrences under macros ($dyn:tt) => { (Box, Box<$dyn Trait>) } } pub fn r#dyn() -> ::outer_mod::r#dyn::r#dyn { //~^ ERROR `dyn` is a keyword //~| WARN this is accepted in the current edition //~| ERROR `dyn` is a keyword //~| WARN this is accepted in the current edition //~| ERROR `dyn` is a keyword //~| WARN this is accepted in the current edition ::outer_mod::r#dyn::r#dyn //~^ ERROR `dyn` is a keyword //~| WARN this is accepted in the current edition //~| ERROR `dyn` is a keyword //~| WARN this is accepted in the current edition } pub fn boxed() -> r#dyn!( //~^ ERROR `dyn` is a keyword //~| WARN this is accepted in the current edition // Note that we do not lint nor fix occurrences under macros dyn ) { (Box::new(1), Box::new(2)) } } pub trait Trait { } impl Trait for u32 { }