gdnative-impl-proc-macros 0.11.3

Internal dependency of the gdnative bindings.
Documentation
use syn::visit_mut::VisitMut;
use syn::{Attribute, ItemFn, ItemImpl};

struct IncludeDocs<'a> {
    docs: &'a [&'a str],
    deprecated: Option<&'a str>,
}

impl<'a> IncludeDocs<'a> {
    fn include_docs(&self, attrs: &mut Vec<Attribute>) {
        attrs.extend(self.docs.iter().map(|s| parse_quote!(#[doc=#s])));
        if let Some(s) = self.deprecated {
            attrs.push(parse_quote!(#[deprecated=#s]));
        }
    }
}

impl<'a> VisitMut for IncludeDocs<'a> {
    fn visit_item_fn_mut(&mut self, i: &mut ItemFn) {
        self.include_docs(&mut i.attrs)
    }

    fn visit_item_impl_mut(&mut self, i: &mut ItemImpl) {
        self.include_docs(&mut i.attrs)
    }
}