From b18749170b6006e53976dbb6df9f59a3b9c34127 Mon Sep 17 00:00:00 2001 From: 魏曹先生 <1992414357@qq.com> Date: Fri, 10 Apr 2026 16:47:40 +0800 Subject: Add completion macro infrastructure without logic --- mingling_core/src/asset/comp.rs | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) (limited to 'mingling_core/src/asset/comp.rs') diff --git a/mingling_core/src/asset/comp.rs b/mingling_core/src/asset/comp.rs index 4815b5a..eeef0c0 100644 --- a/mingling_core/src/asset/comp.rs +++ b/mingling_core/src/asset/comp.rs @@ -2,6 +2,8 @@ mod flags; mod shell_ctx; mod suggest; +use std::fmt::Display; + #[doc(hidden)] pub use flags::*; #[doc(hidden)] @@ -9,6 +11,8 @@ pub use shell_ctx::*; #[doc(hidden)] pub use suggest::*; +use crate::{ProgramCollect, this}; + /// Trait for implementing completion logic. /// /// This trait defines the interface for generating command-line completions. @@ -16,5 +20,31 @@ pub use suggest::*; /// based on the current shell context. pub trait Completion { type Previous; - fn comp(ctx: ShellContext) -> Suggest; + fn comp(ctx: &ShellContext) -> Suggest; +} + +/// Trait for extracting user input arguments for completion. +/// +/// When the `feat comp` feature is enabled, the `dispatcher!` macro will +/// automatically implement this trait for `Entry` types to extract the +/// arguments from user input for completion suggestions. +pub trait CompletionEntry { + fn get_input(self) -> Vec; +} + +pub struct CompletionHelper; +impl CompletionHelper { + pub fn exec_completion

(ctx: &ShellContext) -> Suggest + where + P: ProgramCollect + Display + 'static, + { + let program = this::

(); + Suggest::FileCompletion + } + + pub fn render_suggest

(ctx: ShellContext, suggest: Suggest) + where + P: ProgramCollect + Display + 'static, + { + } } -- cgit