replace Token trait with consts
This commit is contained in:
parent
040bb4ecb3
commit
9e0ead7605
3 changed files with 60 additions and 60 deletions
|
@ -1,7 +1,8 @@
|
|||
extern crate proc_macro;
|
||||
use proc_macro::TokenStream;
|
||||
use proc_macro2::Span;
|
||||
use quote::quote;
|
||||
use syn::{parse_macro_input, Data, DataEnum, DeriveInput, Fields};
|
||||
use syn::{parse_macro_input, Data, DataEnum, DeriveInput, Fields, Ident};
|
||||
|
||||
#[proc_macro_derive(ModifierParser)]
|
||||
pub fn modifier_parser(input: TokenStream) -> TokenStream {
|
||||
|
@ -31,11 +32,12 @@ fn impl_modifier_parser(ast: DeriveInput) -> TokenStream {
|
|||
} else {
|
||||
panic!("Expected unnamed fields in enum variants");
|
||||
};
|
||||
|
||||
let const_name =
|
||||
Ident::new(&variant.ident.to_string().to_uppercase(), Span::call_site());
|
||||
quote! {
|
||||
nom::combinator::map(
|
||||
nom::sequence::preceded(
|
||||
nom::character::complete::char(#name::#variant_name(Default::default()).token()),
|
||||
nom::character::complete::char(#name::#const_name),
|
||||
nom::character::complete::#variant_type
|
||||
),
|
||||
#name::#variant_name
|
||||
|
@ -63,15 +65,15 @@ fn impl_slope_modifier_parser(ast: DeriveInput) -> TokenStream {
|
|||
if let Data::Enum(DataEnum { variants, .. }) = ast.data {
|
||||
let match_arms = variants.iter().map(|variant| {
|
||||
let variant_name = &variant.ident;
|
||||
let const_name = Ident::new(&variant.ident.to_string().to_uppercase(),Span::call_site());
|
||||
quote! {
|
||||
tag(#name::#variant_name)
|
||||
nom::combinator::value(#name::#variant_name, nom::character::complete::char(SlopeModifier::#const_name))
|
||||
}
|
||||
});
|
||||
|
||||
quote! {
|
||||
impl lex::lexer::Parse for #name {
|
||||
fn parse(input: &str) -> nom::IResult<&str, #name> {
|
||||
let tag = |sm: SlopeModifier| nom::combinator::value(sm, nom::character::complete::char(sm.token()));
|
||||
nom::branch::alt((
|
||||
#(#match_arms),*
|
||||
))(input)
|
||||
|
@ -89,18 +91,19 @@ fn impl_quick_modifier_parser(ast: DeriveInput) -> TokenStream {
|
|||
if let Data::Enum(DataEnum { variants, .. }) = ast.data {
|
||||
let match_arms = variants.iter().map(|variant| {
|
||||
let variant_name = &variant.ident;
|
||||
|
||||
let const_name =
|
||||
Ident::new(&variant.ident.to_string().to_uppercase(), Span::call_site());
|
||||
quote! {
|
||||
nom::combinator::map(
|
||||
nom::branch::alt(
|
||||
(
|
||||
nom::combinator::value(
|
||||
true,
|
||||
nom::character::complete::char(#name::#variant_name(Default::default()).token().0)
|
||||
lex::MORE,
|
||||
nom::character::complete::char(#name::#const_name.0)
|
||||
),
|
||||
nom::combinator::value(
|
||||
false,
|
||||
nom::character::complete::char(#name::#variant_name(Default::default()).token().1)
|
||||
lex::LESS,
|
||||
nom::character::complete::char(#name::#const_name.1)
|
||||
)
|
||||
)
|
||||
),
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue