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

Open
#91 2 comments 1 reaction 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
5/5
Estimated time
Over a week
Newbie friendliness
30/100
Issue type
Feature
Clarity
Needs clarification
Activity status
Stale
Tech stack
dart
Domain
cli

Research direction

Start by reading the existing CompletionCommand behavior and how command and flag completions are currently produced; the issue names no files or tests. Done means a command such as foo install can provide its own version completions, with the behavior defined for its flags and verified against the expected tab-completion output.

Written by the indexing model from the issue text.

Description

feature p3

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.

Dominant language
Dart
Stars
54
Forks
6
Avg merge
6d 17h
Merged PRs (30d)
1

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from VeryGoodOpenSource/cli_completion

All issues in VeryGoodOpenSource/cli_completion

Similar issues

More Dart issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.