diff --git a/Cargo.lock b/Cargo.lock index b3830d05b..96410a0b6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1691,9 +1691,9 @@ dependencies = [ [[package]] name = "syn-ext" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48de58fdf4f8294294c09653384dcb02e8e90b10d61cc0cf554bfbc2e9eaad9a" +checksum = "da910e9ec6f88d3f591893025a3040fe2659b7f7ea4eacce5469b7ebe5287339" dependencies = [ "syn", ] diff --git a/derive/Cargo.toml b/derive/Cargo.toml index c3b0e4306..89fd2c03e 100644 --- a/derive/Cargo.toml +++ b/derive/Cargo.toml @@ -12,7 +12,7 @@ proc-macro = true [dependencies] syn = { version = "1.0", features = ["full"] } -syn-ext = { version = "0.2", features = ["full"] } +syn-ext = { version = "0.2.1", features = ["full"] } quote = "1.0" proc-macro2 = "1.0" rustpython-compiler = { path = "../compiler", version = "0.1.1" } diff --git a/derive/src/pyclass.rs b/derive/src/pyclass.rs index b5fab17b3..bab55ffb0 100644 --- a/derive/src/pyclass.rs +++ b/derive/src/pyclass.rs @@ -7,8 +7,8 @@ use proc_macro2::TokenStream; use quote::{quote, quote_spanned, ToTokens}; use std::collections::HashMap; use syn::{ - parse_quote, spanned::Spanned, Attribute, AttributeArgs, Ident, Index, Item, Lit, Meta, - NestedMeta, Result, + parse_quote, spanned::Spanned, Attribute, AttributeArgs, Ident, Index, Item, Meta, NestedMeta, + Result, }; use syn_ext::ext::*; @@ -117,29 +117,11 @@ fn generate_class_def( module_name: Option<&str>, attrs: &[Attribute], ) -> std::result::Result { - let mut doc: Option> = None; - for attr in attrs.iter() { - if attr.path.is_ident("doc") { - let meta = attr.parse_meta().expect("expected doc attr to be a meta"); - if let Meta::NameValue(name_value) = meta { - if let Lit::Str(s) = name_value.lit { - let val = s.value().trim().to_owned(); - match doc { - Some(ref mut doc) => doc.push(val), - None => doc = Some(vec![val]), - } - } - } - } - } - let doc = match doc { - Some(doc) => { - let doc = doc.join("\n"); - quote!(Some(#doc)) - } - None => quote!(None), + let doc = if let Some(doc) = attrs.doc() { + quote!(Some(#doc)) + } else { + quote!(None) }; - let module_class_name = if let Some(module_name) = module_name { format!("{}.{}", module_name, name) } else {