From b45a0d33a0b0377c616ce6177aa241723dc24dfd Mon Sep 17 00:00:00 2001 From: DaniPopes <57450786+DaniPopes@users.noreply.github.com> Date: Mon, 9 Oct 2023 09:35:59 +0200 Subject: [PATCH] fix(sol-macro): flatten doc strings correctly (#357) --- crates/sol-macro/src/attr.rs | 29 ++++++++++++++++++++++++----- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/crates/sol-macro/src/attr.rs b/crates/sol-macro/src/attr.rs index 434c1eea6..af163b329 100644 --- a/crates/sol-macro/src/attr.rs +++ b/crates/sol-macro/src/attr.rs @@ -24,12 +24,31 @@ pub fn docs(attrs: &[Attribute]) -> impl Iterator { attrs.iter().filter(|a| is_doc(a)) } +/// Flattens all the `#[doc = "..."]` attributes into a single string. pub fn docs_str(attrs: &[Attribute]) -> String { - docs(attrs) - .filter_map(|attr| attr.parse_args::().ok()) - .map(|doc| doc.value()) - .collect::>() - .join("\n") + let mut doc = String::new(); + for attr in docs(attrs) { + let syn::Meta::NameValue(syn::MetaNameValue { + value: + syn::Expr::Lit(syn::ExprLit { + lit: syn::Lit::Str(s), + .. + }), + .. + }) = &attr.meta + else { + continue + }; + + let value = s.value(); + if !value.is_empty() { + if !doc.is_empty() { + doc.push('\n'); + } + doc.push_str(&value); + } + } + doc } pub fn derives(attrs: &[Attribute]) -> impl Iterator {