Skip to content

Commit

Permalink
Updating darling to 0.20
Browse files Browse the repository at this point in the history
  • Loading branch information
mettke committed Jul 25, 2023
1 parent fa266ce commit 1e25c73
Show file tree
Hide file tree
Showing 19 changed files with 94 additions and 76 deletions.
2 changes: 1 addition & 1 deletion common/dynaql/derive/Cargo.toml
Expand Up @@ -23,5 +23,5 @@ syn = { version = "2", features = ["full", "extra-traits", "visit-mut", "visit"]
quote = "1"
Inflector = { version = "0.11", default-features = false }
proc-macro-crate = "1"
darling = "0.14"
darling = "0.20"
thiserror = { workspace = true }
10 changes: 4 additions & 6 deletions common/dynaql/derive/src/args.rs
@@ -1,12 +1,10 @@
use std::fmt::{self, Display, Formatter};

use darling::ast::{Data, Fields};
use darling::ast::{Data, Fields, NestedMeta};
use darling::util::{Ignored, SpannedValue};
use darling::{FromDeriveInput, FromField, FromMeta, FromVariant};
use inflector::Inflector;
use syn::{
Attribute, Generics, Ident, Lit, LitBool, LitStr, Meta, NestedMeta, Path, Type, Visibility,
};
use syn::{Attribute, Generics, Ident, Lit, LitBool, LitStr, Meta, Path, Type, Visibility};

use crate::validators::Validators;

Expand Down Expand Up @@ -433,7 +431,7 @@ pub struct InterfaceFieldArgument {
pub name: String,
#[darling(default)]
pub desc: Option<String>,
#[darling(rename = "type")]
#[darling(rename = "r#type")]
pub ty: LitStr,
#[darling(default)]
pub default: Option<DefaultValue>,
Expand All @@ -448,7 +446,7 @@ pub struct InterfaceFieldArgument {
#[derive(FromMeta)]
pub struct InterfaceField {
pub name: String,
#[darling(rename = "type")]
#[darling(rename = "r#type")]
pub ty: LitStr,
#[darling(default)]
pub method: Option<String>,
Expand Down
8 changes: 4 additions & 4 deletions common/dynaql/derive/src/complex_object.rs
Expand Up @@ -32,7 +32,7 @@ pub fn generate(
// Computation of the derivated fields
let mut derived_impls = vec![];
for item in &mut item_impl.items {
if let ImplItem::Method(method) = item {
if let ImplItem::Fn(method) = item {
let method_args: args::ComplexObjectField =
parse_graphql_attrs(&method.attrs)?.unwrap_or_default();

Expand Down Expand Up @@ -105,15 +105,15 @@ pub fn generate(

new_impl.block = syn::parse2::<Block>(new_block).expect("invalid block");

derived_impls.push(ImplItem::Method(new_impl));
derived_impls.push(ImplItem::Fn(new_impl));
}
}
}
}
item_impl.items.append(&mut derived_impls);

for item in &mut item_impl.items {
if let ImplItem::Method(method) = item {
if let ImplItem::Fn(method) = item {
let method_args: args::ComplexObjectField =
parse_graphql_attrs(&method.attrs)?.unwrap_or_default();
if method_args.skip {
Expand Down Expand Up @@ -164,7 +164,7 @@ pub fn generate(
.rename_fields
.rename(method.sig.ident.unraw().to_string(), RenameTarget::Field)
});
let field_desc = get_rustdoc(&method.attrs)?
let field_desc = get_rustdoc(&method.attrs)
.map(|s| quote! { ::std::option::Option::Some(#s) })
.unwrap_or_else(|| quote! {::std::option::Option::None});
let field_deprecation = gen_deprecation(&method_args.deprecation, &crate_name);
Expand Down
8 changes: 4 additions & 4 deletions common/dynaql/derive/src/description.rs
Expand Up @@ -2,19 +2,19 @@ use proc_macro::TokenStream;
use quote::quote;

use crate::args;
use crate::utils::{get_crate_name, get_rustdoc, GeneratorResult};
use crate::utils::{get_crate_name, get_rustdoc};

pub fn generate(desc_args: &args::Description) -> GeneratorResult<TokenStream> {
pub fn generate(desc_args: &args::Description) -> TokenStream {
let crate_name = get_crate_name(desc_args.internal);
let ident = &desc_args.ident;
let (impl_generics, ty_generics, where_clause) = desc_args.generics.split_for_impl();
let doc = get_rustdoc(&desc_args.attrs)?.unwrap_or_default();
let doc = get_rustdoc(&desc_args.attrs).unwrap_or_default();
let expanded = quote! {
impl #impl_generics #crate_name::Description for #ident #ty_generics #where_clause {
fn description() -> &'static str {
#doc
}
}
};
Ok(expanded.into())
expanded.into()
}
2 changes: 1 addition & 1 deletion common/dynaql/derive/src/directive.rs
Expand Up @@ -21,7 +21,7 @@ pub fn generate(
.name
.clone()
.unwrap_or_else(|| item_fn.sig.ident.to_string());
let desc = get_rustdoc(&item_fn.attrs)?
let desc = get_rustdoc(&item_fn.attrs)
.map(|s| quote!(::std::option::Option::Some(#s)))
.unwrap_or_else(|| quote!(::std::option::Option::None));
let visible = visible_fn(&directive_args.visible);
Expand Down
4 changes: 2 additions & 2 deletions common/dynaql/derive/src/enum.rs
Expand Up @@ -20,7 +20,7 @@ pub fn generate(enum_args: &args::Enum) -> GeneratorResult<TokenStream> {
.clone()
.unwrap_or_else(|| RenameTarget::Type.rename(ident.to_string()));

let desc = get_rustdoc(&enum_args.attrs)?
let desc = get_rustdoc(&enum_args.attrs)
.map(|s| quote! { ::std::option::Option::Some(::std::borrow::ToOwned::to_owned(#s)) })
.unwrap_or_else(|| quote! {::std::option::Option::None});

Expand All @@ -47,7 +47,7 @@ pub fn generate(enum_args: &args::Enum) -> GeneratorResult<TokenStream> {
.rename(variant.ident.unraw().to_string(), RenameTarget::EnumItem)
});
let item_deprecation = gen_deprecation(&variant.deprecation, &crate_name);
let item_desc = get_rustdoc(&variant.attrs)?
let item_desc = get_rustdoc(&variant.attrs)
.map(|s| quote! { ::std::option::Option::Some(::std::borrow::ToOwned::to_owned(#s)) })
.unwrap_or_else(|| quote! {::std::option::Option::None});

Expand Down
6 changes: 3 additions & 3 deletions common/dynaql/derive/src/input_object.rs
Expand Up @@ -31,7 +31,7 @@ pub fn generate(object_args: &args::InputObject) -> GeneratorResult<TokenStream>
let attrs = field
.attrs
.iter()
.filter(|attr| !attr.path.is_ident("field"))
.filter(|attr| !attr.path().is_ident("field"))
.collect::<Vec<_>>();
struct_fields.push(quote! {
#(#attrs)*
Expand All @@ -45,7 +45,7 @@ pub fn generate(object_args: &args::InputObject) -> GeneratorResult<TokenStream>
.or_else(|| object_args.input_name.clone())
.unwrap_or_else(|| RenameTarget::Type.rename(ident.to_string()));

let desc = get_rustdoc(&object_args.attrs)?
let desc = get_rustdoc(&object_args.attrs)
.map(|s| quote! { ::std::option::Option::Some(::std::borrow::ToOwned::to_owned(#s)) })
.unwrap_or_else(|| quote! {::std::option::Option::None});

Expand Down Expand Up @@ -115,7 +115,7 @@ pub fn generate(object_args: &args::InputObject) -> GeneratorResult<TokenStream>
continue;
}

let desc = get_rustdoc(&field.attrs)?
let desc = get_rustdoc(&field.attrs)
.map(|s| quote! { ::std::option::Option::Some(#s) })
.unwrap_or_else(|| quote! {::std::option::Option::None});
let default = generate_default(&field.default, &field.default_with)?;
Expand Down
2 changes: 1 addition & 1 deletion common/dynaql/derive/src/interface.rs
Expand Up @@ -35,7 +35,7 @@ pub fn generate(interface_args: &args::Interface) -> GeneratorResult<TokenStream
.clone()
.unwrap_or_else(|| RenameTarget::Type.rename(ident.to_string()));

let desc = get_rustdoc(&interface_args.attrs)?
let desc = get_rustdoc(&interface_args.attrs)
.map(|s| quote! { ::std::option::Option::Some(::std::borrow::ToOwned::to_owned(#s)) })
.unwrap_or_else(|| quote! {::std::option::Option::None});

Expand Down
39 changes: 29 additions & 10 deletions common/dynaql/derive/src/lib.rs
Expand Up @@ -31,12 +31,34 @@ mod validators;
use darling::{FromDeriveInput, FromMeta};
use proc_macro::TokenStream;
use syn::parse_macro_input;
use syn::{AttributeArgs, DeriveInput, ItemFn, ItemImpl};
use syn::{DeriveInput, ItemFn, ItemImpl};

struct AttributeArgs(Vec<darling::ast::NestedMeta>);

impl syn::parse::Parse for AttributeArgs {
fn parse(input: syn::parse::ParseStream<'_>) -> syn::Result<Self> {
let mut metas = Vec::new();

loop {
if input.is_empty() {
break;
}
let value = input.parse()?;
metas.push(value);
if input.is_empty() {
break;
}
input.parse::<syn::Token![,]>()?;
}

Ok(Self(metas))
}
}

#[proc_macro_attribute]
#[allow(non_snake_case)]
pub fn Object(args: TokenStream, input: TokenStream) -> TokenStream {
let object_args = match args::Object::from_list(&parse_macro_input!(args as AttributeArgs)) {
let object_args = match args::Object::from_list(&parse_macro_input!(args as AttributeArgs).0) {
Ok(object_args) => object_args,
Err(err) => return TokenStream::from(err.write_errors()),
};
Expand Down Expand Up @@ -64,7 +86,7 @@ pub fn derive_simple_object(input: TokenStream) -> TokenStream {
#[allow(non_snake_case)]
pub fn ComplexObject(args: TokenStream, input: TokenStream) -> TokenStream {
let object_args =
match args::ComplexObject::from_list(&parse_macro_input!(args as AttributeArgs)) {
match args::ComplexObject::from_list(&parse_macro_input!(args as AttributeArgs).0) {
Ok(object_args) => object_args,
Err(err) => return TokenStream::from(err.write_errors()),
};
Expand Down Expand Up @@ -130,7 +152,7 @@ pub fn derive_union(input: TokenStream) -> TokenStream {
#[allow(non_snake_case)]
pub fn Subscription(args: TokenStream, input: TokenStream) -> TokenStream {
let object_args =
match args::Subscription::from_list(&parse_macro_input!(args as AttributeArgs)) {
match args::Subscription::from_list(&parse_macro_input!(args as AttributeArgs).0) {
Ok(object_args) => object_args,
Err(err) => return TokenStream::from(err.write_errors()),
};
Expand All @@ -144,7 +166,7 @@ pub fn Subscription(args: TokenStream, input: TokenStream) -> TokenStream {
#[proc_macro_attribute]
#[allow(non_snake_case)]
pub fn Scalar(args: TokenStream, input: TokenStream) -> TokenStream {
let scalar_args = match args::Scalar::from_list(&parse_macro_input!(args as AttributeArgs)) {
let scalar_args = match args::Scalar::from_list(&parse_macro_input!(args as AttributeArgs).0) {
Ok(scalar_args) => scalar_args,
Err(err) => return TokenStream::from(err.write_errors()),
};
Expand Down Expand Up @@ -189,10 +211,7 @@ pub fn derive_description(input: TokenStream) -> TokenStream {
Ok(desc_args) => desc_args,
Err(err) => return TokenStream::from(err.write_errors()),
};
match description::generate(&desc_args) {
Ok(expanded) => expanded,
Err(err) => err.write_errors().into(),
}
description::generate(&desc_args)
}

#[proc_macro_derive(NewType, attributes(graphql))]
Expand All @@ -212,7 +231,7 @@ pub fn derive_newtype(input: TokenStream) -> TokenStream {
#[allow(non_snake_case)]
pub fn Directive(args: TokenStream, input: TokenStream) -> TokenStream {
let directive_args =
match args::Directive::from_list(&parse_macro_input!(args as AttributeArgs)) {
match args::Directive::from_list(&parse_macro_input!(args as AttributeArgs).0) {
Ok(directive_args) => directive_args,
Err(err) => return TokenStream::from(err.write_errors()),
};
Expand Down
2 changes: 1 addition & 1 deletion common/dynaql/derive/src/merged_object.rs
Expand Up @@ -17,7 +17,7 @@ pub fn generate(object_args: &args::MergedObject) -> GeneratorResult<TokenStream
.clone()
.unwrap_or_else(|| RenameTarget::Type.rename(ident.to_string()));

let desc = get_rustdoc(&object_args.attrs)?
let desc = get_rustdoc(&object_args.attrs)
.map(|s| quote! { ::std::option::Option::Some(::std::borrow::ToOwned::to_owned(#s)) })
.unwrap_or_else(|| quote! {::std::option::Option::None});

Expand Down
2 changes: 1 addition & 1 deletion common/dynaql/derive/src/merged_subscription.rs
Expand Up @@ -16,7 +16,7 @@ pub fn generate(object_args: &args::MergedSubscription) -> GeneratorResult<Token
.clone()
.unwrap_or_else(|| RenameTarget::Type.rename(ident.to_string()));

let desc = get_rustdoc(&object_args.attrs)?
let desc = get_rustdoc(&object_args.attrs)
.map(|s| quote! { ::std::option::Option::Some(#s) })
.unwrap_or_else(|| quote! {::std::option::Option::None});

Expand Down
2 changes: 1 addition & 1 deletion common/dynaql/derive/src/newtype.rs
Expand Up @@ -16,7 +16,7 @@ pub fn generate(newtype_args: &args::NewType) -> GeneratorResult<TokenStream> {
NewTypeName::Rust => Some(RenameTarget::Type.rename(ident.to_string())),
NewTypeName::Original => None,
};
let desc = get_rustdoc(&newtype_args.attrs)?
let desc = get_rustdoc(&newtype_args.attrs)
.map(|s| quote! { ::std::option::Option::Some(#s) })
.unwrap_or_else(|| quote! {::std::option::Option::None});
let visible = visible_fn(&newtype_args.visible);
Expand Down
10 changes: 5 additions & 5 deletions common/dynaql/derive/src/object.rs
Expand Up @@ -33,7 +33,7 @@ pub fn generate(
let desc = if object_args.use_type_description {
quote! { ::std::option::Option::Some(::std::borrow::ToOwned::to_owned(<Self as #crate_name::Description>::description())) }
} else {
get_rustdoc(&item_impl.attrs)?
get_rustdoc(&item_impl.attrs)
.map(|s| quote!(::std::option::Option::Some(::std::borrow::ToOwned::to_owned(#s))))
.unwrap_or_else(|| quote!(::std::option::Option::None))
};
Expand All @@ -47,7 +47,7 @@ pub fn generate(
// Computation of the derivated fields
let mut derived_impls = vec![];
for item in &mut item_impl.items {
if let ImplItem::Method(method) = item {
if let ImplItem::Fn(method) = item {
let method_args: args::ObjectField =
parse_graphql_attrs(&method.attrs)?.unwrap_or_default();

Expand Down Expand Up @@ -120,15 +120,15 @@ pub fn generate(

new_impl.block = syn::parse2::<Block>(new_block).expect("invalid block");

derived_impls.push(ImplItem::Method(new_impl));
derived_impls.push(ImplItem::Fn(new_impl));
}
}
}
}
item_impl.items.append(&mut derived_impls);

for item in &mut item_impl.items {
if let ImplItem::Method(method) = item {
if let ImplItem::Fn(method) = item {
let method_args: args::ObjectField =
parse_graphql_attrs(&method.attrs)?.unwrap_or_default();

Expand Down Expand Up @@ -300,7 +300,7 @@ pub fn generate(
.rename_fields
.rename(method.sig.ident.unraw().to_string(), RenameTarget::Field)
});
let field_desc = get_rustdoc(&method.attrs)?
let field_desc = get_rustdoc(&method.attrs)
.map(|s| quote! { ::std::option::Option::Some(::std::borrow::ToOwned::to_owned(#s)) })
.unwrap_or_else(|| quote! {::std::option::Option::None});
let field_deprecation = gen_deprecation(&method_args.deprecation, &crate_name);
Expand Down
2 changes: 1 addition & 1 deletion common/dynaql/derive/src/scalar.rs
Expand Up @@ -21,7 +21,7 @@ pub fn generate(
let desc = if scalar_args.use_type_description {
quote! { ::std::option::Option::Some(::std::borrow::ToOwned::to_owned(<Self as #crate_name::Description>::description())) }
} else {
get_rustdoc(&item_impl.attrs)?
get_rustdoc(&item_impl.attrs)
.map(|s| quote!(::std::option::Option::Some(::std::borrow::ToOwned::to_owned(#s))))
.unwrap_or_else(|| quote!(::std::option::Option::None))
};
Expand Down
10 changes: 5 additions & 5 deletions common/dynaql/derive/src/simple_object.rs
Expand Up @@ -6,7 +6,7 @@ use quote::quote;
use std::str::FromStr;
use syn::ext::IdentExt;
use syn::visit::Visit;
use syn::{Error, Ident, LifetimeDef, Path, Type};
use syn::{Error, Ident, Lifetime, Path, Type};

use crate::args::{self, RenameRuleExt, RenameTarget, SimpleObjectField};
use crate::utils::{
Expand Down Expand Up @@ -36,7 +36,7 @@ pub fn generate(object_args: &args::SimpleObject) -> GeneratorResult<TokenStream
.clone()
.unwrap_or_else(|| RenameTarget::Type.rename(ident.to_string()));

let desc = get_rustdoc(&object_args.attrs)?
let desc = get_rustdoc(&object_args.attrs)
.map(|s| quote! { ::std::option::Option::Some(::std::borrow::ToOwned::to_owned(#s)) })
.unwrap_or_else(|| quote! {::std::option::Option::None});

Expand Down Expand Up @@ -113,7 +113,7 @@ pub fn generate(object_args: &args::SimpleObject) -> GeneratorResult<TokenStream
.rename_fields
.rename(ident.unraw().to_string(), RenameTarget::Field)
});
let field_desc = get_rustdoc(&field.attrs)?
let field_desc = get_rustdoc(&field.attrs)
.map(|s| quote! {::std::option::Option::Some(::std::borrow::ToOwned::to_owned(#s))})
.unwrap_or_else(|| quote! {::std::option::Option::None});
let field_deprecation = gen_deprecation(&field.deprecation, &crate_name);
Expand Down Expand Up @@ -357,11 +357,11 @@ pub fn generate(object_args: &args::SimpleObject) -> GeneratorResult<TokenStream

#[derive(Default)]
struct GetLifetimes<'a> {
lifetimes: Vec<&'a LifetimeDef>,
lifetimes: Vec<&'a Lifetime>,
}

impl<'a> Visit<'a> for GetLifetimes<'a> {
fn visit_lifetime_def(&mut self, i: &'a LifetimeDef) {
fn visit_lifetime(&mut self, i: &'a Lifetime) {
self.lifetimes.push(i);
}
}
Expand Down
6 changes: 3 additions & 3 deletions common/dynaql/derive/src/subscription.rs
Expand Up @@ -32,7 +32,7 @@ pub fn generate(
let desc = if subscription_args.use_type_description {
quote! { ::std::option::Option::Some(::std::borrow::ToOwned::to_owned(<Self as #crate_name::Description>::description())) }
} else {
get_rustdoc(&item_impl.attrs)?
get_rustdoc(&item_impl.attrs)
.map(|s| quote!(::std::option::Option::Some(::std::borrow::ToOwned::to_owned(#s))))
.unwrap_or_else(|| quote!(::std::option::Option::None))
};
Expand All @@ -41,7 +41,7 @@ pub fn generate(
let mut schema_fields = Vec::new();

for item in &mut item_impl.items {
if let ImplItem::Method(method) = item {
if let ImplItem::Fn(method) = item {
let field: SubscriptionField = parse_graphql_attrs(&method.attrs)?.unwrap_or_default();
if field.skip {
remove_graphql_attrs(&mut method.attrs);
Expand All @@ -54,7 +54,7 @@ pub fn generate(
.rename_fields
.rename(method.sig.ident.unraw().to_string(), RenameTarget::Field)
});
let field_desc = get_rustdoc(&method.attrs)?
let field_desc = get_rustdoc(&method.attrs)
.map(|s| quote! {::std::option::Option::Some(::std::borrow::ToOwned::to_owned(#s))})
.unwrap_or_else(|| quote! {::std::option::Option::None});
let field_deprecation = gen_deprecation(&field.deprecation, &crate_name);
Expand Down

0 comments on commit 1e25c73

Please sign in to comment.