From 98eddf9b292cb42e28b789621434092606feb664 Mon Sep 17 00:00:00 2001 From: David Tolnay Date: Sat, 1 Sep 2018 23:03:06 -0700 Subject: [PATCH 1/3] Update to syn 0.15-rc1 --- serde_derive/Cargo.toml | 2 +- serde_derive/src/internals/attr.rs | 20 ++++++++++---------- serde_derive_internals/Cargo.toml | 2 +- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/serde_derive/Cargo.toml b/serde_derive/Cargo.toml index 7fa379e2..7a51a950 100644 --- a/serde_derive/Cargo.toml +++ b/serde_derive/Cargo.toml @@ -26,7 +26,7 @@ proc-macro = true [dependencies] proc-macro2 = "0.4" quote = "0.6.3" -syn = { version = "0.14", features = ["visit"] } +syn-next = { version = "0.15.0-rc1", features = ["visit"] } [dev-dependencies] serde = { version = "1.0", path = "../serde" } diff --git a/serde_derive/src/internals/attr.rs b/serde_derive/src/internals/attr.rs index 3f399ded..711339b1 100644 --- a/serde_derive/src/internals/attr.rs +++ b/serde_derive/src/internals/attr.rs @@ -11,8 +11,8 @@ use proc_macro2::{Group, Span, TokenStream, TokenTree}; use std::collections::BTreeSet; use std::str::FromStr; use syn; +use syn::parse::{self, Parse, ParseStream}; use syn::punctuated::Punctuated; -use syn::synom::{ParseError, Synom}; use syn::Ident; use syn::Meta::{List, NameValue, Word}; use syn::NestedMeta::{Literal, Meta}; @@ -1300,11 +1300,10 @@ fn parse_lit_into_lifetimes( struct BorrowedLifetimes(Punctuated); - impl Synom for BorrowedLifetimes { - named!(parse -> Self, map!( - call!(Punctuated::parse_separated_nonempty), - BorrowedLifetimes - )); + impl Parse for BorrowedLifetimes { + fn parse(input: ParseStream) -> parse::Result { + Punctuated::parse_separated_nonempty(input).map(BorrowedLifetimes) + } } if let Ok(BorrowedLifetimes(lifetimes)) = parse_lit_str(string) { @@ -1513,7 +1512,8 @@ fn collect_lifetimes(ty: &syn::Type, out: &mut BTreeSet) { syn::GenericArgument::Binding(ref binding) => { collect_lifetimes(&binding.ty, out); } - syn::GenericArgument::Const(_) => {} + syn::GenericArgument::Constraint(_) + | syn::GenericArgument::Const(_) => {} } } } @@ -1535,15 +1535,15 @@ fn collect_lifetimes(ty: &syn::Type, out: &mut BTreeSet) { } } -fn parse_lit_str(s: &syn::LitStr) -> Result +fn parse_lit_str(s: &syn::LitStr) -> parse::Result where - T: Synom, + T: Parse, { let tokens = try!(spanned_tokens(s)); syn::parse2(tokens) } -fn spanned_tokens(s: &syn::LitStr) -> Result { +fn spanned_tokens(s: &syn::LitStr) -> parse::Result { let stream = try!(syn::parse_str(&s.value())); Ok(respan_token_stream(stream, s.span())) } diff --git a/serde_derive_internals/Cargo.toml b/serde_derive_internals/Cargo.toml index 12cc7c8d..3ce4add1 100644 --- a/serde_derive_internals/Cargo.toml +++ b/serde_derive_internals/Cargo.toml @@ -16,7 +16,7 @@ path = "lib.rs" [dependencies] proc-macro2 = "0.4" -syn = { version = "0.14", default-features = false, features = ["derive", "parsing", "clone-impls"] } +syn-next = { version = "0.15.0-rc1", default-features = false, features = ["derive", "parsing", "clone-impls"] } [badges] travis-ci = { repository = "serde-rs/serde" } From 27bd6408120f9e9989129ddc0d14d8de321a15d4 Mon Sep 17 00:00:00 2001 From: David Tolnay Date: Thu, 6 Sep 2018 21:12:43 -0700 Subject: [PATCH 2/3] Update to syn 0.15 --- serde_derive/Cargo.toml | 2 +- serde_derive_internals/Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/serde_derive/Cargo.toml b/serde_derive/Cargo.toml index 7a51a950..798f3faa 100644 --- a/serde_derive/Cargo.toml +++ b/serde_derive/Cargo.toml @@ -26,7 +26,7 @@ proc-macro = true [dependencies] proc-macro2 = "0.4" quote = "0.6.3" -syn-next = { version = "0.15.0-rc1", features = ["visit"] } +syn = { version = "0.15", features = ["visit"] } [dev-dependencies] serde = { version = "1.0", path = "../serde" } diff --git a/serde_derive_internals/Cargo.toml b/serde_derive_internals/Cargo.toml index 3ce4add1..cd19b6e5 100644 --- a/serde_derive_internals/Cargo.toml +++ b/serde_derive_internals/Cargo.toml @@ -16,7 +16,7 @@ path = "lib.rs" [dependencies] proc-macro2 = "0.4" -syn-next = { version = "0.15.0-rc1", default-features = false, features = ["derive", "parsing", "clone-impls"] } +syn = { version = "0.15", default-features = false, features = ["derive", "parsing", "clone-impls"] } [badges] travis-ci = { repository = "serde-rs/serde" } From b49bd52a53ca04edce6fe6b57a4e3f08c186780a Mon Sep 17 00:00:00 2001 From: David Tolnay Date: Thu, 6 Sep 2018 21:14:18 -0700 Subject: [PATCH 3/3] Use parse_macro_input to report parse errors --- serde_derive/src/lib.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/serde_derive/src/lib.rs b/serde_derive/src/lib.rs index 6876c24a..5d2e5b85 100644 --- a/serde_derive/src/lib.rs +++ b/serde_derive/src/lib.rs @@ -81,7 +81,7 @@ mod try; #[proc_macro_derive(Serialize, attributes(serde))] pub fn derive_serialize(input: TokenStream) -> TokenStream { - let input: DeriveInput = syn::parse(input).unwrap(); + let input = parse_macro_input!(input as DeriveInput); ser::expand_derive_serialize(&input) .unwrap_or_else(compile_error) .into() @@ -89,7 +89,7 @@ pub fn derive_serialize(input: TokenStream) -> TokenStream { #[proc_macro_derive(Deserialize, attributes(serde))] pub fn derive_deserialize(input: TokenStream) -> TokenStream { - let input: DeriveInput = syn::parse(input).unwrap(); + let input = parse_macro_input!(input as DeriveInput); de::expand_derive_deserialize(&input) .unwrap_or_else(compile_error) .into()