easy-cli

Crates.ioeasy-cli
lib.rseasy-cli
version1.0.1
sourcesrc
created_at2022-11-20 21:24:00.673215
updated_at2022-11-27 21:01:14.98585
descriptionBuilds CLI tools from a set of scripts.
homepagehttps://github.com/herblet/easy-cli
repositoryhttps://github.com/herblet/easy-cli
max_upload_size
id719411
size27,328
Toby Grasl (herblet)

documentation

README

Crates.io

easy-cli

A tool for building personal and team CLI tools.

easy-cli takes a CLI-Tool name option and a path to a directory of scripts as arguments. It assumes each script ist to be a CLI command, and builds an appropriate CLI parser.

It could be used as an alias, but (in my experience, in zsh) this does not work with completion. You can define a function for your cli, for instance:

mycli() {
    <Path>/easy-cli --name mycli <Path-to-easy-cli-root>/example -- $@
}

and then calling

mycli

produces output:

error: 'mycli' requires a subcommand but one was not provided
  [subcommands: hello, list, help]

Usage: mycli <COMMAND>

For more information try '--help'

Then calling

mycli hello

will print

Hello, world!

Arguments trailing the command will be passed to the relevant script.

Argument-Parsing

easy-cli looks for metadata in the scripts regarding the command and arguments. Currently, the following patterns are recognised:

  • #@description <description>: Used in the command line help text to describe the command.
  • #@argument <argname> <has_args> <description>: Defines an argument usable as "--argname". It may or may not have values (has_args), and can have a help text (description)
  • #@anyarg: If present, allows the command to accept any argument. Otherwise, only the defined ones will be accepted.

Completion

easy-cli offers completion for your cli in a number of shells - those supported by clap_complete. To generate completions for your cli, run:

easy-cli --name <cli-name> <Path-to-cli-dir> --completions <shell> > <completions_file>

and proceed as required by your shell.

Next Planned Features

  1. CLI subcommands (for instance, cli <commandA> <subcommandA1>), to group related commands.
  2. Parsing script options from the script and adding them to the CLI, for better help.
  3. Environments, so that the CLI can easily be used to apply different environments (e.g. for staging).
Commit count: 10

cargo fmt