1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
#![cfg_attr(nightly, feature(proc_macro_diagnostic))] use proc_macro::TokenStream; use proc_macro_error::proc_macro_error; mod macros; use crate::macros::fragment::Fragment; use quote::quote; use syn::parse_macro_input; #[proc_macro_error] #[proc_macro] pub fn frag(input: TokenStream) -> TokenStream { let Fragment { exprs } = parse_macro_input!(input); let expanded = quote! {{ extern crate spectrum; use spectrum::{Color, Style, StyledLine, StyledString, StyledFragment}; let mut v: Vec<StyledFragment> = Vec::new(); #( v.push(#exprs); )* let frag: StyledFragment = StyledLine::new(v).into(); frag }}; TokenStream::from(expanded) }