#[flexpect::e(...)] compiles to #[expect(...)] for newer versions of Rust and to #[allow(...)] when not supported.
This crate enables getting the benefits of #[expect(...)] while maintaining a minimum supported Rust version that's earlier than 1.81.
Add flexpect to your Cargo.toml:
[dependencies]
flexpect = "0.1.0"Then use the #[flexpect::e(...)] or #[flexpect::flexpect(...)] attributes instead of #[expect(...)]:
// instead of #[expect(unused_variables)]#[flexpect::e(unused_variables)]fnexample(){let x = 1;}use flexpect::flexpect;// instead of #[expect(clippy::clone_on_copy)]#[flexpect(clippy::clone_on_copy)]fnclippy_example(){let _ = 32.clone();}- On Rust versions before 1.43.0, the attribute is ignored due to compiler bugs.
- From Rust 1.43.0 to 1.80, it translates to
#[allow(...)]. - From Rust 1.81 onwards, it translates to
#[expect(...)].
The minimum supported Rust version is 1.38.
flexpect does not work as inner attributes (#![flexpect::e(...)]) nor on statements, expressions or blocks due to compiler limitations.