macroscope/
lib.rs

1#[macro_use]
2pub mod wrapper;
3
4#[macro_use]
5pub mod validate;
6
7pub mod choice;
8pub mod delimited;
9pub mod optional;
10pub mod pair;
11pub mod separated;
12pub mod tail;
13
14use proc_macro2::Span;
15use proc_macro_crate::FoundCrate;
16use syn::Ident;
17
18pub use macroscope_macro::build_using;
19pub use macroscope_utils::{find_crate, quote_crate, tools};
20pub use quote::{quote, quote_spanned};
21
22pub mod macros {
23    pub use macroscope_utils::{expr, snippet, try_parse, ty};
24}
25
26#[macro_export]
27macro_rules! found_crate {
28    ($name:expr) => {
29        match found {
30            FoundCrate::Itself => quote! { crate },
31            FoundCrate::Name(name) => {
32                let ident = Ident::new(&name, Span::call_site());
33                quote! { #ident }
34            }
35        }
36    };
37}
38
39pub fn found_crate_prefix(found: FoundCrate) -> proc_macro2::TokenStream {
40    match found {
41        FoundCrate::Itself => quote! { crate },
42        FoundCrate::Name(name) => {
43            let ident = Ident::new(&name, Span::call_site());
44            quote! { #ident }
45        }
46    }
47}
48
49pub fn found_crate_path(
50    found: FoundCrate,
51    quoted: proc_macro2::TokenStream,
52) -> proc_macro2::TokenStream {
53    let prefix = found_crate_prefix(found);
54
55    (quote! {
56        #prefix :: macros :: crates :: #quoted
57    })
58    .into()
59}