From 8a0abe05ff5947ddd4a0f2334b7adbc65bc4c626 Mon Sep 17 00:00:00 2001 From: walterlv Date: Sat, 1 Nov 2025 09:11:45 +0800 Subject: [PATCH] =?UTF-8?q?=E9=BB=98=E8=AE=A4=E5=BF=BD=E7=95=A5=E6=9C=AA?= =?UTF-8?q?=E7=9F=A5=E9=80=89=E9=A1=B9=EF=BC=88=E4=BB=8D=E7=84=B6=E8=A6=81?= =?UTF-8?q?=E6=B1=82=E4=B8=8D=E5=8F=AF=E5=BF=BD=E7=95=A5=E6=9C=AA=E7=9F=A5?= =?UTF-8?q?=E4=BD=8D=E7=BD=AE=E5=8F=82=E6=95=B0=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CommandLineParsingOptions.cs | 30 +++++++++++++++---- .../CommandLineStyleTestingExtensions.cs | 18 +++++++---- 2 files changed, 37 insertions(+), 11 deletions(-) diff --git a/src/DotNetCampus.CommandLine/CommandLineParsingOptions.cs b/src/DotNetCampus.CommandLine/CommandLineParsingOptions.cs index 251e93f..9c581f5 100644 --- a/src/DotNetCampus.CommandLine/CommandLineParsingOptions.cs +++ b/src/DotNetCampus.CommandLine/CommandLineParsingOptions.cs @@ -6,19 +6,39 @@ namespace DotNetCampus.Cli; public readonly record struct CommandLineParsingOptions { /// - public static CommandLineParsingOptions Flexible => new() { Style = CommandLineStyle.Flexible }; + public static CommandLineParsingOptions Flexible => new() + { + Style = CommandLineStyle.Flexible, + UnknownArgumentsHandling = UnknownCommandArgumentHandling.IgnoreUnknownOptionalArguments, + }; /// - public static CommandLineParsingOptions DotNet => new() { Style = CommandLineStyle.DotNet }; + public static CommandLineParsingOptions DotNet => new() + { + Style = CommandLineStyle.DotNet, + UnknownArgumentsHandling = UnknownCommandArgumentHandling.IgnoreUnknownOptionalArguments, + }; /// - public static CommandLineParsingOptions Gnu => new() { Style = CommandLineStyle.Gnu }; + public static CommandLineParsingOptions Gnu => new() + { + Style = CommandLineStyle.Gnu, + UnknownArgumentsHandling = UnknownCommandArgumentHandling.IgnoreUnknownOptionalArguments, + }; /// - public static CommandLineParsingOptions Posix => new() { Style = CommandLineStyle.Posix }; + public static CommandLineParsingOptions Posix => new() + { + Style = CommandLineStyle.Posix, + UnknownArgumentsHandling = UnknownCommandArgumentHandling.IgnoreUnknownOptionalArguments, + }; /// - public static CommandLineParsingOptions Windows => new() { Style = CommandLineStyle.Windows }; + public static CommandLineParsingOptions Windows => new() + { + Style = CommandLineStyle.Windows, + UnknownArgumentsHandling = UnknownCommandArgumentHandling.IgnoreUnknownOptionalArguments, + }; /// [Obsolete("为避免理解歧义,已弃用此名称,请使用 Windows 代替。")] diff --git a/tests/DotNetCampus.CommandLine.Tests/CommandLineStyleTestingExtensions.cs b/tests/DotNetCampus.CommandLine.Tests/CommandLineStyleTestingExtensions.cs index 4a6673d..a21fc6f 100644 --- a/tests/DotNetCampus.CommandLine.Tests/CommandLineStyleTestingExtensions.cs +++ b/tests/DotNetCampus.CommandLine.Tests/CommandLineStyleTestingExtensions.cs @@ -2,16 +2,22 @@ namespace DotNetCampus.Cli.Tests; +using UH = UnknownCommandArgumentHandling; + internal static class CommandLineStyleTestingExtensions { public static CommandLineParsingOptions ToParsingOptions(this TestCommandLineStyle style) => style switch { - TestCommandLineStyle.Flexible => CommandLineParsingOptions.Flexible, - TestCommandLineStyle.DotNet => CommandLineParsingOptions.DotNet, - TestCommandLineStyle.Gnu => CommandLineParsingOptions.Gnu, - TestCommandLineStyle.Posix => CommandLineParsingOptions.Posix, - TestCommandLineStyle.Windows => CommandLineParsingOptions.Windows, - TestCommandLineStyle.Url => CommandLineParsingOptions.Flexible with { SchemeNames = ["test"] }, + TestCommandLineStyle.Flexible => CommandLineParsingOptions.Flexible with { UnknownArgumentsHandling = UH.AllArgumentsMustBeRecognized }, + TestCommandLineStyle.DotNet => CommandLineParsingOptions.DotNet with { UnknownArgumentsHandling = UH.AllArgumentsMustBeRecognized }, + TestCommandLineStyle.Gnu => CommandLineParsingOptions.Gnu with { UnknownArgumentsHandling = UH.AllArgumentsMustBeRecognized }, + TestCommandLineStyle.Posix => CommandLineParsingOptions.Posix with { UnknownArgumentsHandling = UH.AllArgumentsMustBeRecognized }, + TestCommandLineStyle.Windows => CommandLineParsingOptions.Windows with { UnknownArgumentsHandling = UH.AllArgumentsMustBeRecognized }, + TestCommandLineStyle.Url => CommandLineParsingOptions.Flexible with + { + SchemeNames = ["test"], + UnknownArgumentsHandling = UH.AllArgumentsMustBeRecognized, + }, _ => throw new ArgumentOutOfRangeException(nameof(style), style, null), }; }