macroscope 0.1.1

Macroscope makes writing proc macros a breeze
Documentation
#[macro_use]
pub mod wrapper;

#[macro_use]
pub mod validate;

pub mod choice;
pub mod delimited;
pub mod optional;
pub mod pair;
pub mod separated;
pub mod tail;

use proc_macro2::Span;
use proc_macro_crate::FoundCrate;
use syn::Ident;

pub use macroscope_macro::build_using;
pub use macroscope_utils::{find_crate, quote_crate, tools};
pub use quote::{quote, quote_spanned};

pub mod macros {
    pub use macroscope_utils::{expr, snippet, try_parse, ty};
}

#[macro_export]
macro_rules! found_crate {
    ($name:expr) => {
        match found {
            FoundCrate::Itself => quote! { crate },
            FoundCrate::Name(name) => {
                let ident = Ident::new(&name, Span::call_site());
                quote! { #ident }
            }
        }
    };
}

pub fn found_crate_prefix(found: FoundCrate) -> proc_macro2::TokenStream {
    match found {
        FoundCrate::Itself => quote! { crate },
        FoundCrate::Name(name) => {
            let ident = Ident::new(&name, Span::call_site());
            quote! { #ident }
        }
    }
}

pub fn found_crate_path(
    found: FoundCrate,
    quoted: proc_macro2::TokenStream,
) -> proc_macro2::TokenStream {
    let prefix = found_crate_prefix(found);

    (quote! {
        #prefix :: macros :: crates :: #quoted
    })
    .into()
}