Update to latest syn and quote

This commit is contained in:
David Tolnay
2016-10-03 21:09:52 -07:00
parent f4e1ffa2cb
commit b4d5c26f4e
5 changed files with 32 additions and 30 deletions
+2 -2
View File
@@ -22,8 +22,8 @@ with-syn = []
[dependencies] [dependencies]
clippy = { version = "^0.*", optional = true } clippy = { version = "^0.*", optional = true }
quote = "0.2" quote = "0.3"
serde_codegen_internals = { version = "=0.9.0", default-features = false, path = "../serde_codegen_internals" } serde_codegen_internals = { version = "=0.9.0", default-features = false, path = "../serde_codegen_internals" }
syn = { version = "0.8", features = ["aster", "visit"] } syn = { version = "0.9", features = ["aster", "visit"] }
syntex = { version = "^0.44.0", optional = true } syntex = { version = "^0.44.0", optional = true }
syntex_syntax = { version = "^0.44.0", optional = true } syntex_syntax = { version = "^0.44.0", optional = true }
+19 -19
View File
@@ -185,17 +185,17 @@ fn deserialize_visitor(generics: &syn::Generics) -> (Tokens, Tokens, Tokens) {
let ty_param_idents = if ty_param_idents.is_empty() { let ty_param_idents = if ty_param_idents.is_empty() {
None None
} else { } else {
Some(quote!(::<#(ty_param_idents),*>)) Some(quote!(::<#(#ty_param_idents),*>))
}; };
let phantom_exprs = iter::repeat(quote!(::std::marker::PhantomData)).take(num_phantoms); let phantom_exprs = iter::repeat(quote!(::std::marker::PhantomData)).take(num_phantoms);
( (
quote! { quote! {
struct __Visitor #generics ( #(phantom_types),* ) #where_clause; struct __Visitor #generics ( #(#phantom_types),* ) #where_clause;
}, },
quote!(__Visitor <#(all_params),*> ), quote!(__Visitor <#(#all_params),*> ),
quote!(__Visitor #ty_param_idents ( #(phantom_exprs),* )), quote!(__Visitor #ty_param_idents ( #(#phantom_exprs),* )),
) )
} }
} }
@@ -358,17 +358,17 @@ fn deserialize_seq(
quote!(#ident: #value) quote!(#ident: #value)
}); });
quote! { quote! {
#type_path { #(args),* } #type_path { #(#args),* }
} }
} else { } else {
let args = (0..fields.len()).map(|i| aster::id(format!("__field{}", i))); let args = (0..fields.len()).map(|i| aster::id(format!("__field{}", i)));
quote! { quote! {
#type_path ( #(args),* ) #type_path ( #(#args),* )
} }
}; };
quote! { quote! {
#(let_values)* #(#let_values)*
try!(visitor.end()); try!(visitor.end());
@@ -505,7 +505,7 @@ fn deserialize_item_enum(
let variant_names = variants.iter().map(|variant| variant.ident.to_string()); let variant_names = variants.iter().map(|variant| variant.ident.to_string());
let variants_stmt = quote! { let variants_stmt = quote! {
const VARIANTS: &'static [&'static str] = &[ #(variant_names),* ]; const VARIANTS: &'static [&'static str] = &[ #(#variant_names),* ];
}; };
let ignored_arm = if item_attrs.deny_unknown_fields() { let ignored_arm = if item_attrs.deny_unknown_fields() {
@@ -551,7 +551,7 @@ fn deserialize_item_enum(
where __V: _serde::de::VariantVisitor, where __V: _serde::de::VariantVisitor,
{ {
match try!(visitor.visit_variant()) { match try!(visitor.visit_variant()) {
#(variant_arms)* #(#variant_arms)*
} }
} }
} }
@@ -678,7 +678,7 @@ fn deserialize_field_visitor(
let index_body = quote! { let index_body = quote! {
match value { match value {
#(index_field_arms)* #(#index_field_arms)*
_ => #fallthrough_index_arm_expr _ => #fallthrough_index_arm_expr
} }
}; };
@@ -704,7 +704,7 @@ fn deserialize_field_visitor(
let str_body = quote! { let str_body = quote! {
match value { match value {
#(str_field_arms)* #(#str_field_arms)*
_ => #fallthrough_str_arm_expr _ => #fallthrough_str_arm_expr
} }
}; };
@@ -732,7 +732,7 @@ fn deserialize_field_visitor(
let bytes_body = quote! { let bytes_body = quote! {
match value { match value {
#(bytes_field_arms)* #(#bytes_field_arms)*
_ => #fallthrough_bytes_arm_expr _ => #fallthrough_bytes_arm_expr
} }
}; };
@@ -740,7 +740,7 @@ fn deserialize_field_visitor(
quote! { quote! {
#[allow(non_camel_case_types)] #[allow(non_camel_case_types)]
enum __Field { enum __Field {
#(field_idents,)* #(#field_idents,)*
#ignore_variant #ignore_variant
} }
@@ -809,7 +809,7 @@ fn deserialize_struct_visitor(
}); });
let fields_stmt = quote! { let fields_stmt = quote! {
const FIELDS: &'static [&'static str] = &[ #(field_names),* ]; const FIELDS: &'static [&'static str] = &[ #(#field_names),* ];
}; };
(field_visitor, fields_stmt, visit_map) (field_visitor, fields_stmt, visit_map)
@@ -922,21 +922,21 @@ fn deserialize_map(
}); });
quote! { quote! {
#(let_values)* #(#let_values)*
while let Some(key) = try!(visitor.visit_key::<__Field>()) { while let Some(key) = try!(visitor.visit_key::<__Field>()) {
match key { match key {
#(value_arms)* #(#value_arms)*
#(skipped_arms)* #(#skipped_arms)*
#ignored_arm #ignored_arm
} }
} }
try!(visitor.end()); try!(visitor.end());
#(extract_values)* #(#extract_values)*
Ok(#struct_path { #(result),* }) Ok(#struct_path { #(#result),* })
} }
} }
+3 -1
View File
@@ -201,7 +201,7 @@ pub fn expand_single_item(item: &str) -> Result<String, String> {
let mut de = false; let mut de = false;
let item = syn::MacroInput { let item = syn::MacroInput {
attrs: item.attrs.into_iter().flat_map(|attr| { attrs: item.attrs.into_iter().flat_map(|attr| {
if attr.is_sugared_doc { if attr.is_sugared_doc || attr.style != syn::AttrStyle::Outer {
return Some(attr); return Some(attr);
} }
let (name, nested) = match attr.value { let (name, nested) = match attr.value {
@@ -210,6 +210,7 @@ pub fn expand_single_item(item: &str) -> Result<String, String> {
}; };
if name != "derive" { if name != "derive" {
return Some(syn::Attribute { return Some(syn::Attribute {
style: syn::AttrStyle::Outer,
value: syn::MetaItem::List(name, nested), value: syn::MetaItem::List(name, nested),
is_sugared_doc: false, is_sugared_doc: false,
}); });
@@ -231,6 +232,7 @@ pub fn expand_single_item(item: &str) -> Result<String, String> {
None None
} else { } else {
Some(syn::Attribute { Some(syn::Attribute {
style: syn::AttrStyle::Outer,
value: syn::MetaItem::List(name, rest), value: syn::MetaItem::List(name, rest),
is_sugared_doc: false, is_sugared_doc: false,
}) })
+7 -7
View File
@@ -168,7 +168,7 @@ fn serialize_tuple_struct(
quote! { quote! {
let #let_mut __serde_state = try!(_serializer.serialize_tuple_struct(#type_name, #len)); let #let_mut __serde_state = try!(_serializer.serialize_tuple_struct(#type_name, #len));
#(serialize_stmts)* #(#serialize_stmts)*
_serializer.serialize_tuple_struct_end(__serde_state) _serializer.serialize_tuple_struct_end(__serde_state)
} }
} }
@@ -209,7 +209,7 @@ fn serialize_struct(
quote! { quote! {
let #let_mut __serde_state = try!(_serializer.serialize_struct(#type_name, #len)); let #let_mut __serde_state = try!(_serializer.serialize_struct(#type_name, #len));
#(serialize_fields)* #(#serialize_fields)*
_serializer.serialize_struct_end(__serde_state) _serializer.serialize_struct_end(__serde_state)
} }
} }
@@ -238,7 +238,7 @@ fn serialize_item_enum(
quote! { quote! {
match *self { match *self {
#(arms)* #(#arms)*
} }
} }
} }
@@ -290,7 +290,7 @@ fn serialize_variant(
}) })
.collect(); .collect();
let pat = quote!(#type_ident::#variant_ident(#(field_names),*)); let pat = quote!(#type_ident::#variant_ident(#(#field_names),*));
let block = serialize_tuple_variant( let block = serialize_tuple_variant(
type_name, type_name,
@@ -313,7 +313,7 @@ fn serialize_variant(
}; };
quote!(ref #id) quote!(ref #id)
}); });
let pat = quote!(#type_ident::#variant_ident { #(fields),* }); let pat = quote!(#type_ident::#variant_ident { #(#fields),* });
let block = serialize_struct_variant( let block = serialize_struct_variant(
variant_index, variant_index,
@@ -381,7 +381,7 @@ fn serialize_tuple_variant(
#variant_index, #variant_index,
#variant_name, #variant_name,
#len)); #len));
#(serialize_stmts)* #(#serialize_stmts)*
_serializer.serialize_tuple_variant_end(__serde_state) _serializer.serialize_tuple_variant_end(__serde_state)
} }
} }
@@ -428,7 +428,7 @@ fn serialize_struct_variant(
#variant_name, #variant_name,
#len, #len,
)); ));
#(serialize_fields)* #(#serialize_fields)*
_serializer.serialize_struct_variant_end(__serde_state) _serializer.serialize_struct_variant_end(__serde_state)
} }
} }
+1 -1
View File
@@ -15,4 +15,4 @@ unstable-testing = ["clippy"]
[dependencies] [dependencies]
clippy = { version = "^0.*", optional = true } clippy = { version = "^0.*", optional = true }
syn = "0.8" syn = "0.9"