From 63abec05259b081eafc6cdd066dca1a808c3762e Mon Sep 17 00:00:00 2001 From: mu001999 Date: Thu, 22 Jan 2026 21:54:43 +0800 Subject: [PATCH] macros: use `call_site` hygiene to avoid unused qualification (#7866) --- tests-build/tests/macros.rs | 3 +++ tests-build/tests/pass/use_builder_outer.rs | 9 +++++++++ tokio-macros/src/entry.rs | 15 ++++++++++++--- 3 files changed, 24 insertions(+), 3 deletions(-) create mode 100644 tests-build/tests/pass/use_builder_outer.rs diff --git a/tests-build/tests/macros.rs b/tests-build/tests/macros.rs index ff77191d0..efef20855 100644 --- a/tests-build/tests/macros.rs +++ b/tests-build/tests/macros.rs @@ -15,6 +15,9 @@ fn compile_fail_full() { #[cfg(feature = "full")] t.pass("tests/pass/impl_trait.rs"); + #[cfg(feature = "full")] + t.pass("tests/pass/use_builder_outer.rs"); + #[cfg(feature = "full")] t.compile_fail("tests/fail/macros_invalid_input.rs"); diff --git a/tests-build/tests/pass/use_builder_outer.rs b/tests-build/tests/pass/use_builder_outer.rs new file mode 100644 index 000000000..d47fd9798 --- /dev/null +++ b/tests-build/tests/pass/use_builder_outer.rs @@ -0,0 +1,9 @@ +#![deny(unused_qualifications)] + +use tests_build::tokio; +pub use tokio::runtime; + +#[tokio::main] +async fn main() { + if true {} +} diff --git a/tokio-macros/src/entry.rs b/tokio-macros/src/entry.rs index 09c6c48a4..bed96c360 100644 --- a/tokio-macros/src/entry.rs +++ b/tokio-macros/src/entry.rs @@ -408,16 +408,23 @@ fn parse_knobs(mut input: ItemFn, is_test: bool, config: FinalConfig) -> TokenSt let crate_path = config .crate_name .map(ToTokens::into_token_stream) - .unwrap_or_else(|| Ident::new("tokio", last_stmt_start_span).into_token_stream()); + .unwrap_or_else(|| { + Ident::new("tokio", Span::call_site().located_at(last_stmt_start_span)) + .into_token_stream() + }); + + let use_builder = quote_spanned! {Span::call_site().located_at(last_stmt_start_span)=> + use #crate_path::runtime::Builder; + }; let mut rt = match config.flavor { RuntimeFlavor::CurrentThread | RuntimeFlavor::Local => { quote_spanned! {last_stmt_start_span=> - #crate_path::runtime::Builder::new_current_thread() + Builder::new_current_thread() } } RuntimeFlavor::Threaded => quote_spanned! {last_stmt_start_span=> - #crate_path::runtime::Builder::new_multi_thread() + Builder::new_multi_thread() }, }; @@ -470,6 +477,8 @@ fn parse_knobs(mut input: ItemFn, is_test: bool, config: FinalConfig) -> TokenSt #[cfg(all(#(#checks),*))] #[allow(clippy::expect_used, clippy::diverging_sub_expression, clippy::needless_return, clippy::unwrap_in_result)] { + #use_builder + return #rt .enable_all() .#build