v1.4.0
Features
Shell command-line completion support (#14, #15, #18)
Cocona provides support for shell command-line completion (also known as tab completion).
Currently, The supported shells are bash
and zsh
.
Cocona generates a shell script for command-line completion from a command definition and allows users to use command-line completion by loading it. The --completion
built-in option is used to specify the name of a shell to generate a script.
$ source <(./myapp --completion bash)
or
% ./myapp --completion zsh > ~/.zsh/functions
This feature is enabled by default, or you can set the EnableShellCompletionSupport
option to false
if you don't need it.
It is also possible to dynamically generate command-line completion candidates and to prepare candidates at script generation time. Please see the sample below for more details.
Option-like commands (#17)
The option-like command is a way to achieve an independent command that at first glance, looks like an option in a command.
For example, easy to understand examples like --version
and --help
.
These are the options of a command, but they behave as a command when specified.
[OptionLikeCommand("hello", new[] {'f'}, typeof(Program), nameof(Hello))]
public void Execute()
=> Console.WriteLine("Execute");
private void Hello([Argument]string name)
=> Console.WriteLine($"Hello {name}!");
$ ./myapp
Execute
$ ./myapp --hello Alice
Hello Alice!
Limitations
- Any previous options or arguments specified by OptionLikeCommand will be ignored.
- Example: If
--foo --bar --optionlikecommand --baz arg0
and--optionlikecommand
is an Option-like command, the command will be passed--baz arg0
.
- Example: If
- Arguments are not displayed in help.
CommandMethodForwardedTo attribute (#19)
The CommandMethodForwardedTo
attribute allows you to specify that the substance of the specified command method is a different method and that the operation should be forwarded.
If this attribute is given to a command method, the destination's attribute and its implementation are used. Excepts for the Command
and Hidden
attributes specified by the method.
For example, it can be used if the command implementation is defined in an external assembly or to call a built-in command (such as help) or compatibility purposes.
[CommandMethodForwardedTo(typeof(BuiltInOptionLikeCommands), nameof(BuiltInOptionLikeCommands.ShowHelp))]
public void MyHelp()
=> throw new NotSupportedException(); // NOTE: The method body and parameters used is BuiltInOptionLikeCommands.ShowHelp.
IgnoreUnknownOptions attribute
Cocona treats unknown options as errors by default.
Now, you can set the IgnoreUnknownOptions attribute to ignore unknown options.
Improvements
- #16: Share ServiceCollectionExtensions code between Cocona and Cocona.Lite.
Fixes
- #20: Capture stack trace of exception thrown during command execution.