You’re right. I should have said I want vanilla Rust code for vanilla macros and I want to manipulate the AST not token streams.
Token manipulation code is frequently full of syn! macro hell. So even token manipulation is only kind of normal Rust code.