From 4e163438f9d9af83c1492826acf742337ec147c9 Mon Sep 17 00:00:00 2001 From: 魏曹先生 <1992414357@qq.com> Date: Wed, 12 Aug 2026 02:34:39 +0800 Subject: fix: suppress future_not_send lint and tighten Send bounds Add `#[allow(clippy::future_not_send)]` to chain invocation methods and clarify Send requirements for `exec` bounds. --- mingling_core/src/program/collection.rs | 2 +- mingling_core/src/program/exec.rs | 4 ++-- mingling_core/src/program/hook.rs | 10 ++++++++++ mingling_core/src/program/once_exec.rs | 6 +++--- mingling_core/src/program/repl_exec.rs | 10 ++++++++-- 5 files changed, 24 insertions(+), 8 deletions(-) (limited to 'mingling_core/src/program') diff --git a/mingling_core/src/program/collection.rs b/mingling_core/src/program/collection.rs index 66ec9f1..6ec4a27 100644 --- a/mingling_core/src/program/collection.rs +++ b/mingling_core/src/program/collection.rs @@ -82,7 +82,7 @@ pub trait ProgramCollect { None } - /// Find a matching chain to continue execution based on the input [AnyOutput](./struct.AnyOutput.html), returning a new [AnyOutput](./struct.AnyOutput.html) + /// Find a matching chain to continue execution based on the input [`AnyOutput`](./struct.AnyOutput.html), returning a new [`AnyOutput`](./struct.AnyOutput.html) #[cfg(feature = "async")] fn do_chain( any: AnyOutput, diff --git a/mingling_core/src/program/exec.rs b/mingling_core/src/program/exec.rs index df42249..5948cfe 100644 --- a/mingling_core/src/program/exec.rs +++ b/mingling_core/src/program/exec.rs @@ -12,7 +12,7 @@ pub mod error; #[might_be_async::func] pub fn exec(program: &'static Program) -> Result where - C: ProgramCollect, + C: ProgramCollect + Send + Sync, { might_be_async::invoke!(exec_with_args(program, &program.args)) } @@ -23,7 +23,7 @@ pub fn exec_with_args( args: &[String], ) -> Result where - C: ProgramCollect, + C: ProgramCollect + Send + Sync, { // Exit code let mut exit_code: i32 = 0; diff --git a/mingling_core/src/program/hook.rs b/mingling_core/src/program/hook.rs index 0bcc051..6f468b3 100644 --- a/mingling_core/src/program/hook.rs +++ b/mingling_core/src/program/hook.rs @@ -737,6 +737,16 @@ mod tests { unreachable!() } + #[cfg(feature = "async")] + fn do_chain( + _any: crate::AnyOutput, + ) -> std::pin::Pin< + Box> + Send + 'static>, + > { + Box::pin(async { unreachable!() }) + } + + #[cfg(not(feature = "async"))] fn do_chain(_any: crate::AnyOutput) -> crate::ChainProcess { unreachable!() } diff --git a/mingling_core/src/program/once_exec.rs b/mingling_core/src/program/once_exec.rs index 18e06ef..fc48e6d 100644 --- a/mingling_core/src/program/once_exec.rs +++ b/mingling_core/src/program/once_exec.rs @@ -59,7 +59,7 @@ where #[cfg(feature = "async")] { return self - .exec_wrapper(|p| async { crate::exec::exec(p).await.map_err(|e| e.into()) }) + .exec_wrapper(|p| async { crate::exec::exec(p).await.map_err(Into::into) }) .await; } } @@ -129,14 +129,14 @@ where pub(crate) async fn exec_wrapper(self, f: F) -> Fut::Output where C: 'static + Send + Sync, - F: FnOnce(&'static Program) -> Fut + Send + Sync, + F: FnOnce(&'static Self) -> Fut + Send + Sync, Fut: Future + Send, { THIS_PROGRAM.set(Box::new(self)); let program = THIS_PROGRAM .get_raw() .unwrap() - .downcast_ref::>() + .downcast_ref::() .unwrap(); f(program).await diff --git a/mingling_core/src/program/repl_exec.rs b/mingling_core/src/program/repl_exec.rs index ea36c75..fe29d16 100644 --- a/mingling_core/src/program/repl_exec.rs +++ b/mingling_core/src/program/repl_exec.rs @@ -35,6 +35,7 @@ where self.exec_wrapper(async |p| -> () { repl_loop(p).await; }) + .await else self.exec_wrapper(|p| -> () { repl_loop(p); } ) @@ -65,8 +66,13 @@ where result: &r, }); } + #[allow(unused_variables)] Err(ProgramInternalExecuteError::REPLPanic(panic)) => { - p.run_hook_repl_on_panic(&crate::hook::HookREPLOnPanicInfo { panic: &panic }); + might_be_async::select![ + {} else { + p.run_hook_repl_on_panic(&crate::hook::HookREPLOnPanicInfo { panic: &panic }); + } + ]; } _ => {} } @@ -128,5 +134,5 @@ async fn exec_once( where C: ProgramCollect + Send + Sync + 'static, { - super::exec::exec_with_args(p, &args).await + super::exec::exec_with_args(p, args).await } -- cgit