From 2ae745913cd116c2ffdec3262bd4a651b0d81268 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Quentin?= Date: Wed, 15 Oct 2025 13:46:47 +0200 Subject: [PATCH] Honor lint attributes for `esp-rtos::main` --- esp-hal-procmacros/src/rtos_main.rs | 41 +++++++++++++++++++++-------- 1 file changed, 30 insertions(+), 11 deletions(-) diff --git a/esp-hal-procmacros/src/rtos_main.rs b/esp-hal-procmacros/src/rtos_main.rs index e3e5f3c0c4a..6690cddc844 100644 --- a/esp-hal-procmacros/src/rtos_main.rs +++ b/esp-hal-procmacros/src/rtos_main.rs @@ -4,6 +4,7 @@ use proc_macro::TokenStream; use proc_macro2::TokenStream as TokenStream2; use quote::{ToTokens, quote}; use syn::{ + Attribute, Meta, ReturnType, Token, @@ -75,24 +76,42 @@ pub fn run( ctxt.error_spanned_by(&f.sig, "main function must have 1 argument: the spawner."); } + let fattrs = f.attrs; + let lint_attrs: Vec = fattrs + .clone() + .into_iter() + .filter(|item| { + item.path().is_ident("deny") + || item.path().is_ident("allow") + || item.path().is_ident("warn") + }) + .collect(); + ctxt.check()?; let f_body = f.block; let out = &f.sig.output; let result = quote! { - #[doc(hidden)] - #[::embassy_executor::task()] - async fn __embassy_main(#fargs) #out { - #f_body + #(#lint_attrs)* + pub(crate) mod __main { + use super::*; + + #[doc(hidden)] + #(#fattrs)* + #[::embassy_executor::task()] + async fn __embassy_main(#fargs) #out { + #f_body + } + + #[doc(hidden)] + unsafe fn __make_static(t: &mut T) -> &'static mut T { + ::core::mem::transmute(t) + } + + #(#fattrs)* + #main } - - #[doc(hidden)] - unsafe fn __make_static(t: &mut T) -> &'static mut T { - ::core::mem::transmute(t) - } - - #main }; Ok(result)