Function transcribe_metavar

Source
fn transcribe_metavar<'tx>(
    tscx: &mut TranscrCtx<'tx, '_>,
    sp: Span,
    original_ident: Ident,
) -> PResult<'tx, ()>
Expand description

Find the matched nonterminal from the macro invocation, and use it to replace the meta-var.

We use Spacing::Alone everywhere here, because that’s the conservative choice and spacing of declarative macros is tricky. E.g. in this macro:

macro_rules! idents {
    ($($a:ident,)*) => { stringify!($($a)*) }
}

$a has no whitespace after it and will be marked JointHidden. If you then call idents!(x,y,z,), each of x, y, and z will be marked as Joint. So if you choose to use $x’s spacing or the identifier’s spacing, you’ll end up producing “xyz”, which is bad because it effectively merges tokens. Spacing::Alone is the safer option. Fortunately, space_between will avoid some of the unnecessary whitespace.