6 releases
new 0.1.1 | Mar 16, 2025 |
---|---|
0.1.0 | Mar 16, 2025 |
0.0.4 | Sep 28, 2024 |
#257 in Procedural macros
3,336 downloads per month
9KB
51 lines
flexpect
#[flexpect::e(...)]
compiles to #[expect(...)]
for newer versions of Rust and to #[allow(...)]
when not supported.
Purpose
This crate enables getting the benefits of #[expect(...)]
while maintaining a minimum supported Rust version that's earlier than 1.81.
Usage
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)]
fn example() {
let x = 1;
}
use flexpect::flexpect;
// instead of #[expect(clippy::clone_on_copy)]
#[flexpect(clippy::clone_on_copy)]
fn clippy_example() {
let _ = 32.clone();
}
How it works
- 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.
Limitations
flexpect does not work as inner attributes (#![flexpect::e(...)]
) nor on statements, expressions or blocks due to compiler limitations.