From f7ce99550595915efb3d3f7774095976cb3b763b Mon Sep 17 00:00:00 2001 From: Weicao-CatilGrass <1992414357@qq.com> Date: Tue, 9 Jun 2026 17:12:50 +0800 Subject: Add COMPLETION_SUBCOMMAND and is_completing method --- mingling_core/src/comp.rs | 11 +++++++++++ mingling_core/src/comp/comp_ctx.rs | 19 +++++++++++++++++++ 2 files changed, 30 insertions(+) create mode 100644 mingling_core/src/comp/comp_ctx.rs (limited to 'mingling_core/src') diff --git a/mingling_core/src/comp.rs b/mingling_core/src/comp.rs index 1769a5c..bf7ab13 100644 --- a/mingling_core/src/comp.rs +++ b/mingling_core/src/comp.rs @@ -1,3 +1,4 @@ +mod comp_ctx; mod flags; mod shell_ctx; mod suggest; @@ -5,6 +6,16 @@ mod suggest; use std::collections::BTreeSet; use std::fmt::Display; +/// Constant defining the name of the completion subcommand. +/// +/// When a user invokes this subcommand (e.g., `your_program __comp`), the +/// program enters completion mode and generates shell completions based on +/// the current shell context. +/// +/// This value is used internally by the completion system to intercept the +/// command-line input and redirect to the completion handler. +pub const COMPLETION_SUBCOMMAND: &str = "__comp"; + #[doc(hidden)] pub use flags::*; #[doc(hidden)] diff --git a/mingling_core/src/comp/comp_ctx.rs b/mingling_core/src/comp/comp_ctx.rs new file mode 100644 index 0000000..02e79c5 --- /dev/null +++ b/mingling_core/src/comp/comp_ctx.rs @@ -0,0 +1,19 @@ +use crate::{COMPLETION_SUBCOMMAND, Program, ProgramCollect}; + +impl Program +where + C: ProgramCollect, +{ + /// Checks whether the program is currently in a completion mode. + /// + /// This is determined by checking if the special completion subcommand + /// (defined by [`COMPLETION_SUBCOMMAND`]) appears among the parsed arguments. + /// When `true`, the program should generate shell completions instead of + /// running its normal execution path. + pub fn is_completing(&self) -> bool { + // Check if the first argument (args[1]) is the completion subcommand + self.args + .get(1) + .is_some_and(|arg| arg == COMPLETION_SUBCOMMAND) + } +} -- cgit