diff options
| author | Pg Biel <9021226+PgBiel@users.noreply.github.com> | 2023-05-03 09:20:53 -0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-05-03 14:20:53 +0200 |
| commit | f88ef45ee6e285df59c7aa5cec935de331b4b6e0 (patch) | |
| tree | eab5481d4b50d1d57adb4d122d7fa023dee2dcec /macros/src/func.rs | |
| parent | db6a710638cf26ddcd09b8fba74b9d1caf6cb4b8 (diff) | |
Function scopes (#1032)
Diffstat (limited to 'macros/src/func.rs')
| -rw-r--r-- | macros/src/func.rs | 9 |
1 files changed, 7 insertions, 2 deletions
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<Param>, returns: Vec<String>, body: syn::Block, + scope: Option<BlockWithReturn>, } struct Param { @@ -72,7 +73,8 @@ fn prepare(item: &syn::ItemFn) -> Result<Func> { 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<Func> { 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 |
