Fix DynamicSpacing docs (#20509)

In #20504 the CustomSpacing enum variants ended up not having docs. This
PR fixes that, now docs correctly show for variants.


https://github.com/user-attachments/assets/8cc409c9-7b71-4c21-a538-3fd5dded3e00

Release Notes:

- N/A
This commit is contained in:
Nate Butler 2024-11-11 12:58:39 -05:00 committed by GitHub
parent a47759fd03
commit 6152230152
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 45 additions and 18 deletions

View file

@ -4,6 +4,29 @@ use theme::{ThemeSettings, UiDensity};
use ui_macros::derive_dynamic_spacing; use ui_macros::derive_dynamic_spacing;
// Derives [DynamicSpacing]. See [ui_macros::derive_dynamic_spacing]. // Derives [DynamicSpacing]. See [ui_macros::derive_dynamic_spacing].
//
// There are 3 UI density settings: Compact, Default, and Comfortable.
//
// When a tuple of three values is provided, the values are used directly.
//
// Example: (1, 2, 4) => Compact: 1px, Default: 2px, Comfortable: 4px
//
// When a single value is provided, the standard spacing formula is
// used to derive the of spacing values. This formula can be found in
// the macro.
//
// Example:
//
// Assuming the standard formula is (n-4, n, n+4)
//
// 24 => Compact: 20px, Default: 24px, Comfortable: 28px
//
// The [DynamicSpacing] enum variants use a BaseXX format,
// where XX = the pixel value @ default rem size and the default UI density.
//
// Example:
//
// DynamicSpacing::Base16 would return 16px at the default UI scale & density.
derive_dynamic_spacing![ derive_dynamic_spacing![
(0, 0, 0), (0, 0, 0),
(1, 1, 2), (1, 1, 2),

View file

@ -88,37 +88,41 @@ pub fn derive_spacing(input: TokenStream) -> TokenStream {
}) })
.collect(); .collect();
let variant_docs: Vec<_> = input let (variant_names, doc_strings): (Vec<_>, Vec<_>) = input
.values .values
.iter() .iter()
.map(|v| { .map(|v| {
let variant = match v { let variant = match v {
DynamicSpacingValue::Single(n) => format_ident!("Base{:02}", n.base10_parse::<u32>().unwrap()),
DynamicSpacingValue::Tuple(_, b, _) => format_ident!("Base{:02}", b.base10_parse::<u32>().unwrap()),
};
match v {
DynamicSpacingValue::Single(n) => { DynamicSpacingValue::Single(n) => {
// When a single value is passed in, derive the compact and comfortable values. format_ident!("Base{:02}", n.base10_parse::<u32>().unwrap())
}
DynamicSpacingValue::Tuple(_, b, _) => {
format_ident!("Base{:02}", b.base10_parse::<u32>().unwrap())
}
};
let doc_string = match v {
DynamicSpacingValue::Single(n) => {
let n = n.base10_parse::<f32>().unwrap(); let n = n.base10_parse::<f32>().unwrap();
let compact = (n - 4.0).max(0.0); let compact = (n - 4.0).max(0.0);
let comfortable = n + 4.0; let comfortable = n + 4.0;
quote! { format!(
#[doc = concat!("@16px/rem: `", stringify!(#compact), "px`|`", stringify!(#n), "px`|`", stringify!(#comfortable), "px` - Scales with the user's rem size.")] "`{}px`|`{}px`|`{}px (@16px/rem)` - Scales with the user's rem size.",
#variant, compact, n, comfortable
} )
} }
DynamicSpacingValue::Tuple(a, b, c) => { DynamicSpacingValue::Tuple(a, b, c) => {
let a = a.base10_parse::<f32>().unwrap(); let a = a.base10_parse::<f32>().unwrap();
let b = b.base10_parse::<f32>().unwrap(); let b = b.base10_parse::<f32>().unwrap();
let c = c.base10_parse::<f32>().unwrap(); let c = c.base10_parse::<f32>().unwrap();
quote! { format!(
#[doc = concat!("@16px/rem: `", stringify!(#a), "px`|`", stringify!(#b), "px`|`", stringify!(#c), "px` - Scales with the user's rem size.")] "`{}px`|`{}px`|`{}px (@16px/rem)` - Scales with the user's rem size.",
#variant, a, b, c
} )
} }
} };
(quote!(#variant), quote!(#doc_string))
}) })
.collect(); .unzip();
let expanded = quote! { let expanded = quote! {
/// A dynamic spacing system that adjusts spacing based on /// A dynamic spacing system that adjusts spacing based on
@ -132,8 +136,8 @@ pub fn derive_spacing(input: TokenStream) -> TokenStream {
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)] #[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub enum DynamicSpacing { pub enum DynamicSpacing {
#( #(
#[doc = stringify!(#variant_docs)] #[doc = #doc_strings]
#variant_docs #variant_names,
)* )*
} }