This repository was archived by the owner on Oct 6, 2024. It is now read-only.

Description
Paste will produce a keyword instead of an identifier in some cases:
use paste::paste;
macro_rules! empty_items{
($name:ident $(- $name_tail:ident)*) => { paste!{
struct [< $name:camel $( $name_tail)* >];
fn [< $name:snake $( _ $name_tail:snake)* >]() {}
}}
}
empty_items!(r#loop); // Error: expected identifier, found keyword `loop`
empty_items!(se-lf); // Error: expected identifier, found keyword `Self`
empty_items!(Loop); // Error: expected identifier, found keyword `loop`
empty_items!(r#loop-xyz); // Ok
Note that fixing this would be a breaking change as currently paste could be (ab)used to remove the r# from raw idents (say, for stringify!).
Maybe it's also worth thinking about whether, for example, paste!{ [< loop >] } should produce a raw identifier, rather than a keyword.