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}