diff options
| author | Laurenz <laurmaedje@gmail.com> | 2023-05-17 14:41:46 +0200 |
|---|---|---|
| committer | Laurenz <laurmaedje@gmail.com> | 2023-05-17 14:41:46 +0200 |
| commit | 551ea99d05166b0be50792f767ddd38b996e32fa (patch) | |
| tree | ec5e86a087e79e8c181c7d4b904216a775227e2d /macros/src/element.rs | |
| parent | 46aace78ac4ac1c075b9b1670dbb7372df1a0a82 (diff) | |
Show default values in documentation
Fixes #169
Fixes #1102
Diffstat (limited to 'macros/src/element.rs')
| -rw-r--r-- | macros/src/element.rs | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/macros/src/element.rs b/macros/src/element.rs index 61830939..d5882666 100644 --- a/macros/src/element.rs +++ b/macros/src/element.rs @@ -407,9 +407,29 @@ fn create_vtable_func(element: &Elem) -> TokenStream { /// Create a parameter info for a field. fn create_param_info(field: &Field) -> TokenStream { - let Field { name, docs, positional, variadic, required, ty, .. } = field; + let Field { + name, + docs, + positional, + variadic, + required, + default, + fold, + ty, + output, + .. + } = field; let named = !positional; let settable = field.settable(); + let default_ty = if *fold { &output } else { &ty }; + let default = quote_option(&settable.then(|| { + quote! { + || { + let typed: #default_ty = #default; + ::typst::eval::Value::from(typed) + } + } + })); let ty = if *variadic { quote! { <#ty as ::typst::eval::Variadics>::Inner } } else { @@ -422,6 +442,7 @@ fn create_param_info(field: &Field) -> TokenStream { cast: <#ty as ::typst::eval::Cast< ::typst::syntax::Spanned<::typst::eval::Value> >>::describe(), + default: #default, positional: #positional, named: #named, variadic: #variadic, |
