DEV Community

Benjamin Abendroth
Benjamin Abendroth

Posted on

crazy-complete: Generate shell auto-completion files with a single configuration file

Hello everyone!

I want to introduce my current project crazy-complete.

It is a tool that generates shell auto-completion files using a single configuration file.

Key Features

  • Simple configuration: The tool uses an easy-to-use YAML format
  • Multi shell support: The tool supports Bash, Fish and Zsh
  • Option types: All common option types are supported: long-options (--option), short-options (-o) and old-style-options (-option)
  • Argument types: Options with required arguments, with optional arguments and no arguments are supported
  • Mutually exclusive options: You can define groups of options that can't be used together
  • Repeatable options: You can control if an option may be repeated on commandline, or should appear only once
  • Positional arguments: You can easily define arguments for your program
  • Built-in completion types: The tool comes with these completions: file, directory, choices, value_list, range, signal, process, pid, command, user, group, service, variable, environment
  • Custom completions: If the built-ins aren't sufficient, there is the exec command to complete stuff based of a command's output
  • Conditional options/positionals: You can enable options and positionals based on conditions, like "is there an option present?" or "does an option have a specific value?"
  • Subommands: You can specify arbitrary levels of subcommands
  • Robust scripts: Unlike other generation tools, cracy-complete parses the whole commandline according to the specified options (instead of only looking at the last two args, for example)
  • Efficient scripts: Scripts were made with efficiency in mind. You pay only for what you use.
  • Well tested: There are over fifty tests per shell to ensure correct behaviour

Other Features

  • argparse Support: If your program is written in Python and uses the arparse-module, there is a chance that you can generate scripts (or YAML files) from the argparse.ArgumentParsers's definitions
  • Help text parser: If your program comes with a help text, there is a chance that you can generate YAML definition files by parsing it's output

If you're tired of maintaining completion scripts for different shells, crazy-complete may be for you.

Even if you decide against using generated scripts, the output of the tool may serve as an inspiration.

Let me know what you think. If you need support or have any questions or improvement-ideas, don't hesitate to ask!

And if you like the tool, please give it a star on GitHub

Here you can find an example definition file

Top comments (0)