Releases: dotnet/command-line-api
System.CommandLine v2.0.0-beta5.25306.1
Announcing System.CommandLine 2.0.0-beta5 and our path to a stable release (#2576)
What's Changed
- remove outdated docs by @jonsequitur in #1766
- Fix #1759 by @jonsequitur in #1767
- Add support for timeout in process termination handling by @JanKrivanek in #1756
- fix #1768 by @jonsequitur in #1773
- fix #1779 by @jonsequitur in #1780
- System.CommandLine is split into too many namespaces by @BenjaminMichaelis in #1788
- Clean up files a bit by @BenjaminMichaelis in #1790
- fix generate name value for MethodInfo without Parameters by @hessenar in #1789
- update build machine image names by @brettfo in #1804
- Adding in cancellation support for InvokeAsync by @Keboo in #1502
- [1653] remove the legacy double dash behavior and ParseResult.UnparsedTokens by @Tunduk in #1806
- Update projects to net7.0 TargetFramework with shared property by @lbussell in #1803
- Update public pool names by @alexperovich in #1831
- update build urls by @brettfo in #1833
- Updated indention from an earlier PR cleanup. by @shaggygi in #1793
- Adding proposed fix for FromAmong by @Keboo in #1843
- Fixed null reference exception in
Token
operator overload by @vlada-shubina in #1842 - Localizing required option not provided message by @Keboo in #1856
- restore Arcade off switch by @jonsequitur in #1865
- When an explicit max width is specified don't override with the terminal's width by @Keboo in #1864
- Fix IsOptional method for arguments by @iBicha in #1862
- Seal Token class. by @andrewimcclement in #1876
- [main] Update dependencies from dotnet/arcade by @dotnet-maestro in #1854
- Rename members to GetValue by @Keboo in #1787
- [main] Update dependencies from dotnet/arcade by @dotnet-maestro in #1887
- Remove CompletionDelegate, CompletionSourceList and DirectiveCollection by @adamsitnik in #1946
- [main] Update dependencies from dotnet/arcade by @dotnet-maestro in #1949
- Rename getDefaultValue to defaultValueFactory in Argument and Option by @jozkee in #1950
- replace ICompletionSource with a Func by @adamsitnik in #1952
- update required msbuild version by @brettfo in #1957
- since Option defines Arity, Option does not need to by @adamsitnik in #1958
- Moves and renames by @jozkee in #1951
- replace IInvocationResult with Action by @adamsitnik in #1948
- fluent APIs should return least restrictive result by @adamsitnik in #1964
- make AddValidator fluent by @adamsitnik in #1966
- enable CodeQL by @jonsequitur in #1866
- all default value factories should be generic by @adamsitnik in #1968
- Bump Newtonsoft.Json from 13.0.1 to 13.0.2 in /src/System.CommandLine.DragonFruit.Tests by @dependabot in #1985
- [main] Update dependencies from dotnet/arcade by @dotnet-maestro in #1981
- make CompletionItem implement IEquatable by @adamsitnik in #1991
- First name and aliases cleanup by @adamsitnik in #1990
- introduce CompletionContext.Empty, remove Symbol.GetCompletions(void) by @adamsitnik in #1954
- Expose List properties, remove Add* methods by @adamsitnik in #1987
- Remove Argument.AllowedValues, use Validator to implement the logic by @adamsitnik in #1959
- Expose Command collection properties as mutable IList, remove AddCommand, AddOption and AddArugment methods by @adamsitnik in #1989
- Fluent APIs are not allowed in non-builder types by @adamsitnik in #1994
- Lambdas cleanup by @adamsitnik in #1995
- remove default Parser ctor by @adamsitnik in #1998
- Reducing allocations in parsing by @adamsitnik in #2001
- MS Docs -> MS Learn by @danielchalmers in #1880
- Added one test for DragonFruit when parsing
tag by @sebekkz in #2008 - add source-build pre-built detection by @oleksandr-didyk in #2012
- More parsing improvements by @adamsitnik in #2016
- SymbolResults improvements by @adamsitnik in #2024
- update msbuild version by @jonsequitur in #2028
- Build System.CommandLine.NamingConventionBinder during source-build by @MichaelSimons in #2026
- UnrecognizedArgument error should mention first invalid argument, not the last one by @adamsitnik in #2029
- More SymbolResult improvements by @adamsitnik in #2027
- Parent search bug fix by @adamsitnik in #2030
- more flexible error reporting for SymbolResult by @adamsitnik in #2033
- Translate to Spanish by @nportillo-msft in #1979
- Remove one layer of abstraction and multiple intermediate types by @adamsitnik in #2040
- Move version option out of middleware by @jonsequitur in #1969
- Move most of the built in middlewares out of middleware by @adamsitnik in #2043
- [main] Update dependencies from dotnet/source-build-reference-packages by @dotnet-maestro in #2022
- Moving CancelOnProcessTermination out of middleware, better cancellation support by @adamsitnik in #2044
- Rename Option.IsGlobal to AppliesToSelfAndChildren, make it public by @adamsitnik in #2060
- Remove non generic GetValue overloads by @adamsitnik in #2059
- Symbol.Description does not need to be virtual by @adamsitnik in #2045
- Localization by @adamsitnik in #2041
- introduce Command.Parse(CommandLineConfiguration) by @adamsitnik in #2062
- [main] Update dependencies from dotnet/source-build-reference-packages by @dotnet-maestro in #2061
- Name and aliases separation by @adamsitnik in #2073
- merge Validate clas into ArgumentValidation by @adamsitnik in #2077
- [main] Update dependencies from dotnet/source-build-reference-packages by @dotnet-maestro in #2075
- Types cleanup by @adamsitnik in #2076
- Introduce Directive Symbol type by @adamsitnik in #2063
- seal public classes which don't expose public ctors by @adamsitnik in #2081
- merge CommandLineStringSplitter into Parser by @adamsitnik in #2079
- Remove set handler overloads by @adamsitnik in #2089
- remove non-generic GetValueOrDefault and fix the usages by @adamsitnik in #2078
- Move BindingContext and related types to NamingConventionBinder project by @adamsitnik in #2093
- The handler should always return an integer by @adamsitnik in https://github.com/dotnet/command-line-api/pull/...
System.CommandLine v2.0.0-beta4.22272.1
For details on the Beta 4 release, please see #1750.
What's Changed
- Added ZSH Completion Shim Script by @JohnnyWombwell in #1643
- [main] Update dependencies from dotnet/arcade by @dotnet-maestro in #1651
- fix #1647 by @jonsequitur in #1649
- add support ... or, uh, remove non-support ... for OnlyTake(0) by @jonsequitur in #1658
- [main] Update dependencies from dotnet/arcade by @dotnet-maestro in #1660
- Perf improvements part 6: startup time by @adamsitnik in #1654
- Add string converters for uint/sbyte/byte by @SamZhangQingChuan in #1661
- update Ubuntu image to 20.04 by @jonsequitur in #1657
- [main] Update dependencies from dotnet/arcade by @dotnet-maestro in #1666
- [main] Update dependencies from dotnet/arcade by @dotnet-maestro in #1674
- Ubuntu dependencies for NativeAOT compiler by @jonsequitur in #1676
- Add NativeAOT test by @adamsitnik in #1656
- [main] Update dependencies from dotnet/arcade by @dotnet-maestro in #1682
- Fix #1638 by @jonsequitur in #1677
- Fix #1663 by @jonsequitur in #1671
- Fix #1209 by @eisbaer66 in #1706
- Apply comments from #7859 by @tdykstra in #1701
- Present error instead of throwing exception for empty argument to FileSystemInfo type by @therealchjones in #1704
- Fix #1665 by @jonsequitur in #1714
- fix #1711 by @jonsequitur in #1716
- Add TimeSpan string converter by @GabeDeBacker in #1718
- SetHandler improvements by @jonsequitur in #1729
- Add support for IPAddress and IPEndpoint arguments by @RobThree in #1735
- Add support for DateOnly and TimeOnly on .Net 6 (#1732). by @RobThree in #1734
- bump version to beta4 by @jonsequitur in #1741
New Contributors
- @JohnnyWombwell made their first contribution in #1643
- @SamZhangQingChuan made their first contribution in #1661
- @eisbaer66 made their first contribution in #1706
- @tdykstra made their first contribution in #1701
- @therealchjones made their first contribution in #1704
- @GabeDeBacker made their first contribution in #1718
- @RobThree made their first contribution in #1735
Full Changelog: v2.0.0-beta3.22114.1...2.0.0-beta4.22272.1
System.CommandLine v2.0.0-beta3.22114.1
For details on the Beta 3 release, please see #1613.
System.CommandLine v2.0.0-beta2.21617.1
For details on the Beta 2 release, please see #1537.
System.CommandLine v2.0.0-beta1.21216.1
What's new
It's been a while since our last beta release because as we approach the 2.0 milestone, we're making more breaking changes, and we're trying to group them into fewer releases in order to minimize churn.
System.CommandLine
-
Added an
Argument.LegalFileNamesOnly
extension method to improve file validations. (Thanks, @AronParker !) -
Made significant improvements to
HelpBuilder
to enable more fine-grained customization of help output. (Thanks, @Keboo!) -
Added an optional
description
parameter to anArgument<T>
constructor to matchOption<T>
. (Thanks, @database64128!) -
CommandHandler.Create
can now specify abstract methods, which can vary by the derived class at invocation time. (Thanks, @ycrumeyrolle!) -
Improved support for POSIX bundled arguments when no delimiter is used. (Thanks, @sfoslund)
-
Ahora se puede localizar la ayuda (pero todavia se necesita marcar
-h
para pedirla 🤔). (Thanks, @Keboo!) -
Added XML documentation for a number of types. (Thanks, @pieter-venter!)
-
Added a
ParseResult
parameter toSymbol.GetSuggestions
and to the signature forSuggestDelegate
. TheGetSuggestions
change is not a source-breaking change because we've also added an extension method supporting the older signature. (Thanks, @thoemmi!) -
Fixed a bug where trailing spaces would break response file parsing. (Thanks, @hackf5!)
-
Introduced
IIdentifierSymbol
, whichOption
andCommand
implement, butArgument
does not. -
Enabled customization of exit codes on error by passing an
exitErrorCode
argument to variousCommandLineBuilder
methods:UseExceptionHandler
,UseParseDirective
,UseParseErrorReporting
, andUseVersionOption
. (Thanks, @Keboo!) -
Custom argument parsers using
ParseArgument<T>
can now partially consume tokens usingArgumentResult.OnlyTake(int)
, allowing other symbols to consume the remaining tokens. -
CommandHandler.Create
now provides overloads for up to 16 parameters. We used to go to 11, but it wasn't enough. -
The debug directive now requires opt-in from the user, in order to prevent it from being used maliciously to block a process. (Thanks, @Keboo!)
-
Numerous performance improvements, benefitting speed and memory footprint. (Thanks, @paulomorgado!) Here's a sample:
BenchmarkDotNet=v0.12.1, OS=Windows 10.0.19042 Intel Core i7-6700 CPU 3.40GHz (Skylake), 1 CPU, 8 logical and 4 physical cores .NET Core SDK=5.0.300-preview.21180.15 [Host] : .NET Core 5.0.5 (CoreCLR 5.0.521.16609, CoreFX 5.0.521.16609), X64 RyuJIT MediumRun : .NET Core 5.0.5 (CoreCLR 5.0.521.16609, CoreFX 5.0.521.16609), X64 RyuJIT Job=MediumRun Force=True IterationCount=15 LaunchCount=2 RunStrategy=ColdStart WarmupCount=10
Method NuGetReferences Mean Error StdDev Median Ratio RatioSD Gen 0 Gen 1 Gen 2 Allocated SimpleParseAndInvoke System.CommandLine 2.0.0-beta1.20371.2 21.89 ms 59.16 ms 88.54 ms 1.0039 ms 1.00 0.00 - - - 52.84 KB SimpleParseAndInvoke System.CommandLine 2.0.0-beta1.21214.1 17.16 ms 49.76 ms 74.48 ms 0.7997 ms 0.83 0.18 - - - 45.48 KB -
Various bug fixes.
System.CommandLine.Hosting
- Added
IHostBuilder.GetInvocationContext
extension methods for accessingInvocationContext
in order to do invocation-specific dependency injection and more. (Thanks, @fredrikhr!)
Breaking changes
-
Option.Argument
has been removed from the public API.Option
/Option<T>
constructors have been adjusted so that functionality for option arguments (such as setting default values and custom argument parsers) is available viaOption
andOption<T>
. -
Model binding no longer passes
null
for unspecified argument and option values ofIEnumerable
orstring
types. Instead, it passes an empty array or list of the appropriate type, orstring.Empty
, respectively. -
SuggestDelegate
now takes aParseResult
parameter in addition to the existingstring textToMatch
parameter. -
InvocationContext.ResultCode
has been renamed toInvocationContext.ExitCode
. -
The following string-based lookup APIs have been removed because they can be ambiguous when more than one symbol matches:
ParseResult[string]
CommandResult.OptionResult(string)
CommandResult[string]
-
System.CommandLine.Invocation.Process
has been removed from the public API.
System.CommandLine v2.0.0-beta1.20371.2
What's new
- Moved the documentation from the wiki into the repository so people can make pull requests.
System.CommandLine
-
Added support for setting environment variables using the
[env:name=value]
directive. (#965) Thanks, @fredrikhr! -
Made constructors more consistent between
Argument<T>
andOption<T>
to allow specifyinggetDefaultValue
anddescription
. -
Added
ParseResult.ValueForArgument<T>(Argument<T>)
andParseResult.ValueForOption<T>(Option<T>)
to combine lookup and conversion into a single method supporting type inference. (#949) -
Added default values to help output. (#898) Thanks, @NikiforovAll!
-
Help now wraps lines for long option names (#947) Thanks, @apogeeoak!
-
Added
SymbolResult.FindResultFor
to provide a cleaner way to find the result for a particularCommand
,Option
, orArgument
. This is similar toParseResult.FindResultFor
but it can be used within a custom parse delegate (ParseArgument<T>
) so that you don't have to traverse the result tree. -
Improved suggestion APIs to allow replacing the default suggestions, using
Argument.Suggestions.Clear()
. (#955) Thanks, @jmarolf! -
Added
Option.AddSuggestions
andArgument.AddSuggestions
methods with overloads to provide a static list of suggestions or a delegate for more dynamic suggestions. -
Suggestions are now sorted so that the matches closest to what was typed are shown first. (#891) Thanks, @kimsey0!
-
Performance improvements in tokenizer and symbol result lookups.
System.CommandLine.Rendering
Breaking changes
-
Renamed
Option.Required
toOption.IsRequired
. -
Renamed the delegate type
Suggest
toSuggestDelegate
. -
Symbol.Aliases
andSymbol.RawAliases
are now of typeIReadOnlyCollection<string>
rather thanIReadOnlyList<string>
.
System.CommandLine v2.0.0-beta1.20214.1
Update dependencies from https://github.com/dotnet/arcade build 20200…
System.CommandLine v2.0.0-beta1.20213.1
fix nullability