parent
bd4c4209af
commit
a614e697d0
@ -1,6 +1,7 @@
|
|||||||
use darling::FromMeta;
|
use darling::FromMeta;
|
||||||
use proc_macro2::TokenStream;
|
use proc_macro2::TokenStream;
|
||||||
use quote::quote;
|
use quote::quote;
|
||||||
|
use syn::{ReturnType, Type};
|
||||||
|
|
||||||
use crate::util::ctxt::Ctxt;
|
use crate::util::ctxt::Ctxt;
|
||||||
|
|
||||||
@ -76,6 +77,26 @@ pub fn run(args: syn::AttributeArgs, f: syn::ItemFn, main: TokenStream) -> Resul
|
|||||||
if !f.sig.generics.params.is_empty() {
|
if !f.sig.generics.params.is_empty() {
|
||||||
ctxt.error_spanned_by(&f.sig, "main function must not be generic");
|
ctxt.error_spanned_by(&f.sig, "main function must not be generic");
|
||||||
}
|
}
|
||||||
|
if !f.sig.generics.where_clause.is_none() {
|
||||||
|
ctxt.error_spanned_by(&f.sig, "main function must not have `where` clauses");
|
||||||
|
}
|
||||||
|
if !f.sig.abi.is_none() {
|
||||||
|
ctxt.error_spanned_by(&f.sig, "main function must not have an ABI qualifier");
|
||||||
|
}
|
||||||
|
if !f.sig.variadic.is_none() {
|
||||||
|
ctxt.error_spanned_by(&f.sig, "main function must not be variadic");
|
||||||
|
}
|
||||||
|
match &f.sig.output {
|
||||||
|
ReturnType::Default => {}
|
||||||
|
ReturnType::Type(_, ty) => match &**ty {
|
||||||
|
Type::Tuple(tuple) if tuple.elems.is_empty() => {}
|
||||||
|
Type::Never(_) => {}
|
||||||
|
_ => ctxt.error_spanned_by(
|
||||||
|
&f.sig,
|
||||||
|
"main function must either not return a value, return `()` or return `!`",
|
||||||
|
),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
if fargs.len() != 1 {
|
if fargs.len() != 1 {
|
||||||
ctxt.error_spanned_by(&f.sig, "main function must have 1 argument: the spawner.");
|
ctxt.error_spanned_by(&f.sig, "main function must have 1 argument: the spawner.");
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
use darling::FromMeta;
|
use darling::FromMeta;
|
||||||
use proc_macro2::TokenStream;
|
use proc_macro2::TokenStream;
|
||||||
use quote::{format_ident, quote};
|
use quote::{format_ident, quote};
|
||||||
use syn::{parse_quote, ItemFn};
|
use syn::{parse_quote, ItemFn, ReturnType, Type};
|
||||||
|
|
||||||
use crate::util::ctxt::Ctxt;
|
use crate::util::ctxt::Ctxt;
|
||||||
|
|
||||||
@ -24,6 +24,27 @@ pub fn run(args: syn::AttributeArgs, f: syn::ItemFn) -> Result<TokenStream, Toke
|
|||||||
if !f.sig.generics.params.is_empty() {
|
if !f.sig.generics.params.is_empty() {
|
||||||
ctxt.error_spanned_by(&f.sig, "task functions must not be generic");
|
ctxt.error_spanned_by(&f.sig, "task functions must not be generic");
|
||||||
}
|
}
|
||||||
|
if !f.sig.generics.where_clause.is_none() {
|
||||||
|
ctxt.error_spanned_by(&f.sig, "task functions must not have `where` clauses");
|
||||||
|
}
|
||||||
|
if !f.sig.abi.is_none() {
|
||||||
|
ctxt.error_spanned_by(&f.sig, "task functions must not have an ABI qualifier");
|
||||||
|
}
|
||||||
|
if !f.sig.variadic.is_none() {
|
||||||
|
ctxt.error_spanned_by(&f.sig, "task functions must not be variadic");
|
||||||
|
}
|
||||||
|
match &f.sig.output {
|
||||||
|
ReturnType::Default => {}
|
||||||
|
ReturnType::Type(_, ty) => match &**ty {
|
||||||
|
Type::Tuple(tuple) if tuple.elems.is_empty() => {}
|
||||||
|
Type::Never(_) => {}
|
||||||
|
_ => ctxt.error_spanned_by(
|
||||||
|
&f.sig,
|
||||||
|
"task functions must either not return a value, return `()` or return `!`",
|
||||||
|
),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
if pool_size < 1 {
|
if pool_size < 1 {
|
||||||
ctxt.error_spanned_by(&f.sig, "pool_size must be 1 or greater");
|
ctxt.error_spanned_by(&f.sig, "pool_size must be 1 or greater");
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user