From f88ef45ee6e285df59c7aa5cec935de331b4b6e0 Mon Sep 17 00:00:00 2001
From: Pg Biel <9021226+PgBiel@users.noreply.github.com>
Date: Wed, 3 May 2023 09:20:53 -0300
Subject: Function scopes (#1032)
---
macros/src/func.rs | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
(limited to 'macros/src/func.rs')
diff --git a/macros/src/func.rs b/macros/src/func.rs
index 386ed7c4..f3de6822 100644
--- a/macros/src/func.rs
+++ b/macros/src/func.rs
@@ -18,6 +18,7 @@ struct Func {
params: Vec,
returns: Vec,
body: syn::Block,
+ scope: Option,
}
struct Param {
@@ -72,7 +73,8 @@ fn prepare(item: &syn::ItemFn) -> Result {
validate_attrs(&attrs)?;
}
- let docs = documentation(&item.attrs);
+ let mut attrs = item.attrs.clone();
+ let docs = documentation(&attrs);
let mut lines = docs.split('\n').collect();
let returns = meta_line(&mut lines, "Returns")?
.split(" or ")
@@ -92,9 +94,10 @@ fn prepare(item: &syn::ItemFn) -> Result {
params,
returns,
body: (*item.block).clone(),
+ scope: parse_attr(&mut attrs, "scope")?.flatten(),
};
- validate_attrs(&item.attrs)?;
+ validate_attrs(&attrs)?;
Ok(func)
}
@@ -113,6 +116,7 @@ fn create(func: &Func) -> TokenStream {
} = func;
let handlers = params.iter().filter(|param| !param.external).map(create_param_parser);
let params = params.iter().map(create_param_info);
+ let scope = create_scope_builder(func.scope.as_ref());
quote! {
#[doc = #docs]
#vis fn #ident() -> &'static ::typst::eval::NativeFunc {
@@ -129,6 +133,7 @@ fn create(func: &Func) -> TokenStream {
params: ::std::vec![#(#params),*],
returns: ::std::vec![#(#returns),*],
category: #category,
+ scope: #scope,
}),
};
&FUNC
--
cgit v1.2.3