deno_bindgen2_common/rust/
util.rs1pub 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}