From fa59c0c0bc9032c5cd0a5941e6d69d8f50792c03 Mon Sep 17 00:00:00 2001 From: Zachary Kohnen <14093962+DusterTheFirst@users.noreply.github.com> Date: Thu, 1 Apr 2021 17:19:52 -0400 Subject: [PATCH] Prevent the full-file "error[E0601]: `main` function not found in crate" error --- src/lib.rs | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/lib.rs b/src/lib.rs index e53c27b..c5bc063 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -44,7 +44,19 @@ use syn::spanned::Spanned; #[cfg(not(test))] // NOTE: exporting main breaks tests, we should file an issue. #[proc_macro_attribute] pub fn main(_attr: TokenStream, item: TokenStream) -> TokenStream { - let input = syn::parse_macro_input!(item as syn::ItemFn); + let input = match syn::parse::(item) { + Ok(input) => input, + Err(err) => { + let compile_err = err.to_compile_error(); + + return quote_spanned! {err.span()=> + #compile_err + + fn main() {} + } + .into(); + } + }; let ret = &input.sig.output; let inputs = &input.sig.inputs;