v0.3.0 - 2025-09-04
Added
- Introduced new code-repetition capability, that allows to produce multiple variations of user-supplied Rust code
usingfor ... in ...syntax. - Introduced a type system, overloaded functions, new type casting functions - this would allow users to use much wider
range of values, up to entirely arbitrary sequences of tokens. Previously values were limited only to idents. - Introduced an alternative attribute-style invocation form
#[compose_items(...)]. - Introduced new
compose!macro as the preferred entry point (functionally identical to the previous
compose_idents!). - MSRV has been set to
1.80.0. - Added syntax reference to the documentation.
- Added migration guides for deprecated features.
- Made it possible to escape percent signs when formatting strings by using
%%syntax. - Added
normalize2(...), an evaluated variant ofnormalize(...)that acceptsident,str,int,path,type,
expr, ortokensand returns a normalizedident(unlikenormalize(...), which consumes raw tokens).
Changed
- Error messages made to be more precise and informative.
- Made string formatting syntax more human-readable by enabling
% alias %-style placeholders (with whitespace). - Reworked introductory examples in the documentation.
- Significantly expanded project's test suite.
- Harden the testing of support for both MSRV and stable Rust versions and of usage of the library as a dependency.
Deprecated
compose_idents!macro has been deprecated in favor of functionally identicalcompose!.
Removed
-
⚠️ BREAKING: Dropped the deprecated bracket-based alias-definition syntax support. -
⚠️ BREAKING: Removed interchangeable use of literal strings and ident arguments in functions that accept both.Type system and overloaded functions should take care of most use-cases and if necessary - use casting functions:
to_ident(),to_str(), etc.