Skip to content

Commit 57b6e17

Browse files
bashJelteF
authored andcommitted
Update to syn 2
1 parent ea4fa94 commit 57b6e17

File tree

6 files changed

+247
-46
lines changed

6 files changed

+247
-46
lines changed

Cargo.lock

Lines changed: 13 additions & 13 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ proc-macro = true
2929
[dependencies]
3030
proc-macro2 = "1.0"
3131
quote = "1.0"
32-
syn = "1.0.3"
32+
syn = "2"
3333
convert_case = { version = "0.4", optional = true}
3434

3535
[build-dependencies]

src/display.rs

Lines changed: 38 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
use std::{fmt::Display, str::FromStr as _};
22

3+
use crate::syn_compat::{AttributeExt as _, NestedMeta, ParsedMeta};
34
use proc_macro2::{Ident, Span, TokenStream};
45
use quote::{quote, quote_spanned};
56
use syn::{
67
parse::Parser as _, punctuated::Punctuated, spanned::Spanned as _, Error, Result,
78
};
9+
use syn::{Expr, ExprLit};
810

911
use crate::utils;
1012
use utils::{HashMap, HashSet};
@@ -220,21 +222,20 @@ impl<'a, 'b> State<'a, 'b> {
220222
&self,
221223
attrs: &[syn::Attribute],
222224
meta_key: &str,
223-
) -> Result<Option<syn::Meta>> {
225+
) -> Result<Option<ParsedMeta>> {
224226
let mut metas = Vec::new();
225227
for meta in attrs.iter().filter_map(|attr| attr.parse_meta().ok()) {
226228
let meta_list = match &meta {
227-
syn::Meta::List(meta) => meta,
229+
ParsedMeta::List(meta) => meta,
228230
_ => continue,
229231
};
230232

231233
if !meta_list.path.is_ident(self.trait_attr) {
232234
continue;
233235
}
234236

235-
use syn::{Meta, NestedMeta};
236237
let meta_nv = match meta_list.nested.first() {
237-
Some(NestedMeta::Meta(Meta::NameValue(meta_nv))) => meta_nv,
238+
Some(NestedMeta::Meta(ParsedMeta::NameValue(meta_nv))) => meta_nv,
238239
_ => {
239240
// If the given attribute is not MetaNameValue, it most likely implies that the
240241
// user is writing an incorrect format. For example:
@@ -337,20 +338,24 @@ impl<'a, 'b> State<'a, 'b> {
337338
}
338339
fn parse_meta_fmt(
339340
&self,
340-
meta: &syn::Meta,
341+
meta: &ParsedMeta,
341342
outer_enum: bool,
342343
) -> Result<(TokenStream, bool)> {
343344
let list = match meta {
344-
syn::Meta::List(list) => list,
345+
ParsedMeta::List(list) => list,
345346
_ => {
346347
return Err(Error::new(meta.span(), self.get_proper_fmt_syntax()));
347348
}
348349
};
349350

350351
match &list.nested[0] {
351-
syn::NestedMeta::Meta(syn::Meta::NameValue(syn::MetaNameValue {
352+
NestedMeta::Meta(ParsedMeta::NameValue(syn::MetaNameValue {
352353
path,
353-
lit: syn::Lit::Str(fmt),
354+
value:
355+
Expr::Lit(ExprLit {
356+
lit: syn::Lit::Str(fmt),
357+
..
358+
}),
354359
..
355360
})) => match path {
356361
op if op.segments.first().expect("path shouldn't be empty").ident
@@ -366,10 +371,14 @@ impl<'a, 'b> State<'a, 'b> {
366371
}
367372
// TODO: Check for a single `Display` group?
368373
let fmt_string = match &list.nested[0] {
369-
syn::NestedMeta::Meta(syn::Meta::NameValue(
374+
NestedMeta::Meta(ParsedMeta::NameValue(
370375
syn::MetaNameValue {
371376
path,
372-
lit: syn::Lit::Str(s),
377+
value:
378+
Expr::Lit(ExprLit {
379+
lit: syn::Lit::Str(s),
380+
..
381+
}),
373382
..
374383
},
375384
)) if path
@@ -403,8 +412,8 @@ impl<'a, 'b> State<'a, 'b> {
403412
.skip(1) // skip fmt = "..."
404413
.try_fold(TokenStream::new(), |args, arg| {
405414
let arg = match arg {
406-
syn::NestedMeta::Lit(syn::Lit::Str(s)) => s,
407-
syn::NestedMeta::Meta(syn::Meta::Path(i)) => {
415+
NestedMeta::Lit(syn::Lit::Str(s)) => s,
416+
NestedMeta::Meta(ParsedMeta::Path(i)) => {
408417
return Ok(quote_spanned!(list.span()=> #args #i,));
409418
}
410419
_ => {
@@ -586,7 +595,7 @@ impl<'a, 'b> State<'a, 'b> {
586595
let span = meta.span();
587596

588597
let meta = match meta {
589-
syn::Meta::List(meta) => meta.nested,
598+
ParsedMeta::List(meta) => meta.nested,
590599
_ => return Err(Error::new(span, self.get_proper_bound_syntax())),
591600
};
592601

@@ -595,12 +604,15 @@ impl<'a, 'b> State<'a, 'b> {
595604
}
596605

597606
let meta = match &meta[0] {
598-
syn::NestedMeta::Meta(syn::Meta::NameValue(meta)) => meta,
607+
NestedMeta::Meta(ParsedMeta::NameValue(meta)) => meta,
599608
_ => return Err(Error::new(span, self.get_proper_bound_syntax())),
600609
};
601610

602-
let extra_bounds = match &meta.lit {
603-
syn::Lit::Str(extra_bounds) => extra_bounds,
611+
let extra_bounds = match &meta.value {
612+
Expr::Lit(ExprLit {
613+
lit: syn::Lit::Str(extra_bounds),
614+
..
615+
}) => extra_bounds,
604616
_ => return Err(Error::new(span, self.get_proper_bound_syntax())),
605617
};
606618

@@ -615,7 +627,7 @@ impl<'a, 'b> State<'a, 'b> {
615627
fn get_used_type_params_bounds(
616628
&self,
617629
fields: &syn::Fields,
618-
meta: &syn::Meta,
630+
meta: &ParsedMeta,
619631
) -> HashMap<syn::Type, HashSet<syn::TraitBound>> {
620632
if self.type_params.is_empty() {
621633
return HashMap::default();
@@ -645,7 +657,7 @@ impl<'a, 'b> State<'a, 'b> {
645657
}
646658

647659
let list = match meta {
648-
syn::Meta::List(list) => list,
660+
ParsedMeta::List(list) => list,
649661
// This one has been checked already in get_meta_fmt() method.
650662
_ => unreachable!(),
651663
};
@@ -655,10 +667,10 @@ impl<'a, 'b> State<'a, 'b> {
655667
.skip(1) // skip fmt = "..."
656668
.enumerate()
657669
.filter_map(|(i, arg)| match arg {
658-
syn::NestedMeta::Lit(syn::Lit::Str(ref s)) => {
670+
NestedMeta::Lit(syn::Lit::Str(ref s)) => {
659671
syn::parse_str(&s.value()).ok().map(|id| (i, id))
660672
}
661-
syn::NestedMeta::Meta(syn::Meta::Path(ref id)) => Some((i, id.clone())),
673+
NestedMeta::Meta(ParsedMeta::Path(ref id)) => Some((i, id.clone())),
662674
// This one has been checked already in get_meta_fmt() method.
663675
_ => unreachable!(),
664676
})
@@ -667,9 +679,13 @@ impl<'a, 'b> State<'a, 'b> {
667679
return HashMap::default();
668680
}
669681
let fmt_string = match &list.nested[0] {
670-
syn::NestedMeta::Meta(syn::Meta::NameValue(syn::MetaNameValue {
682+
NestedMeta::Meta(ParsedMeta::NameValue(syn::MetaNameValue {
671683
path,
672-
lit: syn::Lit::Str(s),
684+
value:
685+
Expr::Lit(ExprLit {
686+
lit: syn::Lit::Str(s),
687+
..
688+
}),
673689
..
674690
})) if path
675691
.segments

src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,7 @@ extern crate proc_macro;
190190
use proc_macro::TokenStream;
191191
use syn::parse::Error as ParseError;
192192

193+
mod syn_compat;
193194
mod utils;
194195

195196
#[cfg(any(feature = "add_assign", feature = "mul_assign"))]

0 commit comments

Comments
 (0)