Re: [PATCH 1/4] rust: macros: fix usage of `#[allow]` in `quote!`

From: Martin Rodriguez Reboredo
Date: Mon Apr 24 2023 - 10:25:46 EST


On 4/24/23 05:11, Benno Lossin wrote:
> When using `quote!` as part of an expression that was not the last one
> in a function, the `#[allow(clippy::vec_init_then_push)]` attribute
> would be present on an expression, which is not allowed.
> This patch refactors that part of the macro to use a statement instead.
>
> Signed-off-by: Benno Lossin <benno.lossin@xxxxxxxxx>
> ---
> rust/macros/quote.rs | 14 ++++++++------
> 1 file changed, 8 insertions(+), 6 deletions(-)
>
> diff --git a/rust/macros/quote.rs b/rust/macros/quote.rs
> index c8e08b3c1e4c..dddbb4e6f4cb 100644
> --- a/rust/macros/quote.rs
> +++ b/rust/macros/quote.rs
> @@ -39,12 +39,14 @@ impl ToTokens for TokenStream {
> /// [`quote_spanned!`](https://docs.rs/quote/latest/quote/macro.quote_spanned.html) macro from the
> /// `quote` crate but provides only just enough functionality needed by the current `macros` crate.
> macro_rules! quote_spanned {
> - ($span:expr => $($tt:tt)*) => {
> - #[allow(clippy::vec_init_then_push)]
> - {
> - let mut tokens = ::std::vec::Vec::new();
> - let span = $span;
> - quote_spanned!(@proc tokens span $($tt)*);
> + ($span:expr => $($tt:tt)*) => {{
> + let mut tokens;
> + #[allow(clippy::vec_init_then_push)]
> + {
> + tokens = ::std::vec::Vec::new();
> + let span = $span;
> + quote_spanned!(@proc tokens span $($tt)*);
> + }
> ::proc_macro::TokenStream::from_iter(tokens)
> }};
> (@proc $v:ident $span:ident) => {};
>
> base-commit: ea76e08f4d901a450619831a255e9e0a4c0ed162
> --
> 2.40.0
>
>

Reviewed-by: Martin Rodriguez Reboredo <yakoyoku@xxxxxxxxx>