Some Situations Where You'd Be Like "Shit!"

This document collects the discomforts currently experienced while using Mingling.

This document collects the discomforts currently experienced while using Mingling. Of course, you can also contribute to this document. --- ## Why is there no fallback completion logic? (completion) (fallback) Currently, Mingling's Completion only supports providing completion logic for specific subcommands, with no way to provide global completion. For example: ``` mycmd completion: --help -h --- Display helps --version -V --- Display versions ``` Currently, there is no workaround. Ideal solution: ```rust #[completion(EntryGlobal)] fn complete(ctx: &ShellContext) -> Suggest { // ... } ``` --- ## Why can't I register descriptions for commands? (completion) (dispatcher) Currently, Mingling's Completion cannot register a description for each subcommand. For example: ``` mycmd completion: add rm list <--- You cannot register descriptions for commands ``` Expected behavior: ``` mycmd completion: add --- Add something rm --- Remove something list --- List something ``` Ideal solution: ```rust // It should be able to freely integrate with crates that provide i18n functionality, // so the following approach cannot be used as a data source for descriptions. dispatcher! { /// Add Something <--- How to i18n? "add", CMDAdd => EntryAdd } // Ideally, it should satisfy the following two conditions: // 1. No need to use `with_dispatcher`, because `with_dispatcher` is disabled in `dispatch_tree` mode // 2. Must be able to accept String or &str at runtime // Current idea #[inline(always)] #[dispatcher_desc(EntryAdd)] fn desc_add() -> String { // If using rust_i18n t!("cmd.add.desc") } // Or #[completion(CMDAdd)] fn desc_add(_ctx: &ShellContext) -> Suggest { // If using rust_i18n suggest{ t!("cmd.add.desc") } } // Collected and generated by `gen_program!()` // Generate something like get_dispatcher_desc(id: &ThisProgram) -> String // Match the corresponding function using enum values inside ThisProgram gen_program!() ```