diff --git a/CHANGELOG.md b/CHANGELOG.md index 45f84cd..442e37f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -38,6 +38,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Corrected `T: Sized` bounds to `T: ?Sized` in the generated `PinnedDrop` check by `#[pin_data]`. +- `init!` no longer produces `nonstandard_style` group warnings at the call site, when + used for structs with non-snake-case field names. Warnings are still reported on the + struct definition, as expected. ## [0.0.10] - 2025-08-19 diff --git a/internal/src/init.rs b/internal/src/init.rs index daa3f1c..99101a4 100644 --- a/internal/src/init.rs +++ b/internal/src/init.rs @@ -245,7 +245,12 @@ fn init_fields( // Setting the span of `value_ident` to `value`'s span improves error messages // when the type of `value` is wrong. value_ident.set_span(value.span()); - quote!(let #value_ident = #value;) + quote! { + // Allow `nonstandard_style` since the same warning is going to be reported for + // the struct field. + #[allow(nonstandard_style)] + let #value_ident = #value; + } }); // Again span for better diagnostics let write = quote_spanned!(ident.span()=> ::core::ptr::write); @@ -273,7 +278,9 @@ fn init_fields( unsafe { #write(&raw mut (*#slot).#ident, #value_ident) }; } #(#cfgs)* - #[allow(unused_variables)] + // Allow `nonstandard_style` since the same warning is going to be reported for + // the struct field. + #[allow(unused_variables, nonstandard_style)] let #ident = #accessor; } } @@ -325,7 +332,9 @@ fn init_fields( #value_init } #(#cfgs)* - #[allow(unused_variables)] + // Allow `nonstandard_style` since the same warning is going to be reported for + // the struct field. + #[allow(unused_variables, nonstandard_style)] let #ident = #accessor; } } diff --git a/tests/nonstandard_style.rs b/tests/nonstandard_style.rs new file mode 100644 index 0000000..07ad4df --- /dev/null +++ b/tests/nonstandard_style.rs @@ -0,0 +1,31 @@ +//! Tests that no extra warnings are emitted for non-standard style fields when using `init!`. +//! +//! See: https://github.com/Rust-for-Linux/pin-init/issues/125 + +// Should be implied by crate lint settings, but just to be sure: +#![deny(nonstandard_style)] +#![allow(dead_code)] +#![cfg_attr(USE_RUSTC_FEATURES, feature(lint_reasons))] +#![cfg_attr(USE_RUSTC_FEATURES, feature(raw_ref_op))] + +use pin_init::*; + +#[allow(nonstandard_style)] +struct Foo { + NON_STANDARD_A: usize, + nonStandardB: Bar, +} + +#[allow(non_snake_case)] +struct Bar { + Non_Standard_C: usize, +} + +impl Foo { + fn new() -> impl Init { + init!(Self { + NON_STANDARD_A: 42, + nonStandardB <- init!(Bar { Non_Standard_C: 42 }), + }) + } +}