| From 1d2c6fa2ea2f3ab560c30c631fdde0034f5789a4 Mon Sep 17 00:00:00 2001 |
| From: Matthew Maurer <mmaurer@google.com> |
| Date: Mon, 3 Apr 2023 16:13:04 +0000 |
| Subject: [PATCH] Update to syn-2 |
| |
| Bug: 276463929 |
| Test: m |
| Change-Id: If2f4b9e451716cae4e7cc5d037764de4582aa761 |
| --- |
| src/lib.rs | 20 ++++++++------------ |
| src/test.rs | 31 ------------------------------- |
| tests/issue-16.rs | 9 +++++++++ |
| 3 files changed, 17 insertions(+), 43 deletions(-) |
| delete mode 100644 src/test.rs |
| create mode 100644 tests/issue-16.rs |
| |
| diff --git a/src/lib.rs b/src/lib.rs |
| index ef55e4b..0b821f9 100644 |
| --- a/src/lib.rs |
| +++ b/src/lib.rs |
| @@ -170,16 +170,14 @@ impl NumTraits { |
| // retrieve its value, and use it to create an `Ident` to be used |
| // to import the `num_traits` crate. |
| for attr in &ast.attrs { |
| - if let Ok(syn::Meta::NameValue(mnv)) = attr.parse_meta() { |
| - if mnv.path.is_ident("num_traits") { |
| - if let syn::Lit::Str(lit_str) = mnv.lit { |
| - return NumTraits { |
| - import: syn::Ident::new(&lit_str.value(), lit_str.span()), |
| - explicit: true, |
| - }; |
| - } else { |
| - panic!("#[num_traits] attribute value must be a str"); |
| - } |
| + if attr.path().is_ident("num_traits") { |
| + if let syn::Expr::Lit(syn::ExprLit { lit: syn::Lit::Str(ref lit_str), .. }) = attr.meta.require_name_value().unwrap().value { |
| + return NumTraits { |
| + import: syn::Ident::new(&lit_str.value(), lit_str.span()), |
| + explicit: true, |
| + } |
| + } else { |
| + panic!("#[num_traits] attribute value must be a str"); |
| } |
| } |
| } |
| @@ -954,5 +952,3 @@ pub fn float(input: TokenStream) -> TokenStream { |
| |
| import.wrap("Float", &name, impl_).into() |
| } |
| - |
| -mod test; |
| diff --git a/src/test.rs b/src/test.rs |
| deleted file mode 100644 |
| index c4cd7fe..0000000 |
| --- a/src/test.rs |
| +++ /dev/null |
| @@ -1,31 +0,0 @@ |
| -//! This module uses doc-tests on modules for `compile_fail` |
| - |
| -// We need "syn/full" to parse macros. |
| -// Use `--nocapture` to check the quality of the error message. |
| -#[cfg(not(feature = "full-syntax"))] |
| -/// ```compile_fail |
| -/// macro_rules! get_an_isize { |
| -/// () => (0_isize) |
| -/// } |
| -/// |
| -/// #[derive(num_derive::FromPrimitive)] |
| -/// pub enum CLikeEnum { |
| -/// VarA = get_an_isize!(), // error without "syn/full" |
| -/// VarB = 2, |
| -/// } |
| -/// ``` |
| -mod issue16 {} |
| - |
| -#[cfg(feature = "full-syntax")] |
| -/// ``` |
| -/// macro_rules! get_an_isize { |
| -/// () => (0_isize) |
| -/// } |
| -/// |
| -/// #[derive(num_derive::FromPrimitive)] |
| -/// pub enum CLikeEnum { |
| -/// VarA = get_an_isize!(), // ok with "syn/full" |
| -/// VarB = 2, |
| -/// } |
| -/// ``` |
| -mod issue16 {} |
| diff --git a/tests/issue-16.rs b/tests/issue-16.rs |
| new file mode 100644 |
| index 0000000..0db3b6f |
| --- /dev/null |
| +++ b/tests/issue-16.rs |
| @@ -0,0 +1,9 @@ |
| +macro_rules! get_an_isize { |
| + () => (0_isize) |
| +} |
| + |
| +#[derive(num_derive::FromPrimitive)] |
| +pub enum CLikeEnum { |
| + VarA = get_an_isize!(), |
| + VarB = 2, |
| +} |
| diff --git b/Cargo.toml a/Cargo.toml |
| index 90c5d27..d0ccb4b 100644 |
| --- b/Cargo.toml |
| +++ a/Cargo.toml |
| @@ -44,7 +44,7 @@ version = "1" |
| version = "1" |
| |
| [dependencies.syn] |
| -version = "1" |
| +version = "2" |
| [dev-dependencies.num] |
| version = "0.3" |
| |
| -- |
| 2.40.0.348.gf938b09366-goog |
| |