Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/fclp/fluent-command-line-parser
A simple, strongly typed .NET C# command line parser library using a fluent easy to use interface
https://github.com/fclp/fluent-command-line-parser
Last synced: 3 months ago
JSON representation
A simple, strongly typed .NET C# command line parser library using a fluent easy to use interface
- Host: GitHub
- URL: https://github.com/fclp/fluent-command-line-parser
- Owner: fclp
- License: other
- Created: 2013-02-21T21:20:44.000Z (almost 12 years ago)
- Default Branch: develop
- Last Pushed: 2019-09-24T12:05:03.000Z (over 5 years ago)
- Last Synced: 2024-07-31T20:29:01.291Z (6 months ago)
- Language: C#
- Size: 1.07 MB
- Stars: 530
- Watchers: 32
- Forks: 85
- Open Issues: 54
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
- awesome-csharp - Fluent Command Line Parser - A simple, strongly typed .NET C# command-line parser library using a fluent easy to use interface (CLI)
- awesome-dotnet-cn - Fluent Command Line Parser - 简单、强类型的 .NET C# 命令行解析库,交互方式流畅易用。 (CLI)
- awesome-dotnet - Fluent Command Line Parser - A simple, strongly typed .NET C# command-line parser library using a fluent easy to use interface (CLI)
- awesome-dotnet - Fluent Command Line Parser - A simple, strongly typed .NET C# command line parser library using a fluent easy to use interface (CLI)
- awesome-dot-dev - Fluent Command Line Parser - A simple, strongly typed .NET C# command-line parser library using a fluent easy to use interface (CLI)
- awsome-dotnet - Fluent Command Line Parser - A simple, strongly typed .NET C# command-line parser library using a fluent easy to use interface (CLI)
- awesome-dotnet - Fluent Command Line Parser - A simple, strongly typed .NET C# command-line parser library using a fluent easy to use interface (CLI)
README
Fluent Command Line Parser
==========================
A simple, strongly typed .NET C# command line parser library using a fluent easy to use interface.[![TeamCity Badge](https://img.shields.io/teamcity/http/teamcity.jetbrains.com/s/bt952.svg)](https://teamcity.jetbrains.com/viewType.html?buildTypeId=bt952)
[![Nuget Badge](https://img.shields.io/nuget/dt/FluentCommandLineParser.svg)](https://nuget.org/packages/FluentCommandLineParser)
### DownloadSee what's new in [v1.4.3](https://github.com/fclp/fluent-command-line-parser/wiki/Roadmap).
You can download the latest release from [CodeBetter's TeamCity server](http://teamcity.codebetter.com/project.html?projectId=project314)
You can also install using [NuGet](http://nuget.org/packages/FluentCommandLineParser/) via the command line
```
cmd> nuget install FluentCommandLineParser
```
Or use the Package Manager console in Visual Studio:
```
PM> Install-Package FluentCommandLineParser
```
### .:NEW:. Git like commands!
Currently in pre-release, see [this Stack Overflow](https://stackoverflow.com/questions/45289653/fluent-command-line-parser-call-function/47486943) post for example usage, and either use [this pre-release Nuget package](https://www.nuget.org/packages/FluentCommandLineParser/1.5.0.7-commands) or get the assemblies (including signed named assemblies) from the [latest build on teamcity.jetbrains.com](https://teamcity.jetbrains.com/viewLog.html?buildTypeId=FluentCommandLineParser_15preRelease&buildId=lastSuccessful&tab=artifacts)### Usage
```csharp
using Fclp;public class ApplicationArguments
{
public int RecordId { get; set; }
public bool Silent { get; set; }
public string NewValue { get; set; }
}static void Main(string[] args)
{
// create a generic parser for the ApplicationArguments type
var p = new FluentCommandLineParser();// specify which property the value will be assigned too.
p.Setup(arg => arg.RecordId)
.As('r', "record") // define the short and long option name
.Required(); // using the standard fluent Api to declare this Option as required.p.Setup(arg => arg.NewValue)
.As('v', "value")
.Required();p.Setup(arg => arg.Silent)
.As('s', "silent")
.SetDefault(false); // use the standard fluent Api to define a default value if non is specified in the argumentsvar result = p.Parse(args);
if(result.HasErrors == false)
{
// use the instantiated ApplicationArguments object from the Object property on the parser.
application.Run(p.Object);
}
}
```You can also use the non-generic Fluent Command Line Parser to capture values without creating a container class.
```csharp
static void Main(string[] args)
{
var p = new FluentCommandLineParser();p.Setup('r')
.Callback(record => RecordID = record)
.Required();p.Setup('v')
.Callback(value => NewValue = value)
.Required();p.Setup('s', "silent")
.Callback(silent => InSilentMode = silent)
.SetDefault(false);p.Parse(args);
}
```
### Parser Option Methods`.Setup('r')` Setup an option using a short name,
`.Setup('r', "record")` or short and long name.
`.Required()` Indicate the option is required and an error should be raised if it is not provided.
`.Callback(val => Value = val)` Provide a delegate to call after the option has been parsed
`.SetDefault(int.MaxValue)` Define a default value if the option was not specified in the args
`.WithDescription("Execute operation in silent mode without feedback")` Specify a help description for the option
### Parsing To Collections
Many arguments can be collected as part of a list. Types supported are `string`, `int32`, `int64`, `double`, `bool`, `Uri`, `DateTime` and `Enum`
For example arguments such as
`--filenames C:\file1.txt C:\file2.txt "C:\other file.txt"`
can be automatically parsed to a `List` using
```csharp
static void Main(string[] args)
{
var p = new FluentCommandLineParser();var filenames = new List();
p.Setup>('f', "filenames")
.Callback(items => filenames = items);p.Parse(args);
Console.WriteLine("Input file names:");
foreach (var filename in filenames)
{
Console.WriteLine(filename);
}
}
```
output:
```
Input file names
C:\file1.txt
C:\file2.txt
C:\other file.txt
```
### Enum support
Since v1.2.3 enum types are now supported.
```csharp
[Flags]
enum Direction
{
North = 1,
East = 2,
South = 4,
West = 8,
}
```
```csharp
p.Setup("direction")
.Callback(d => direction = d);
```
To specify 'East' direction either the text can be provided or the enum integer.
```
dosomething.exe --direction East
dosomething.exe --direction 2
```You can also collect multiple Enum values into a `List`
```csharp
List direction;p.Setup>('d', "direction")
.Callback(d => direction = d);
```For example, specifiying 'South' and 'East' values
```
dosomething.exe --direction South East
dosomething.exe --direction 4 2
```Since v1.4 Enum Flags are also supported
```csharp
Direction direction;p.Setup("direction")
.Callback(d => direction = d);p.Parse(args);
Assert.IsFalse(direction.HasFlag(Direction.North));
Assert.IsTrue(direction.HasFlag(Direction.East));
Assert.IsTrue(direction.HasFlag(Direction.South));
Assert.IsFalse(direction.HasFlag(Direction.West));
```And the generic `FluentCommandLineParser` (previously known as FluentCommandLineBuilder) also supports enums.
```csharp
public class Args
{
public Direction Direction { get;set; }
public List Directions { get;set; }
}
```
```csharp
var p = new FluentCommandLineParser();p.Setup(args => args.Direction)
.As('d', "direction");p.Setup(args => args.Directions)
.As("directions");
```
From v1.5 nullable enums are now supported.
### Help Screen
You can setup any help arguments, such as -? or --help to print all parameters which have been setup, along with their descriptions to the console by using SetupHelp(params string[]).For example:
```csharp
// sets up the parser to execute the callback when -? or --help is detected
parser.SetupHelp("?", "help")
.Callback(text => Console.WriteLine(text));
```
Since v1.4.1 you can also choose to display the formatted help screen text manually, so that you can display it under other circumstances.For example:
```csharp
var parser = new FluentCommandLineParser();
parser.SetupHelp("?", "help")
.Callback(text => Console.WriteLine(text));
// triggers the SetupHelp Callback which writes the text to the console
parser.HelpOption.ShowHelp(parser.Options);
```### Supported Syntax
`[-|--|/][switch_name][=|:| ][value]`Supports boolean names
```
example.exe -s // enable
example.exe -s- // disabled
example.exe -s+ // enable
```
Supports combined (grouped) options
```
example.exe -xyz // enable option x, y and z
example.exe -xyz- // disable option x, y and z
example.exe -xyz+ // enable option x, y and z
```
### Development
Please feel free to provide any feedback on feature support or the Api itself.If you would like to contribute, you may do so to the [develop branch](https://github.com/fclp/fluent-command-line-parser/tree/develop). Please contact me first if doing large scale changes.