autocomplete 0.1.5 copy "autocomplete: ^0.1.5" to clipboard
autocomplete: ^0.1.5 copied to clipboard

Fig-style CLI completion specs and runtime (parse command, load spec, get suggestions). Pure Dart

example/example.dart

// Example: get suggestions for a command line. Run from dart/:
//
//   dart run example/example.dart ls
//   dart run example/example.dart "git sta"
//   dart run example/example.dart "cd " --shell zsh
//
// First argument = command line string to complete.
// --shell (or -s) = shell name (bash|zsh|fish|pwsh|powershell|cmd|xonsh|nushell). Default: bash.
// cwd = current working directory.

import 'dart:io';

import 'package:autocomplete/autocomplete.dart';

import 'local_adapter.dart';

Shell _parseShell(String name) {
  switch (name.toLowerCase()) {
    case 'bash':
      return Shell.bash;
    case 'zsh':
      return Shell.zsh;
    case 'fish':
      return Shell.fish;
    case 'pwsh':
      return Shell.pwsh;
    case 'powershell':
      return Shell.powershell;
    case 'cmd':
      return Shell.cmd;
    case 'xonsh':
      return Shell.xonsh;
    case 'nushell':
      return Shell.nushell;
    default:
      return Shell.bash;
  }
}

void main(List<String> args) async {
  String? cmd;
  var shell = Shell.bash;

  for (var i = 0; i < args.length; i++) {
    if (args[i] == '--shell' || args[i] == '-s') {
      if (i + 1 < args.length) {
        shell = _parseShell(args[++i]);
      }
    } else if (!args[i].startsWith('-')) {
      cmd = args[i];
      break;
    }
  }

  if (cmd == null || cmd.isEmpty) {
    print('Usage: dart run example/example.dart <command_line> [--shell bash]');
    print('Example: dart run example/example.dart ls');
    print('         dart run example/example.dart "git sta" -s zsh');
    exit(1);
  }

  registerBuiltinSpecs();
  final cwd = Directory.current.path;

  final blob = await getSuggestions(cmd, cwd, shell, LocalCompleteAdapter());
  if (blob == null) {
    print('(no spec or no suggestions)');
    exit(0);
  }

  if (blob.argumentDescription != null) {
    print('Argument: ${blob.argumentDescription}');
  }
  for (final s in blob.suggestions) {
    print('${s.name}\t${s.description ?? ""}');
  }
  print(
      '(${blob.suggestions.length} suggestions, charactersToDrop: ${blob.charactersToDrop})');
}
0
likes
130
points
175
downloads

Publisher

unverified uploader

Weekly Downloads

Fig-style CLI completion specs and runtime (parse command, load spec, get suggestions). Pure Dart

Repository (GitHub)
View/report issues
Contributing

Topics

#autocomplete #shell #fig

Documentation

API reference

License

MIT (license)

Dependencies

yaml

More

Packages that depend on autocomplete