#![feature(proc_macro_quote, proc_macro_span)] extern crate proc_macro; use proc_macro::{Ident, Literal, Span, TokenStream, TokenTree, quote}; #[proc_macro] pub fn bad_tup_indexing(input: TokenStream) -> TokenStream { let tt = input.into_iter().next().unwrap(); let TokenTree::Literal(indexing_expr) = tt else { unreachable!(); }; quote! { (42,).$indexing_expr } } // Expects {IDENT, COMMA, LITERAL} #[proc_macro] pub fn bad_tup_struct_indexing(input: TokenStream) -> TokenStream { let mut input = input.into_iter(); let ident = input.next().unwrap(); let _comma = input.next().unwrap(); let lit = input.next().unwrap(); let TokenTree::Ident(ident) = ident else { unreachable!("id"); }; let TokenTree::Literal(indexing_expr) = lit else { unreachable!("lit"); }; quote! { $ident.$indexing_expr } }