Token Transformations#
Token transformations are a way to tranform input arguments before they are mapped to commands.
This feature is used internally to expand clubbed options and support Response Files.
See these implementations as examples:
How to implement#
First, create a function with the signature Func<CommandContext, TokenCollection, TokenCollection>
.
This function will transform a TokenTransformation
into a new TokenTransformation
.
Next, register the transformation with
appRunner.Configure(c => c.UseTokenTransformation(
name: "my-transformation",
order: 1,
transformation: MyFunc));
- name is used for logging and the Parse Directive
- order is the order the transformation should run in relation to other transformations.
Tokens#
Tokens are initially parsed from the Program.Main args array. Transformations can modify tokens or expand them into additional tokens.
Tokens contains
- RawValue: Raw value from the user input. This will contain the punctuation used to denote option and argument names or brackets enclosing directives. (eg.
--help
,[debug]
) - Value: Can be an Option name or an argument value or a directive(eg.
help
) - TokenType: Directive, Option, Value, Separator
- OptionTokenType: when TokenType is Option
OptionTokenType contains
- IsLong: is a long name (
--help
) - IsShort: is a short name (
-h
) - IsClubbed: multiple short names in a single string (
-hv
). - HasValue: the option has a value assignment (
--verbosity:trace
)
TokenCollections#
TokenCollections are an immutable collection of tokens with some convenience members to simplify transformations.
- Directives: The tokens interpreted as directives. This will always be empty when
AppSettings.DisableDirectives = false
. - Arguments: All arguments after the last directive and before the argument separator
--
- Separated: All arguments included after the argument separator
--
. If there are multiple separators, the remaining separators will be tokens in this collection.
Tip
Use TokenCollection.Transform method to apply a func to tokens of specific types. This is an alternative to a foreach loop with a switch statement. See the implementations linked above for examples.
Use TokenCollection.ToArgsArray extension method to convert the tokens into a string array that can be passed to another application.