Name Casing#
Use Humanizer with CommandDotNet to convert the case of command and arguments to PascalCase, camelCase, lowercase or kebab-case.
TLDR, How to enable#
dotnet add package CommandDotNet.NameCasing
Install-Package CommandDotNet.NameCasing
Enable the feature with appRunner.NameCasing(...)
Case options#
public class App
{
public void MigrateUser([Option]bool dryRun){...}
}
With Case.DontChange
, the command is executed as MigrateUser --dryRun
With Case.PascalCase
, the command is executed as MigrateUser --DryRun
With Case.CamelCase
, the command is executed as migrateUser --dryRun
With Case.KebabCase
, the command is executed as migrate-user --dry-run
With Case.LowerCase
, the command is executed as migrateuser --dryrun
Overridden names#
By default, the case is only applied where the name has not been overridden in an attribute.
public class App
{
[Command(Name="migrateUser")]
public void MigrateUser([Option(LongName="DryRun")]bool dryRun){...}
}
the command is executed as MigrateUser --DryRun
.
Use the applyToNameOverrides
option to apply case conversion to migrateUser and DryRun.
Caveats
Humanizer behavior
- Lowercase cannot be converted to another case... except, the first letter will be capitalized for Pascal. Humanizer doesn't know where the second word starts.
- Kebabcase cannot be converted to camelcase or lowercase. No idea why.
- Camel and Pascal can be converted to any other case
Custom Name Transforamtions#
use appRunner.Configure(c => c.NameTransformation = ...)
to apply custom name transformations.
Example: Humanizer middleare
This example will lowercase all names
appRunner.Configure.NameTransformation =
(attributes, memberName, nameOverride, commandNodeType)
=> (nameOverride ?? memberName).ToLower()`