Improve error messages in `pyo3cls`
This commit is contained in:
parent
d07c538779
commit
d1d0dddb48
|
@ -19,7 +19,6 @@ quote="0.5"
|
||||||
version="0.13"
|
version="0.13"
|
||||||
features=["full", "parsing", "printing", "extra-traits"]
|
features=["full", "parsing", "printing", "extra-traits"]
|
||||||
|
|
||||||
|
|
||||||
[dependencies.pyo3-derive-backend]
|
[dependencies.pyo3-derive-backend]
|
||||||
path = "../pyo3-derive-backend"
|
path = "../pyo3-derive-backend"
|
||||||
version = "0.2.5"
|
version = "0.2.5"
|
||||||
|
|
|
@ -21,10 +21,12 @@ use syn::punctuated::Punctuated;
|
||||||
#[proc_macro_attribute]
|
#[proc_macro_attribute]
|
||||||
pub fn mod2init(attr: TokenStream, input: TokenStream) -> TokenStream {
|
pub fn mod2init(attr: TokenStream, input: TokenStream) -> TokenStream {
|
||||||
// Parse the token stream into a syntax tree
|
// Parse the token stream into a syntax tree
|
||||||
let mut ast: syn::ItemFn = syn::parse(input).unwrap();
|
let mut ast: syn::ItemFn = syn::parse(input)
|
||||||
|
.expect("#[modinit] must be used on a function");
|
||||||
|
|
||||||
// Extract the mod name
|
// Extract the mod name
|
||||||
let modname: syn::Ident = syn::parse(attr).unwrap();
|
let modname: syn::Ident = syn::parse(attr)
|
||||||
|
.expect("could not parse module name");
|
||||||
|
|
||||||
// Process the functions within the module
|
// Process the functions within the module
|
||||||
module::process_functions_in_module(&mut ast);
|
module::process_functions_in_module(&mut ast);
|
||||||
|
@ -41,10 +43,12 @@ pub fn mod2init(attr: TokenStream, input: TokenStream) -> TokenStream {
|
||||||
#[proc_macro_attribute]
|
#[proc_macro_attribute]
|
||||||
pub fn mod3init(attr: TokenStream, input: TokenStream) -> TokenStream {
|
pub fn mod3init(attr: TokenStream, input: TokenStream) -> TokenStream {
|
||||||
// Parse the token stream into a syntax tree
|
// Parse the token stream into a syntax tree
|
||||||
let mut ast: syn::ItemFn = syn::parse(input).unwrap();
|
let mut ast: syn::ItemFn = syn::parse(input)
|
||||||
|
.expect("#[modinit] must be used on a `fn` block");
|
||||||
|
|
||||||
// Extract the mod name
|
// Extract the mod name
|
||||||
let modname: syn::Ident = syn::parse(attr).unwrap();
|
let modname: syn::Ident = syn::parse(attr)
|
||||||
|
.expect("could not parse module name");
|
||||||
|
|
||||||
// Process the functions within the module
|
// Process the functions within the module
|
||||||
module::process_functions_in_module(&mut ast);
|
module::process_functions_in_module(&mut ast);
|
||||||
|
@ -61,7 +65,8 @@ pub fn mod3init(attr: TokenStream, input: TokenStream) -> TokenStream {
|
||||||
#[proc_macro_attribute]
|
#[proc_macro_attribute]
|
||||||
pub fn proto(_: TokenStream, input: TokenStream) -> TokenStream {
|
pub fn proto(_: TokenStream, input: TokenStream) -> TokenStream {
|
||||||
// Parse the token stream into a syntax tree
|
// Parse the token stream into a syntax tree
|
||||||
let mut ast: syn::Item = syn::parse(input).unwrap();
|
let mut ast: syn::Item = syn::parse(input)
|
||||||
|
.expect("#[proto] must be used on an `impl` block");
|
||||||
|
|
||||||
// Build the output
|
// Build the output
|
||||||
let expanded = py_proto::build_py_proto(&mut ast);
|
let expanded = py_proto::build_py_proto(&mut ast);
|
||||||
|
@ -75,13 +80,14 @@ pub fn proto(_: TokenStream, input: TokenStream) -> TokenStream {
|
||||||
#[proc_macro_attribute]
|
#[proc_macro_attribute]
|
||||||
pub fn class(attr: TokenStream, input: TokenStream) -> TokenStream {
|
pub fn class(attr: TokenStream, input: TokenStream) -> TokenStream {
|
||||||
// Parse the token stream into a syntax tree
|
// Parse the token stream into a syntax tree
|
||||||
let mut ast: syn::DeriveInput = syn::parse(input).unwrap();
|
let mut ast: syn::DeriveInput = syn::parse(input)
|
||||||
|
.expect("#[class] must be used on an ");
|
||||||
|
|
||||||
// Parse the macro arguments into a list of expressions
|
// Parse the macro arguments into a list of expressions
|
||||||
let mut args: Vec<syn::Expr> = {
|
let mut args: Vec<syn::Expr> = {
|
||||||
let buffer = TokenBuffer::new(attr);
|
let buffer = TokenBuffer::new(attr);
|
||||||
let punc = Punctuated::<syn::Expr, Token![,]>::parse_terminated(buffer.begin());
|
let punc = Punctuated::<syn::Expr, Token![,]>::parse_terminated(buffer.begin());
|
||||||
punc.expect("could not parse arguments").0.into_iter().collect()
|
punc.expect("could not parse macro arguments").0.into_iter().collect()
|
||||||
};
|
};
|
||||||
|
|
||||||
// Build the output
|
// Build the output
|
||||||
|
@ -96,7 +102,8 @@ pub fn class(attr: TokenStream, input: TokenStream) -> TokenStream {
|
||||||
#[proc_macro_attribute]
|
#[proc_macro_attribute]
|
||||||
pub fn methods(_: TokenStream, input: TokenStream) -> TokenStream {
|
pub fn methods(_: TokenStream, input: TokenStream) -> TokenStream {
|
||||||
// Parse the token stream into a syntax tree
|
// Parse the token stream into a syntax tree
|
||||||
let mut ast: syn::Item = syn::parse(input).unwrap();
|
let mut ast: syn::Item = syn::parse(input)
|
||||||
|
.expect("#[methods] must be used on an `impl` block");
|
||||||
|
|
||||||
// Build the output
|
// Build the output
|
||||||
let expanded = py_impl::build_py_methods(&mut ast);
|
let expanded = py_impl::build_py_methods(&mut ast);
|
||||||
|
@ -111,7 +118,7 @@ pub fn methods(_: TokenStream, input: TokenStream) -> TokenStream {
|
||||||
pub fn function(_: TokenStream, input: TokenStream) -> TokenStream {
|
pub fn function(_: TokenStream, input: TokenStream) -> TokenStream {
|
||||||
// Parse the token stream into a syntax tree
|
// Parse the token stream into a syntax tree
|
||||||
let mut ast: syn::ItemFn = syn::parse(input)
|
let mut ast: syn::ItemFn = syn::parse(input)
|
||||||
.expect("#[function] must be used on function definitions");
|
.expect("#[function] must be used on a `fn` block");
|
||||||
|
|
||||||
// Build the output
|
// Build the output
|
||||||
let python_name = ast.ident.clone();
|
let python_name = ast.ident.clone();
|
||||||
|
|
Loading…
Reference in New Issue