Skip to content

Commit 3fc22d1

Browse files
authored
Update syn & co (#507)
* Update syn, quote & proc-macro2 * Apply review suggestions. * Re-format.
1 parent d1993a8 commit 3fc22d1

File tree

4 files changed

+46
-47
lines changed

4 files changed

+46
-47
lines changed

derive/Cargo.toml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,10 @@ version = "14.0.0"
1313
proc-macro = true
1414

1515
[dependencies]
16-
syn = { version = "^0.15.22", features = ["full", "extra-traits", "visit", "fold"] }
17-
proc-macro2 = "0.4"
18-
quote = "0.6"
19-
proc-macro-crate = "0.1.3"
16+
syn = { version = "1.0", features = ["full", "extra-traits", "visit", "fold"] }
17+
proc-macro2 = "1.0"
18+
quote = "1.0"
19+
proc-macro-crate = "0.1.4"
2020

2121
[dev-dependencies]
2222
jsonrpc-core = { version = "14.0", path = "../core" }

derive/src/rpc_attr.rs

Lines changed: 27 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ const NEITHER_SUB_OR_UNSUB_ERR: &str = "pubsub attribute not annotated with eith
5151

5252
impl RpcMethodAttribute {
5353
pub fn parse_attr(method: &syn::TraitItemMethod) -> Result<Option<RpcMethodAttribute>> {
54-
let output = &method.sig.decl.output;
54+
let output = &method.sig.output;
5555
let attrs = method
5656
.attrs
5757
.iter()
@@ -68,9 +68,9 @@ impl RpcMethodAttribute {
6868
fn parse_meta(attr: &syn::Attribute, output: &syn::ReturnType) -> Option<Result<RpcMethodAttribute>> {
6969
match attr.parse_meta().and_then(validate_attribute_meta) {
7070
Ok(ref meta) => {
71-
let attr_kind = match meta.name().to_string().as_ref() {
72-
RPC_ATTR_NAME => Some(Self::parse_rpc(meta, output)),
73-
PUB_SUB_ATTR_NAME => Some(Self::parse_pubsub(meta)),
71+
let attr_kind = match path_to_str(meta.path()).as_ref().map(String::as_str) {
72+
Some(RPC_ATTR_NAME) => Some(Self::parse_rpc(meta, output)),
73+
Some(PUB_SUB_ATTR_NAME) => Some(Self::parse_pubsub(meta)),
7474
_ => None,
7575
};
7676
attr_kind.map(|kind| {
@@ -162,24 +162,27 @@ fn validate_attribute_meta(meta: syn::Meta) -> Result<syn::Meta> {
162162
}
163163
impl<'a> Visit<'a> for Visitor {
164164
fn visit_meta(&mut self, meta: &syn::Meta) {
165-
match meta {
166-
syn::Meta::List(list) => self.meta_list_names.push(list.ident.to_string()),
167-
syn::Meta::Word(ident) => self.meta_words.push(ident.to_string()),
168-
syn::Meta::NameValue(nv) => self.name_value_names.push(nv.ident.to_string()),
165+
if let Some(ident) = path_to_str(meta.path()) {
166+
match meta {
167+
syn::Meta::Path(_) => self.meta_words.push(ident),
168+
syn::Meta::List(_) => self.meta_list_names.push(ident),
169+
syn::Meta::NameValue(_) => self.name_value_names.push(ident),
170+
}
169171
}
170172
}
171173
}
172174

173175
let mut visitor = Visitor::default();
174176
visit::visit_meta(&mut visitor, &meta);
175177

176-
match meta.name().to_string().as_ref() {
177-
RPC_ATTR_NAME => {
178+
let ident = path_to_str(meta.path());
179+
match ident.as_ref().map(String::as_str) {
180+
Some(RPC_ATTR_NAME) => {
178181
validate_idents(&meta, &visitor.meta_words, &[METADATA_META_WORD, RAW_PARAMS_META_WORD])?;
179182
validate_idents(&meta, &visitor.name_value_names, &[RPC_NAME_KEY, RETURNS_META_WORD])?;
180183
validate_idents(&meta, &visitor.meta_list_names, &[ALIASES_KEY])
181184
}
182-
PUB_SUB_ATTR_NAME => {
185+
Some(PUB_SUB_ATTR_NAME) => {
183186
validate_idents(
184187
&meta,
185188
&visitor.meta_words,
@@ -223,7 +226,7 @@ fn get_meta_list(meta: &syn::Meta) -> Option<&syn::MetaList> {
223226
fn get_name_value(key: &str, ml: &syn::MetaList) -> Option<String> {
224227
ml.nested.iter().find_map(|nested| {
225228
if let syn::NestedMeta::Meta(syn::Meta::NameValue(mnv)) = nested {
226-
if mnv.ident == key {
229+
if path_eq_str(&mnv.path, key) {
227230
if let syn::Lit::Str(ref lit) = mnv.lit {
228231
Some(lit.value())
229232
} else {
@@ -240,8 +243,8 @@ fn get_name_value(key: &str, ml: &syn::MetaList) -> Option<String> {
240243

241244
fn has_meta_word(word: &str, ml: &syn::MetaList) -> bool {
242245
ml.nested.iter().any(|nested| {
243-
if let syn::NestedMeta::Meta(syn::Meta::Word(w)) = nested {
244-
w == word
246+
if let syn::NestedMeta::Meta(syn::Meta::Path(p)) = nested {
247+
path_eq_str(&p, word)
245248
} else {
246249
false
247250
}
@@ -253,7 +256,7 @@ fn get_aliases(ml: &syn::MetaList) -> Vec<String> {
253256
.iter()
254257
.find_map(|nested| {
255258
if let syn::NestedMeta::Meta(syn::Meta::List(list)) = nested {
256-
if list.ident == ALIASES_KEY {
259+
if path_eq_str(&list.path, ALIASES_KEY) {
257260
Some(list)
258261
} else {
259262
None
@@ -266,7 +269,7 @@ fn get_aliases(ml: &syn::MetaList) -> Vec<String> {
266269
list.nested
267270
.iter()
268271
.filter_map(|nm| {
269-
if let syn::NestedMeta::Literal(syn::Lit::Str(alias)) = nm {
272+
if let syn::NestedMeta::Lit(syn::Lit::Str(alias)) = nm {
270273
Some(alias.value())
271274
} else {
272275
None
@@ -275,3 +278,11 @@ fn get_aliases(ml: &syn::MetaList) -> Vec<String> {
275278
.collect()
276279
})
277280
}
281+
282+
fn path_eq_str(path: &syn::Path, s: &str) -> bool {
283+
path.get_ident().map_or(false, |i| i == s)
284+
}
285+
286+
fn path_to_str(path: &syn::Path) -> Option<String> {
287+
Some(path.get_ident()?.to_string())
288+
}

derive/src/to_client.rs

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -173,14 +173,14 @@ fn get_doc_comments(attrs: &[syn::Attribute]) -> Vec<syn::Attribute> {
173173

174174
fn compute_args(method: &syn::TraitItemMethod) -> Punctuated<syn::FnArg, syn::token::Comma> {
175175
let mut args = Punctuated::new();
176-
for arg in &method.sig.decl.inputs {
176+
for arg in &method.sig.inputs {
177177
let ty = match arg {
178-
syn::FnArg::Captured(syn::ArgCaptured { ty, .. }) => ty,
178+
syn::FnArg::Typed(syn::PatType { ty, .. }) => ty,
179179
_ => continue,
180180
};
181-
let segments = match ty {
181+
let segments = match &**ty {
182182
syn::Type::Path(syn::TypePath {
183-
path: syn::Path { segments, .. },
183+
path: syn::Path { ref segments, .. },
184184
..
185185
}) => segments,
186186
_ => continue,
@@ -200,12 +200,12 @@ fn compute_arg_identifiers(args: &Punctuated<syn::FnArg, syn::token::Comma>) ->
200200
let mut arg_names = vec![];
201201
for arg in args {
202202
let pat = match arg {
203-
syn::FnArg::Captured(syn::ArgCaptured { pat, .. }) => pat,
203+
syn::FnArg::Typed(syn::PatType { pat, .. }) => pat,
204204
_ => continue,
205205
};
206-
let ident = match pat {
207-
syn::Pat::Ident(syn::PatIdent { ident, .. }) => ident,
208-
syn::Pat::Wild(wild) => {
206+
let ident = match **pat {
207+
syn::Pat::Ident(syn::PatIdent { ref ident, .. }) => ident,
208+
syn::Pat::Wild(ref wild) => {
209209
let span = wild.underscore_token.spans[0];
210210
let msg = "No wildcard patterns allowed in rpc trait.";
211211
return Err(syn::Error::new(span, msg));
@@ -223,7 +223,7 @@ fn compute_returns(method: &syn::TraitItemMethod, returns: &Option<String>) -> R
223223
None => None,
224224
};
225225
let returns = match returns {
226-
None => try_infer_returns(&method.sig.decl.output),
226+
None => try_infer_returns(&method.sig.output),
227227
_ => returns,
228228
};
229229
let returns = match returns {
@@ -276,8 +276,8 @@ fn get_first_type_argument(args: &syn::PathArguments) -> Option<syn::Type> {
276276

277277
fn compute_subscription_type(arg: &syn::FnArg) -> syn::Type {
278278
let ty = match arg {
279-
syn::FnArg::Captured(cap) => match &cap.ty {
280-
syn::Type::Path(path) => {
279+
syn::FnArg::Typed(cap) => match *cap.ty {
280+
syn::Type::Path(ref path) => {
281281
let last = &path.path.segments[&path.path.segments.len() - 1];
282282
get_first_type_argument(&last.arguments)
283283
}

derive/src/to_delegate.rs

Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -142,13 +142,7 @@ pub fn generate_trait_item_method(
142142

143143
let predicates = generate_where_clause_serialization_predicates(&trait_item, false);
144144
let mut method = method.clone();
145-
method
146-
.sig
147-
.decl
148-
.generics
149-
.make_where_clause()
150-
.predicates
151-
.extend(predicates);
145+
method.sig.generics.make_where_clause().predicates.extend(predicates);
152146
Ok(method)
153147
}
154148

@@ -183,13 +177,11 @@ impl RpcMethod {
183177
let mut param_types: Vec<_> = self
184178
.trait_item
185179
.sig
186-
.decl
187180
.inputs
188181
.iter()
189182
.cloned()
190183
.filter_map(|arg| match arg {
191-
syn::FnArg::Captured(arg_captured) => Some(arg_captured.ty),
192-
syn::FnArg::Ignored(ty) => Some(ty),
184+
syn::FnArg::Typed(ty) => Some(*ty.ty),
193185
_ => None,
194186
})
195187
.collect();
@@ -225,7 +217,7 @@ impl RpcMethod {
225217
};
226218

227219
let method_ident = self.ident();
228-
let result = &self.trait_item.sig.decl.output;
220+
let result = &self.trait_item.sig.output;
229221
let extra_closure_args: &Vec<_> = &special_args.iter().cloned().map(|arg| arg.0).collect();
230222
let extra_method_types: &Vec<_> = &special_args.iter().cloned().map(|arg| arg.1).collect();
231223

@@ -380,11 +372,7 @@ fn ident(s: &str) -> syn::Ident {
380372

381373
fn is_option_type(ty: &syn::Type) -> bool {
382374
if let syn::Type::Path(path) = ty {
383-
path.path
384-
.segments
385-
.first()
386-
.map(|t| t.value().ident == "Option")
387-
.unwrap_or(false)
375+
path.path.segments.first().map_or(false, |t| t.ident == "Option")
388376
} else {
389377
false
390378
}

0 commit comments

Comments
 (0)