Fix bug preventing structs from using selectors

finchie
Aug 13, 2025, 3:34 AM
Y6YSEDJMU4RLAQG4LJUV5MN6Q2KK2FWOBBIIQY2ZUVM2PREVSNFAC

Dependencies

  • [2] MABGENI7 Refactor `fluent_embed_derive` tests
  • [3] AAERM7PB Add selector tests for the `fr` locale
  • [4] XEEXWJLG Add simple end-to-end test for selectors
  • [5] 3NMKD6I5 Refactor `Localize` trait to use `std::io::Write`
  • [6] 6ABVDTXZ Improve `fluent_embed_derive` test suite
  • [7] S2444K42 Refactor selectors test to not rely on funciton calls
  • [8] 6XEMHUGS Use full `Locale` instead of `LanguageIdentifier` subset
  • [9] F5LG7WEN Emit compilation errors from Fluent source code
  • [10] QFPQZR4K Refactor `fluent_embed`
  • [11] VNSHGQYN Support using glob paths in `localize` macro
  • [12] C6W7N6N5 Implement `Localize` for `FixedDecimal` and primitive number types
  • [13] 7FYXVNAB Ignore comments in Fluent source code
  • [*] 5TEX4MNU Split `fluent_embed` into `group` and `parse` modules

Change contents

  • replacement in l10n_embed_derive/tests/selectors.rs at line 11
    [3.952][3.95:114]()
    pub enum Message {
    [3.952]
    [3.396]
    pub enum MessageEnum {
  • edit in l10n_embed_derive/tests/selectors.rs at line 13
    [3.431]
    [3.974]
    }
    #[localize("tests/locale/**/selectors.ftl")]
    pub struct Emails {
    unread_emails: u64,
  • replacement in l10n_embed_derive/tests/selectors.rs at line 39
    [3.1190][3.131:181](),[3.181][2.71:124]()
    let data = Message::Emails { unread_emails };
    compare_message(data, expected_message, locale);
    [3.1190]
    [2.124]
    let enum_data = MessageEnum::Emails { unread_emails };
    compare_message(enum_data, expected_message.clone(), locale.clone());
    let struct_data = Emails { unread_emails };
    compare_message(struct_data, expected_message, locale);
  • edit in l10n_embed_derive/src/fluent/ast.rs at line 46
    [3.2145][3.7762:7763](),[3.7762][3.7762:7763]()
  • edit in l10n_embed_derive/src/fluent/ast.rs at line 58
    [3.8351]
    [3.3625]
    // Only dereference if enum variant
    let category_reference = match message_context.derive_context.reference_kind {
    ReferenceKind::EnumField => quote!(*#match_target),
    ReferenceKind::StructField => quote!(#match_target),
    };
  • replacement in l10n_embed_derive/src/fluent/ast.rs at line 65
    [3.3664][3.1538:1616]()
    match plural_rules.category_for(*#match_target) {
    [3.3664]
    [3.2782]
    match plural_rules.category_for(#category_reference) {