1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
extern crate proc_macro; use proc_macro::TokenStream; use quote::quote; use syn::{parse_macro_input, DeriveInput}; #[proc_macro_derive(Completer)] pub fn completer_macro_derive(input: TokenStream) -> TokenStream { let input = parse_macro_input!(input as DeriveInput); let name = &input.ident; let generics = input.generics; let (impl_generics, ty_generics, where_clause) = generics.split_for_impl(); let expanded = quote! { impl #impl_generics rustyline::completion::Completer for #name #ty_generics #where_clause { type Candidate = std::string::String; } }; TokenStream::from(expanded) } #[proc_macro_derive(Helper)] pub fn helper_macro_derive(input: TokenStream) -> TokenStream { let input = parse_macro_input!(input as DeriveInput); let name = &input.ident; let generics = input.generics; let (impl_generics, ty_generics, where_clause) = generics.split_for_impl(); let expanded = quote! { impl #impl_generics rustyline::Helper for #name #ty_generics #where_clause { } }; TokenStream::from(expanded) } #[proc_macro_derive(Highlighter)] pub fn highlighter_macro_derive(input: TokenStream) -> TokenStream { let input = parse_macro_input!(input as DeriveInput); let name = &input.ident; let generics = input.generics; let (impl_generics, ty_generics, where_clause) = generics.split_for_impl(); let expanded = quote! { impl #impl_generics rustyline::highlight::Highlighter for #name #ty_generics #where_clause { } }; TokenStream::from(expanded) } #[proc_macro_derive(Hinter)] pub fn hinter_macro_derive(input: TokenStream) -> TokenStream { let input = parse_macro_input!(input as DeriveInput); let name = &input.ident; let generics = input.generics; let (impl_generics, ty_generics, where_clause) = generics.split_for_impl(); let expanded = quote! { impl #impl_generics rustyline::hint::Hinter for #name #ty_generics #where_clause { } }; TokenStream::from(expanded) }