aboutsummaryrefslogtreecommitdiff
path: root/mingling_core/src/comp/shell_ctx.rs
diff options
context:
space:
mode:
author魏曹先生 <1992414357@qq.com>2026-08-17 06:57:09 +0800
committer魏曹先生 <1992414357@qq.com>2026-08-17 06:57:09 +0800
commitc6ab865d5b19e3a57b76562adb9540cbf03d77c4 (patch)
treeb501bbc4cd2df84029e2eb875dd3f054c32b55df /mingling_core/src/comp/shell_ctx.rs
parent14374ac30f61085d80d59ad76c8ab1392acc76e7 (diff)
feat(macros): relax completion attribute signature
Allow completion functions to omit the context parameter, accept owned ShellContext or any From<&ShellContext> type, and return any type implementing Into<Suggest>. Add From<&str> for SuggestItem and derive Clone for ShellContext.
Diffstat (limited to 'mingling_core/src/comp/shell_ctx.rs')
-rw-r--r--mingling_core/src/comp/shell_ctx.rs8
1 files changed, 7 insertions, 1 deletions
diff --git a/mingling_core/src/comp/shell_ctx.rs b/mingling_core/src/comp/shell_ctx.rs
index 552e514..3a1b8f2 100644
--- a/mingling_core/src/comp/shell_ctx.rs
+++ b/mingling_core/src/comp/shell_ctx.rs
@@ -96,7 +96,7 @@ use std::collections::HashSet;
/// If the `-F` flag is present without a value, `shell_flag` becomes
/// `ShellFlag::Other(String::new())`. If `-F` is absent, it defaults to
/// `ShellFlag::Other("unknown".to_string())`.
-#[derive(Default, Debug)]
+#[derive(Default, Debug, Clone)]
#[cfg_attr(feature = "structural_renderer", derive(serde::Serialize))]
pub struct ShellContext {
/// The full command line
@@ -182,6 +182,12 @@ impl TryFrom<Vec<String>> for ShellContext {
}
}
+impl From<&Self> for ShellContext {
+ fn from(ctx: &Self) -> Self {
+ ctx.clone()
+ }
+}
+
impl ShellContext {
/// Checks if a flag appears exactly once in the command line arguments.
///