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, {
let mut out = TokenStream2::new();
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(
&format!("{}", quote! { #ty }),
Span::call_site()

View file

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