From: Ian Jackson Date: Sat, 24 Jul 2021 11:51:13 +0000 (+0100) Subject: config, wip macro, spans X-Git-Tag: hippotat/1.0.0~489 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ian/git?a=commitdiff_plain;h=733b7503f770bd7c6dab1a6e9ebe185b72edc3df;p=hippotat.git config, wip macro, spans Signed-off-by: Ian Jackson --- diff --git a/macros/macros.rs b/macros/macros.rs index bbdb99f..d0045f5 100644 --- a/macros/macros.rs +++ b/macros/macros.rs @@ -32,10 +32,11 @@ pub fn resolve(input: proc_macro::TokenStream) -> proc_macro::TokenStream { let mut names = vec![]; let mut output = vec![]; for field in &fields.named { - let fname = &field.ident; dbg!(field); - let mut skl = quote!{ SectionKindList::Ordinary }; - let mut method = quote!{ ordinary }; + let fname = &field.ident.as_ref().unwrap(); + let fname_span = fname.span(); + let mut skl = quote_spanned!{fname_span=> SectionKindList::Ordinary }; + let mut method = quote_spanned!{fname_span=> ordinary }; for attr in &field.attrs { if attr.tokens.is_empty() { let atspan = attr.path.segments.last().unwrap().ident.span(); @@ -59,22 +60,24 @@ pub fn resolve(input: proc_macro::TokenStream) -> proc_macro::TokenStream { skl = get_path(tskl); } } - let fname_string = fname.as_ref().unwrap().to_string(); + let fname_string = fname.to_string(); let fname_lit = Literal::string( &fname_string ); names.push(quote!{ (#fname_lit, #skl), }); - output.push(quote_spanned!{fname.as_ref().unwrap().span()=> + dbg!(&method); + output.push(quote!{ #fname: rctx. #method ( #fname_lit )?, }); eprintln!("{:?} method={:?} skl={:?}", field.ident, method, skl); } + dbg!(&output); let output = quote! { impl #target { const FIELDS: &'static [(&'static str, SectionKindList)] - = &[ #( #names ),* ]; + = &[ #( #names )* ]; fn resolve_instance(rctx: &ResolveContext) -> ::std::result::Result<#target, anyhow::Error>