proc: cleanup

This commit is contained in:
🪞👃🪞 2025-05-08 20:18:07 +03:00
parent a16603fbc8
commit bcbcc387a2
2 changed files with 21 additions and 46 deletions

View file

@ -202,7 +202,7 @@ impl ToTokens for CommandVariant {
out.append(Group::new(Delimiter::Parenthesis, { out.append(Group::new(Delimiter::Parenthesis, {
let mut out = TokenStream2::new(); let mut out = TokenStream2::new();
for arg in args.iter() { for arg in args.iter() {
if let FnArg::Typed(PatType { attrs, pat, colon_token, ty }) = arg { if let FnArg::Typed(PatType { ty, .. }) = arg {
out.append(LitStr::new( out.append(LitStr::new(
&format!("{}", quote! { #ty }), &format!("{}", quote! { #ty }),
Span::call_site() Span::call_site()

View file

@ -7,10 +7,7 @@ pub(crate) struct ExposeDef(pub(crate) ExposeMeta, pub(crate) ExposeImpl);
pub(crate) struct ExposeMeta; pub(crate) struct ExposeMeta;
#[derive(Debug, Clone)] #[derive(Debug, Clone)]
pub(crate) struct ExposeImpl { pub(crate) struct ExposeImpl(ItemImpl, BTreeMap<ExposeType, BTreeMap<String, Ident>>);
block: ItemImpl,
exposed: BTreeMap<ExposeType, BTreeMap<String, Ident>>,
}
#[derive(Debug, Clone)] #[derive(Debug, Clone)]
struct ExposeArm(String, Ident); struct ExposeArm(String, Ident);
@ -49,26 +46,22 @@ impl Parse for ExposeImpl {
} }
} }
} }
Ok(Self { block, exposed }) Ok(Self(block, exposed))
} }
} }
impl ToTokens for ExposeDef { impl ToTokens for ExposeDef {
fn to_tokens (&self, out: &mut TokenStream2) { fn to_tokens (&self, out: &mut TokenStream2) {
let Self(meta, data) = self; let Self(_meta, data) = self;
for token in quote! { #data } { write_quote_to(out, quote! { #data });
out.append(token)
}
} }
} }
impl ToTokens for ExposeImpl { impl ToTokens for ExposeImpl {
fn to_tokens (&self, out: &mut TokenStream2) { fn to_tokens (&self, out: &mut TokenStream2) {
let Self { block, exposed } = self; let Self(block, exposed) = self;
let target = &self.block.self_ty; let target = &block.self_ty;
for token in quote! { #block } { write_quote_to(out, quote! { #block });
out.append(token);
}
for (t, variants) in exposed.iter() { for (t, variants) in exposed.iter() {
let formatted_type = format!("{}", quote! { #t }); let formatted_type = format!("{}", quote! { #t });
let predefined = match formatted_type.as_str() { let predefined = match formatted_type.as_str() {
@ -89,8 +82,8 @@ impl ToTokens for ExposeImpl {
}, },
_ => quote! {}, _ => quote! {},
}; };
let values = variants.iter().map(|(k, v)|ExposeArm(k.clone(), v.clone())); let values = variants.iter().map(ExposeArm::from);
let trait_impl = quote! { write_quote_to(out, quote! {
impl ::tengri::dsl::Context<#t> for #target { impl ::tengri::dsl::Context<#t> for #target {
fn get (&self, dsl: &::tengri::dsl::Value) -> Option<#t> { fn get (&self, dsl: &::tengri::dsl::Value) -> Option<#t> {
Some(match dsl { Some(match dsl {
@ -100,10 +93,7 @@ impl ToTokens for ExposeImpl {
}) })
} }
} }
}; });
for token in trait_impl {
out.append(token);
}
} }
if exposed.len() > 0 { if exposed.len() > 0 {
//panic!("{}", quote! {#out}); //panic!("{}", quote! {#out});
@ -111,34 +101,19 @@ impl ToTokens for ExposeImpl {
} }
} }
impl From<(&String, &Ident)> for ExposeArm {
fn from ((a, b): (&String, &Ident)) -> Self {
Self(a.clone(), b.clone())
}
}
impl ToTokens for ExposeArm { impl ToTokens for ExposeArm {
fn to_tokens (&self, out: &mut TokenStream2) { fn to_tokens (&self, out: &mut TokenStream2) {
let Self(key, value) = self; let Self(key, value) = self;
out.append(Punct::new(':', Joint)); let key = LitStr::new(&key, Span::call_site());
out.append(Punct::new(':', Alone)); write_quote_to(out, quote! {
out.append(Ident::new("tengri", Span::call_site())); ::tengri::dsl::Value::Sym(#key) => self.#value()
out.append(Punct::new(':', Joint)); })
out.append(Punct::new(':', Alone));
out.append(Ident::new("dsl", Span::call_site()));
out.append(Punct::new(':', Joint));
out.append(Punct::new(':', Alone));
out.append(Ident::new("Value", Span::call_site()));
out.append(Punct::new(':', Joint));
out.append(Punct::new(':', Alone));
out.append(Ident::new("Sym", Span::call_site()));
out.append(Group::new(Delimiter::Parenthesis, {
let mut out = TokenStream2::new();
out.append(LitStr::new(&key, Span::call_site()).token());
out
}));
out.append(Punct::new('=', Joint));
out.append(Punct::new('>', Alone));
out.append(Ident::new("self", Span::call_site()));
out.append(Punct::new('.', Alone));
for token in quote! { #value } {
out.append(token);
}
out.append(Group::new(Delimiter::Parenthesis, TokenStream2::new()));
} }
} }