1
Fork 0

Move trait into attr so it's greppable

This commit is contained in:
Michael Goulet 2024-02-14 17:18:56 +00:00
parent 9c25823bb4
commit a9dbf63087
31 changed files with 91 additions and 80 deletions

View file

@ -8,10 +8,12 @@ use syn::{
Token, TraitItem, TraitItemConst, TraitItemFn, TraitItemMacro, TraitItemType, Type, Visibility,
};
pub(crate) fn extension(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
// Parse the input tokens into a syntax tree
let Extension { attrs, generics, vis, trait_, self_ty, items } =
parse_macro_input!(input as Extension);
pub(crate) fn extension(
attr: proc_macro::TokenStream,
input: proc_macro::TokenStream,
) -> proc_macro::TokenStream {
let ExtensionAttr { vis, trait_ } = parse_macro_input!(attr as ExtensionAttr);
let Impl { attrs, generics, self_ty, items } = parse_macro_input!(input as Impl);
let headers: Vec<_> = items
.iter()
.map(|item| match item {
@ -105,23 +107,32 @@ fn scrub_header(mut sig: Signature) -> Signature {
sig
}
struct Extension {
attrs: Vec<Attribute>,
struct ExtensionAttr {
vis: Visibility,
generics: Generics,
trait_: Path,
}
impl Parse for ExtensionAttr {
fn parse(input: ParseStream<'_>) -> syn::Result<Self> {
let vis = input.parse()?;
let _: Token![trait] = input.parse()?;
let trait_ = input.parse()?;
Ok(ExtensionAttr { vis, trait_ })
}
}
struct Impl {
attrs: Vec<Attribute>,
generics: Generics,
self_ty: Type,
items: Vec<ImplItem>,
}
impl Parse for Extension {
impl Parse for Impl {
fn parse(input: ParseStream<'_>) -> syn::Result<Self> {
let attrs = input.call(Attribute::parse_outer)?;
let vis = input.parse()?;
let _: Token![impl] = input.parse()?;
let generics = input.parse()?;
let trait_ = input.parse()?;
let _: Token![for] = input.parse()?;
let self_ty = input.parse()?;
let content;
@ -131,6 +142,6 @@ impl Parse for Extension {
items.push(content.parse()?);
}
Ok(Extension { attrs, generics, vis, trait_, self_ty, items })
Ok(Impl { attrs, generics, self_ty, items })
}
}

View file

@ -42,8 +42,8 @@ pub fn symbols(input: TokenStream) -> TokenStream {
}
#[proc_macro_attribute]
pub fn extension(_attr: TokenStream, input: TokenStream) -> TokenStream {
extension::extension(input)
pub fn extension(attr: TokenStream, input: TokenStream) -> TokenStream {
extension::extension(attr, input)
}
decl_derive!([HashStable, attributes(stable_hasher)] => hash_stable::hash_stable_derive);