Prevent the full-file "error[E0601]: main function not found in crate" error#24
Open
DusterTheFirst wants to merge 1 commit intoasync-rs:masterfrom
Open
Prevent the full-file "error[E0601]: main function not found in crate" error#24DusterTheFirst wants to merge 1 commit intoasync-rs:masterfrom
main function not found in crate" error#24DusterTheFirst wants to merge 1 commit intoasync-rs:masterfrom
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The What
When using the
#[async_attributes::main]macro and compiling a rust program with a syntax error in the main function, the user would be met with a big, intrusive, unhelpful error that there is no main function in the file. This can get very annoying, especially when paired with rust-analyzer and its on screen errors (taking up the whole file).The Why
This error is caused when the
mainproc-macro fails to parse the inputted function with thesyn::parse_macro_input!, causing it to return early, producing no main function.The Fix
This PR uses the
syn::parsefunction directly so that a parsing error can be caught, producing a placeholder empty main function to suppress the extraneous error. This placeholder main function will never be able to compile into a final executable since the macro also emits acompiler_error!.