cli_completion icon indicating copy to clipboard operation
cli_completion copied to clipboard

feat: Make it possible to customize completions for specific command and flags

Open bartekpacia opened this issue 1 year ago • 2 comments

Description

I would like to have control over the completions that displayed for my command.

Let's say I have a command foo install <version>. This command also has 2 flags --dry-run and --help.

Current state

Only the flags are suggested:

$ foo install <TAB>
--help          -- Print this usage information.
--dry-run       -- Perform prechecks but do not install.

Expected state

$ foo install <TAB>
2.1.0
2.0.0
1.2.0
1.1.0
1.0.1
1.0.0

API idea:

/// Installs Flutter SDK
class InstallCommand extends CompletionCommand<int> {
  @override
  final name = 'install';

  @override
  final description = 'Installs foo version';

  /// Returns the string that will be returned when tab completion
  /// is called for this command.
  ///
  /// This method should return fast for good user experience.
  @override
  Future<String> completions() {
    print(MyFooVersionProvider.listAllVersions());
    // The above line would print:
    // 2.1.0
    // 2.0.0
    // 1.2.0
    // 1.1.0
    // 1.0.1
    // 1.0.0
  }

  @override
  Future<int> run() async { /** code **/ }

Additional Context

A similar CLI package in the Go ecosystem has this feature. See docs.

bartekpacia avatar Mar 20 '24 01:03 bartekpacia

Cobra in the Go ecosystem also has this feature (link)

bartekpacia avatar Apr 05 '24 14:04 bartekpacia

I don't think this is currently possible, so overall I like your suggestion. Are you interested in working on this? The API seems reasonable although we can adjust the nuts and bolts once we get into the first PR.

Nudging @wolfenrain and @renancaraujo in case they want to drop their two cents on this feature.

alestiago avatar Aug 13 '24 12:08 alestiago