Skip to content

Commit 762478f

Browse files
committed
Update syn to version 2
1 parent 1abcae2 commit 762478f

File tree

4 files changed

+20
-33
lines changed

4 files changed

+20
-33
lines changed

remoc_macro/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ license = "Apache-2.0"
1212

1313
[dependencies]
1414
proc-macro2 = "1"
15-
syn = { version = "1", features = ["extra-traits", "full", "visit"] }
15+
syn = { version = "2", features = ["extra-traits", "full", "visit"] }
1616
quote = "1"
1717

1818

remoc_macro/src/lib.rs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
//! Procedural macros for Remoc.
44
55
use quote::quote;
6-
use syn::{parse_macro_input, AttributeArgs};
6+
use syn::{meta, parse_macro_input};
77

88
mod method;
99
mod trait_def;
@@ -12,12 +12,10 @@ mod util;
1212
use crate::trait_def::TraitDef;
1313

1414
#[proc_macro_attribute]
15-
pub fn remote(attr: proc_macro::TokenStream, input: proc_macro::TokenStream) -> proc_macro::TokenStream {
16-
let attrs = parse_macro_input!(attr as AttributeArgs);
15+
pub fn remote(args: proc_macro::TokenStream, input: proc_macro::TokenStream) -> proc_macro::TokenStream {
1716
let mut trait_def = parse_macro_input!(input as TraitDef);
18-
if let Err(err) = trait_def.apply_attrs(attrs) {
19-
return err.into_compile_error().into();
20-
}
17+
let meta_parser = meta::parser(|meta| trait_def.parse_meta(meta));
18+
parse_macro_input!(args with meta_parser);
2119

2220
let vanilla_trait = trait_def.vanilla_trait();
2321
let request_enums = trait_def.request_enums();

remoc_macro/src/method.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ impl Parse for TraitMethod {
7676
// Check for no_cancel attribute.
7777
let mut cancel = true;
7878
attrs.retain(|attr| {
79-
if let Some(attr) = attr.path.get_ident() {
79+
if let Some(attr) = attr.path().get_ident() {
8080
if *attr == "no_cancel" {
8181
cancel = false;
8282
return false;
@@ -94,7 +94,7 @@ impl Parse for TraitMethod {
9494
// Parse arguments.
9595
let content;
9696
parenthesized!(content in input);
97-
let raw_args: Punctuated<FnArg, Comma> = content.parse_terminated(FnArg::parse)?;
97+
let raw_args: Punctuated<FnArg, Comma> = content.parse_terminated(FnArg::parse, Token![,])?;
9898

9999
// Extract receiver and arguments.
100100
let mut self_ref = None;

remoc_macro/src/trait_def.rs

Lines changed: 13 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
//! Trait parsing and client and server generation.
22
3-
use proc_macro2::{Span, TokenStream};
3+
use proc_macro2::TokenStream;
44
use quote::{format_ident, quote, TokenStreamExt};
55
use syn::{
66
braced,
7+
meta::ParseNestedMeta,
78
parse::{Parse, ParseStream},
8-
Attribute, AttributeArgs, Error, GenericParam, Generics, Ident, Lifetime, LifetimeDef, Meta, NestedMeta,
9-
Token, TypeParam, Visibility, WhereClause,
9+
Attribute, GenericParam, Generics, Ident, Lifetime, LifetimeParam, Token, TypeParam, Visibility, WhereClause,
1010
};
1111

1212
use crate::{
@@ -70,28 +70,17 @@ impl Parse for TraitDef {
7070
}
7171

7272
impl TraitDef {
73-
/// Applies attributes specified by the procedural macro invocation.
74-
pub fn apply_attrs(&mut self, attrs: AttributeArgs) -> syn::Result<()> {
75-
for attr in attrs {
76-
if let NestedMeta::Meta(Meta::Path(path)) = attr {
77-
if path.is_ident("clone") {
78-
if self.is_taking_value() {
79-
return Err(Error::new(
80-
Span::call_site(),
81-
"the client cannot be clonable if a method takes self by value",
82-
));
83-
}
84-
self.clone = true;
85-
} else {
86-
return Err(Error::new(
87-
Span::call_site(),
88-
format!("unknown attribute: {}", path.get_ident().unwrap()),
89-
));
90-
}
73+
/// Parses and applies attributes specified by the procedural macro invocation.
74+
pub fn parse_meta(&mut self, meta: ParseNestedMeta) -> syn::Result<()> {
75+
if meta.path.is_ident("clone") {
76+
if self.is_taking_value() {
77+
return Err(meta.error("the client cannot be clonable if a method takes self by value"));
9178
}
79+
self.clone = true;
80+
Ok(())
81+
} else {
82+
Err(meta.error("unknown attribute"))
9283
}
93-
94-
Ok(())
9584
}
9685

9786
/// True, if any trait method takes self by value.
@@ -167,7 +156,7 @@ impl TraitDef {
167156

168157
if with_lifetime {
169158
let target_lt: Lifetime = syn::parse2(quote! {'target}).unwrap();
170-
ty_generics.params.insert(0, LifetimeDef::new(target_lt).into());
159+
ty_generics.params.insert(0, LifetimeParam::new(target_lt).into());
171160
}
172161

173162
let mut impl_generics = ty_generics.clone();

0 commit comments

Comments
 (0)