aboutsummaryrefslogtreecommitdiff
path: root/vendor/syn/tests/macros/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/syn/tests/macros/mod.rs')
-rw-r--r--vendor/syn/tests/macros/mod.rs92
1 files changed, 92 insertions, 0 deletions
diff --git a/vendor/syn/tests/macros/mod.rs b/vendor/syn/tests/macros/mod.rs
new file mode 100644
index 0000000..d27c391
--- /dev/null
+++ b/vendor/syn/tests/macros/mod.rs
@@ -0,0 +1,92 @@
+#![allow(unused_macros, unused_macro_rules)]
+
+#[path = "../debug/mod.rs"]
+pub mod debug;
+
+use std::str::FromStr;
+use syn::parse::Result;
+
+macro_rules! errorf {
+ ($($tt:tt)*) => {{
+ use ::std::io::Write;
+ let stderr = ::std::io::stderr();
+ write!(stderr.lock(), $($tt)*).unwrap();
+ }};
+}
+
+macro_rules! punctuated {
+ ($($e:expr,)+) => {{
+ let mut seq = ::syn::punctuated::Punctuated::new();
+ $(
+ seq.push($e);
+ )+
+ seq
+ }};
+
+ ($($e:expr),+) => {
+ punctuated!($($e,)+)
+ };
+}
+
+macro_rules! snapshot {
+ ($($args:tt)*) => {
+ snapshot_impl!(() $($args)*)
+ };
+}
+
+macro_rules! snapshot_impl {
+ (($expr:ident) as $t:ty, @$snapshot:literal) => {
+ let tokens = crate::macros::TryIntoTokens::try_into_tokens($expr).unwrap();
+ let $expr: $t = syn::parse_quote!(#tokens);
+ let debug = crate::macros::debug::Lite(&$expr);
+ if !cfg!(miri) {
+ #[allow(clippy::needless_raw_string_hashes)] // https://github.com/mitsuhiko/insta/issues/389
+ {
+ insta::assert_debug_snapshot!(debug, @$snapshot);
+ }
+ }
+ };
+ (($($expr:tt)*) as $t:ty, @$snapshot:literal) => {{
+ let tokens = crate::macros::TryIntoTokens::try_into_tokens($($expr)*).unwrap();
+ let syntax_tree: $t = syn::parse_quote!(#tokens);
+ let debug = crate::macros::debug::Lite(&syntax_tree);
+ if !cfg!(miri) {
+ #[allow(clippy::needless_raw_string_hashes)]
+ {
+ insta::assert_debug_snapshot!(debug, @$snapshot);
+ }
+ }
+ syntax_tree
+ }};
+ (($($expr:tt)*) , @$snapshot:literal) => {{
+ let syntax_tree = $($expr)*;
+ let debug = crate::macros::debug::Lite(&syntax_tree);
+ if !cfg!(miri) {
+ #[allow(clippy::needless_raw_string_hashes)]
+ {
+ insta::assert_debug_snapshot!(debug, @$snapshot);
+ }
+ }
+ syntax_tree
+ }};
+ (($($expr:tt)*) $next:tt $($rest:tt)*) => {
+ snapshot_impl!(($($expr)* $next) $($rest)*)
+ };
+}
+
+pub trait TryIntoTokens {
+ fn try_into_tokens(self) -> Result<proc_macro2::TokenStream>;
+}
+
+impl<'a> TryIntoTokens for &'a str {
+ fn try_into_tokens(self) -> Result<proc_macro2::TokenStream> {
+ let tokens = proc_macro2::TokenStream::from_str(self)?;
+ Ok(tokens)
+ }
+}
+
+impl TryIntoTokens for proc_macro2::TokenStream {
+ fn try_into_tokens(self) -> Result<proc_macro2::TokenStream> {
+ Ok(self)
+ }
+}