From e571878e962290ea83d9e7adb9ff270d4a9a4be4 Mon Sep 17 00:00:00 2001 From: Tadeo hepperle Date: Wed, 28 Feb 2024 10:55:54 +0100 Subject: [PATCH 1/4] update syn --- proc-macros/Cargo.toml | 2 +- proc-macros/src/attributes.rs | 10 ++++++---- proc-macros/src/helpers.rs | 12 ++++++------ proc-macros/src/lib.rs | 4 +--- proc-macros/src/render_client.rs | 2 +- proc-macros/src/render_server.rs | 6 ++---- proc-macros/src/rpc_macro.rs | 12 ++++++------ proc-macros/src/visitor.rs | 8 +++----- 8 files changed, 26 insertions(+), 30 deletions(-) diff --git a/proc-macros/Cargo.toml b/proc-macros/Cargo.toml index a6495fcadd..353ba6c51f 100644 --- a/proc-macros/Cargo.toml +++ b/proc-macros/Cargo.toml @@ -19,7 +19,7 @@ proc-macro = true [dependencies] proc-macro2 = "1.0" quote = "1.0" -syn = { version = "1.0", default-features = false, features = ["extra-traits", "full", "visit", "parsing", "printing", "clone-impls", "proc-macro"] } +syn = { version = "2.0", default-features = false, features = ["extra-traits", "full", "visit", "parsing", "printing", "clone-impls", "proc-macro"] } proc-macro-crate = "3" heck = "0.4.0" diff --git a/proc-macros/src/attributes.rs b/proc-macros/src/attributes.rs index 30c0797bd2..2998e12467 100644 --- a/proc-macros/src/attributes.rs +++ b/proc-macros/src/attributes.rs @@ -108,7 +108,7 @@ impl Parse for Bracketed { syn::bracketed!(content in input); - let list = content.parse_terminated(Parse::parse)?; + let list = content.parse_terminated(Parse::parse, Token![,])?; Ok(Bracketed { list }) } @@ -119,15 +119,17 @@ fn parenthesized(input: ParseStream) -> syn::Result syn::Result { - let path = attr.path; - let arguments = parenthesized.parse2(attr.tokens)?; + let path = attr.path().clone(); + + let arguments = attr.parse_args_with(parenthesized)?; + // let arguments = parenthesized.parse2(attr.tokens)?; Ok(AttributeMeta { path, arguments }) } diff --git a/proc-macros/src/helpers.rs b/proc-macros/src/helpers.rs index 43e6c8a5c7..5faed4b908 100644 --- a/proc-macros/src/helpers.rs +++ b/proc-macros/src/helpers.rs @@ -198,12 +198,12 @@ pub(crate) fn is_option(ty: &syn::Type) -> bool { /// Note that `doc comments` are expanded into `#[doc = "some comment"]` /// Thus, if the attribute starts with `doc` => it's regarded as a doc comment. pub(crate) fn extract_doc_comments(attrs: &[syn::Attribute]) -> TokenStream2 { - let docs = attrs.iter().filter(|attr| { - attr.path.is_ident("doc") - && match attr.parse_meta() { - Ok(syn::Meta::NameValue(meta)) => matches!(&meta.lit, syn::Lit::Str(_)), - _ => false, - } + let docs = attrs.iter().filter(|attr| match &attr.meta { + syn::Meta::NameValue(meta) => { + meta.path.is_ident("doc") + && matches!(meta.value, syn::Expr::Lit(syn::ExprLit { lit: syn::Lit::Str(_), .. })) + } + _ => false, }); quote! ( #(#docs)* ) } diff --git a/proc-macros/src/lib.rs b/proc-macros/src/lib.rs index c88fc6431c..4c6414987a 100644 --- a/proc-macros/src/lib.rs +++ b/proc-macros/src/lib.rs @@ -27,7 +27,6 @@ extern crate proc_macro; use proc_macro::TokenStream; -use quote::quote; use rpc_macro::RpcDescription; mod attributes; @@ -394,8 +393,7 @@ pub fn rpc(attr: TokenStream, item: TokenStream) -> TokenStream { pound_token: syn::token::Pound::default(), style: syn::AttrStyle::Outer, bracket_token: syn::token::Bracket::default(), - path: syn::Ident::new("rpc", proc_macro2::Span::call_site()).into(), - tokens: quote! { (#attr) }, + meta: syn::Meta::Path(syn::Ident::new("rpc", proc_macro2::Span::call_site()).into()), }; match rpc_impl(rebuilt_rpc_attribute, item) { diff --git a/proc-macros/src/render_client.rs b/proc-macros/src/render_client.rs index f331aad76b..41312f32ed 100644 --- a/proc-macros/src/render_client.rs +++ b/proc-macros/src/render_client.rs @@ -208,7 +208,7 @@ impl RpcDescription { &self, params: &[(syn::PatIdent, syn::Type)], param_kind: &ParamKind, - signature: &syn::TraitItemMethod, + signature: &syn::TraitItemFn, ) -> TokenStream2 { let jsonrpsee = self.jsonrpsee_client_path.as_ref().unwrap(); diff --git a/proc-macros/src/render_server.rs b/proc-macros/src/render_server.rs index eddb9e3d99..89f8d7ba45 100644 --- a/proc-macros/src/render_server.rs +++ b/proc-macros/src/render_server.rs @@ -25,14 +25,13 @@ // DEALINGS IN THE SOFTWARE. use std::collections::HashSet; -use std::str::FromStr; use super::RpcDescription; use crate::helpers::{generate_where_clause, is_option}; use proc_macro2::{Span, TokenStream as TokenStream2}; use quote::{quote, quote_spanned}; use syn::punctuated::Punctuated; -use syn::{token, AttrStyle, Attribute, Path, PathSegment}; +use syn::{token, AttrStyle, Attribute, Meta, Path, PathSegment}; impl RpcDescription { pub(super) fn render_server(&self) -> Result { @@ -388,8 +387,7 @@ impl RpcDescription { pound_token: token::Pound::default(), style: AttrStyle::Outer, bracket_token: Default::default(), - path: Path { leading_colon: None, segments: punc_attr }, - tokens: TokenStream2::from_str(&format!("({})", alias_vals.as_str())).unwrap(), + meta: Meta::Path(Path { leading_colon: None, segments: punc_attr }), }; quote! { diff --git a/proc-macros/src/rpc_macro.rs b/proc-macros/src/rpc_macro.rs index 693ec2ad23..e500c72281 100644 --- a/proc-macros/src/rpc_macro.rs +++ b/proc-macros/src/rpc_macro.rs @@ -46,12 +46,12 @@ pub struct RpcMethod { pub params: Vec<(syn::PatIdent, syn::Type)>, pub param_kind: ParamKind, pub returns: Option, - pub signature: syn::TraitItemMethod, + pub signature: syn::TraitItemFn, pub aliases: Vec, } impl RpcMethod { - pub fn from_item(attr: Attribute, mut method: syn::TraitItemMethod) -> syn::Result { + pub fn from_item(attr: Attribute, mut method: syn::TraitItemFn) -> syn::Result { let [aliases, blocking, name, param_kind] = AttributeMeta::parse(attr)?.retain(["aliases", "blocking", "name", "param_kind"])?; @@ -117,13 +117,13 @@ pub struct RpcSubscription { pub params: Vec<(syn::PatIdent, syn::Type)>, pub param_kind: ParamKind, pub item: syn::Type, - pub signature: syn::TraitItemMethod, + pub signature: syn::TraitItemFn, pub aliases: Vec, pub unsubscribe_aliases: Vec, } impl RpcSubscription { - pub fn from_item(attr: syn::Attribute, mut sub: syn::TraitItemMethod) -> syn::Result { + pub fn from_item(attr: syn::Attribute, mut sub: syn::TraitItemFn) -> syn::Result { let [aliases, item, name, param_kind, unsubscribe, unsubscribe_aliases] = AttributeMeta::parse(attr)? .retain(["aliases", "item", "name", "param_kind", "unsubscribe", "unsubscribe_aliases"])?; @@ -249,7 +249,7 @@ impl RpcDescription { // Go through all the methods in the trait and collect methods and // subscriptions. for entry in item.items.iter() { - if let syn::TraitItem::Method(method) = entry { + if let syn::TraitItem::Fn(method) = entry { if method.sig.receiver().is_none() { return Err(syn::Error::new_spanned(&method.sig, "First argument of the trait must be '&self'")); } @@ -354,7 +354,7 @@ fn parse_subscribe(arg: Result) -> syn::Result