aboutsummaryrefslogtreecommitdiff
path: root/mingling_core/src/asset
diff options
context:
space:
mode:
Diffstat (limited to 'mingling_core/src/asset')
-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!()
+}