Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/query-group-macro/src/queries.rs')
| -rw-r--r-- | crates/query-group-macro/src/queries.rs | 130 |
1 files changed, 1 insertions, 129 deletions
diff --git a/crates/query-group-macro/src/queries.rs b/crates/query-group-macro/src/queries.rs index 4221068828..7eea85f7af 100644 --- a/crates/query-group-macro/src/queries.rs +++ b/crates/query-group-macro/src/queries.rs @@ -1,7 +1,7 @@ //! The IR of the `#[query_group]` macro. use quote::{ToTokens, format_ident, quote, quote_spanned}; -use syn::{FnArg, Ident, PatType, Path, Receiver, ReturnType, parse_quote, spanned::Spanned}; +use syn::{Ident, PatType, Path, spanned::Spanned}; use crate::Cycle; @@ -104,132 +104,6 @@ impl ToTokens for TrackedQuery { } } -pub(crate) struct InputQuery { - pub(crate) signature: syn::Signature, - pub(crate) create_data_ident: Ident, -} - -impl ToTokens for InputQuery { - fn to_tokens(&self, tokens: &mut proc_macro2::TokenStream) { - let sig = &self.signature; - let fn_ident = &sig.ident; - let create_data_ident = &self.create_data_ident; - - let method = quote! { - #sig { - let data = #create_data_ident(self); - data.#fn_ident(self).unwrap() - } - }; - method.to_tokens(tokens); - } -} - -pub(crate) struct InputSetter { - pub(crate) signature: syn::Signature, - pub(crate) return_type: syn::Type, - pub(crate) create_data_ident: Ident, -} - -impl ToTokens for InputSetter { - fn to_tokens(&self, tokens: &mut proc_macro2::TokenStream) { - let sig = &mut self.signature.clone(); - - let ty = &self.return_type; - let fn_ident = &sig.ident; - let create_data_ident = &self.create_data_ident; - - let setter_ident = format_ident!("set_{}", fn_ident); - sig.ident = setter_ident.clone(); - - let value_argument: PatType = parse_quote!(__value: #ty); - sig.inputs.push(FnArg::Typed(value_argument.clone())); - - // make `&self` `&mut self` instead. - let mut_receiver: Receiver = parse_quote!(&mut self); - if let Some(og) = sig.inputs.first_mut() { - *og = FnArg::Receiver(mut_receiver) - } - - // remove the return value. - sig.output = ReturnType::Default; - - let value = &value_argument.pat; - let method = quote! { - #sig { - use salsa::Setter; - let data = #create_data_ident(self); - data.#setter_ident(self).to(Some(#value)); - } - }; - method.to_tokens(tokens); - } -} - -pub(crate) struct InputSetterWithDurability { - pub(crate) signature: syn::Signature, - pub(crate) return_type: syn::Type, - pub(crate) create_data_ident: Ident, -} - -impl ToTokens for InputSetterWithDurability { - fn to_tokens(&self, tokens: &mut proc_macro2::TokenStream) { - let sig = &mut self.signature.clone(); - - let ty = &self.return_type; - let fn_ident = &sig.ident; - let setter_ident = format_ident!("set_{}", fn_ident); - - let create_data_ident = &self.create_data_ident; - - sig.ident = format_ident!("set_{}_with_durability", fn_ident); - - let value_argument: PatType = parse_quote!(__value: #ty); - sig.inputs.push(FnArg::Typed(value_argument.clone())); - - let durability_argument: PatType = parse_quote!(durability: salsa::Durability); - sig.inputs.push(FnArg::Typed(durability_argument.clone())); - - // make `&self` `&mut self` instead. - let mut_receiver: Receiver = parse_quote!(&mut self); - if let Some(og) = sig.inputs.first_mut() { - *og = FnArg::Receiver(mut_receiver) - } - - // remove the return value. - sig.output = ReturnType::Default; - - let value = &value_argument.pat; - let durability = &durability_argument.pat; - let method = quote! { - #sig { - use salsa::Setter; - let data = #create_data_ident(self); - data.#setter_ident(self) - .with_durability(#durability) - .to(Some(#value)); - } - }; - method.to_tokens(tokens); - } -} - -pub(crate) enum SetterKind { - Plain(InputSetter), - WithDurability(InputSetterWithDurability), -} - -impl ToTokens for SetterKind { - fn to_tokens(&self, tokens: &mut proc_macro2::TokenStream) { - match self { - SetterKind::Plain(input_setter) => input_setter.to_tokens(tokens), - SetterKind::WithDurability(input_setter_with_durability) => { - input_setter_with_durability.to_tokens(tokens) - } - } - } -} - pub(crate) struct Transparent { pub(crate) signature: syn::Signature, pub(crate) pat_and_tys: Vec<PatType>, @@ -270,7 +144,6 @@ impl ToTokens for Transparent { #[allow(clippy::large_enum_variant)] pub(crate) enum Queries { TrackedQuery(TrackedQuery), - InputQuery(InputQuery), Transparent(Transparent), } @@ -278,7 +151,6 @@ impl ToTokens for Queries { fn to_tokens(&self, tokens: &mut proc_macro2::TokenStream) { match self { Queries::TrackedQuery(tracked_query) => tracked_query.to_tokens(tokens), - Queries::InputQuery(input_query) => input_query.to_tokens(tokens), Queries::Transparent(transparent) => transparent.to_tokens(tokens), } } |