deno_bindgen2_common/rust/
util.rs

1pub use proc_macro2::{Span, TokenStream};
2pub use quote::{format_ident, quote, ToTokens};
3pub use syn::ext::IdentExt;
4pub use syn::parse::discouraged::Speculative;
5pub use syn::parse::{Parse, ParseStream};
6pub use syn::spanned::Spanned;
7pub use syn::token::{Brace, Bracket, Paren};
8pub use syn::visit_mut::VisitMut;
9pub use syn::{
10    braced, bracketed, parenthesized, Error, Expr, Ident, Lifetime, LitInt, LitStr, Pat, Result,
11    Token, Visibility,
12};
13
14#[allow(unused_imports)]
15pub use crate::{dbg_assert, dbg_quote, parse_quote};
16#[cfg(feature = "macro")]
17#[allow(unused_imports)]
18pub use crate::{diag_warning, diagnostic};
19
20#[macro_export]
21macro_rules! parse_quote {
22    ( $ty:ty, $($tt:tt)* ) => {
23        syn::parse2::<$ty>(quote::quote!{ $($tt)* })
24            .map_err(|err| panic!("{err:#?}"))
25            .unwrap()
26    };
27}
28
29#[macro_export]
30macro_rules! prettify {
31    ( $input:expr ) => {{
32        let out = syn::parse_file($input).unwrap();
33        prettyplease::unparse(&out)
34    }};
35}
36
37#[macro_export]
38macro_rules! dbg_quote {
39    ( $($tt:tt)* ) => {
40        dbg!( $crate::parse_quote!($($tt)*))
41    };
42}
43
44#[macro_export]
45macro_rules! dbg_assert {
46    ( $actual:expr, $expected:expr  ) => {
47        dbg!(&$actual);
48        assert_eq!($actual, $expected)
49    };
50}
51
52#[cfg(feature = "macro")]
53#[macro_export]
54macro_rules! diag_warning {
55    ( $span:ident, $( $rest:tt )+ ) => {
56        $crate::diagnostic!($span, proc_macro::Level::Warning, $( $rest )*)
57    };
58}
59#[cfg(feature = "macro")]
60#[macro_export]
61macro_rules! diagnostic {
62    ( $span:ident, $level:expr, $msg:expr ) => {
63        proc_macro::Diagnostic::spanned(syn::spanned::Spanned::span(&$span).unwrap(), $level, $msg)
64    };
65
66    ( $span:ident, $level:expr, $fmt:expr, $( $args:expr ),+ ) => {
67        proc_macro::Diagnostic::spanned(syn::spanned::Spanned::span(&$span).unwrap(), $level, format!($fmt, $( $args ),*)).emit()
68    };
69}