aboutsummaryrefslogtreecommitdiff
path: root/mingling_core/src/asset/comp.rs
diff options
context:
space:
mode:
author魏曹先生 <1992414357@qq.com>2026-04-11 16:50:57 +0800
committer魏曹先生 <1992414357@qq.com>2026-04-11 16:50:57 +0800
commit58ef8a8f42a68c7a81118ef9120705730ce3f458 (patch)
tree80f302b07f011d2e636f5f8d3ec815fe6a4dafab /mingling_core/src/asset/comp.rs
parent839326946560166da84c04d4770385795d96cff0 (diff)
Add shell completion script generation feature
Diffstat (limited to 'mingling_core/src/asset/comp.rs')
-rw-r--r--mingling_core/src/asset/comp.rs27
1 files changed, 23 insertions, 4 deletions
diff --git a/mingling_core/src/asset/comp.rs b/mingling_core/src/asset/comp.rs
index eeef0c0..3c22e12 100644
--- a/mingling_core/src/asset/comp.rs
+++ b/mingling_core/src/asset/comp.rs
@@ -11,7 +11,7 @@ pub use shell_ctx::*;
#[doc(hidden)]
pub use suggest::*;
-use crate::{ProgramCollect, this};
+use crate::{ProgramCollect, exec::match_user_input, this};
/// Trait for implementing completion logic.
///
@@ -36,15 +36,34 @@ pub struct CompletionHelper;
impl CompletionHelper {
pub fn exec_completion<P>(ctx: &ShellContext) -> Suggest
where
- P: ProgramCollect + Display + 'static,
+ P: ProgramCollect<Enum = P> + Display + 'static,
{
let program = this::<P>();
- Suggest::FileCompletion
+ let suggest = if let Some((dispatcher, args)) = match_user_input(program).ok() {
+ let begin = dispatcher.begin(args);
+ if let crate::ChainProcess::Ok((any, _)) = begin {
+ Some(P::do_comp(&any, ctx))
+ } else {
+ None
+ }
+ } else {
+ None
+ };
+
+ match suggest {
+ Some(suggest) => suggest,
+ None => default_completion(ctx),
+ }
}
pub fn render_suggest<P>(ctx: ShellContext, suggest: Suggest)
where
- P: ProgramCollect + Display + 'static,
+ P: ProgramCollect<Enum = P> + Display + 'static,
{
+ todo!()
}
}
+
+fn default_completion(ctx: &ShellContext) -> Suggest {
+ todo!()
+}