deno-bindgen2-common 1.0.1

Common library used by the deno-bindgen2 project. Contains mainly implmenentations for parsing and transforming Rust source code.
Documentation
pub use proc_macro2::{Span, TokenStream};
pub use quote::{format_ident, quote, ToTokens};
pub use syn::ext::IdentExt;
pub use syn::parse::discouraged::Speculative;
pub use syn::parse::{Parse, ParseStream};
pub use syn::spanned::Spanned;
pub use syn::token::{Brace, Bracket, Paren};
pub use syn::visit_mut::VisitMut;
pub use syn::{
    braced, bracketed, parenthesized, Error, Expr, Ident, Lifetime, LitInt, LitStr, Pat, Result,
    Token, Visibility,
};

#[allow(unused_imports)]
pub use crate::{dbg_assert, dbg_quote, parse_quote};
#[cfg(feature = "macro")]
#[allow(unused_imports)]
pub use crate::{diag_warning, diagnostic};

#[macro_export]
macro_rules! parse_quote {
    ( $ty:ty, $($tt:tt)* ) => {
        syn::parse2::<$ty>(quote::quote!{ $($tt)* })
            .map_err(|err| panic!("{err:#?}"))
            .unwrap()
    };
}

#[macro_export]
macro_rules! prettify {
    ( $input:expr ) => {{
        let out = syn::parse_file($input).unwrap();
        prettyplease::unparse(&out)
    }};
}

#[macro_export]
macro_rules! dbg_quote {
    ( $($tt:tt)* ) => {
        dbg!( $crate::parse_quote!($($tt)*))
    };
}

#[macro_export]
macro_rules! dbg_assert {
    ( $actual:expr, $expected:expr  ) => {
        dbg!(&$actual);
        assert_eq!($actual, $expected)
    };
}

#[cfg(feature = "macro")]
#[macro_export]
macro_rules! diag_warning {
    ( $span:ident, $( $rest:tt )+ ) => {
        $crate::diagnostic!($span, proc_macro::Level::Warning, $( $rest )*)
    };
}
#[cfg(feature = "macro")]
#[macro_export]
macro_rules! diagnostic {
    ( $span:ident, $level:expr, $msg:expr ) => {
        proc_macro::Diagnostic::spanned(syn::spanned::Spanned::span(&$span).unwrap(), $level, $msg)
    };

    ( $span:ident, $level:expr, $fmt:expr, $( $args:expr ),+ ) => {
        proc_macro::Diagnostic::spanned(syn::spanned::Spanned::span(&$span).unwrap(), $level, format!($fmt, $( $args ),*)).emit()
    };
}