1 // Under the 2015 edition with the keyword_idents lint, `dyn` is
2 // not entirely acceptable as an identifier.
4 // We currently do not attempt to detect or fix uses of `dyn` as an
5 // identifier under a macro.
10 #![allow(non_camel_case_types)]
11 #![deny(keyword_idents)]
19 // Here we are illustrating that the current lint does not flag the
20 // occurrences of `dyn` in this macro definition; however, it
21 // certainly *could* (and it would be nice if it did), since these
22 // occurrences are not compatible with the 2018 edition's
23 // interpretation of `dyn` as a keyword.
24 macro_rules
! defn_has_dyn_idents
{
25 () => { ::outer_mod::dyn::dyn }
29 trait Trait { fn hello(&self) { }
}
32 macro_rules
! tt_trait
{
33 ($arg
:tt
) => { & $arg Trait }
36 macro_rules
! id_trait
{
37 ($id
:ident
) => { & $id Trait }
41 defn_has_dyn_idents
!();
43 // Here we are illustrating that the current lint does not flag
44 // the occurrences of `dyn` in these macro invocations. It
45 // definitely should *not* flag the one in `tt_trait`, since that
46 // is expanding in a valid fashion to `&dyn Trait`.
48 // It is arguable whether it would be valid to flag the occurrence
49 // in `id_trait`, since that macro specifies that it takes an
50 // `ident` as its input.
51 fn f_tt(x
: &X
) -> tt_trait
!(dyn) { x }
52 fn f_id(x
: &X
) -> id_trait
!(dyn) { x }