Skip to content

Conversation

@walterlv
Copy link
Member

@walterlv walterlv commented Nov 1, 2025

如果我们对使用命令行库的应用进行分类,有以下三类:

  1. 面向普通用户的 GUI 程序
  2. 面向专业人士的 TUI 程序
  3. 设计为被其他应用集成或调用的程序

对于 1 来说,如果严格解析命令行参数,很容易出现用户启动无反应的情况;但究竟该不该忽略还有待商榷。
对于 2 来说,最好是严格解析,对于不支持的选项和位置参数报错。

但对于 3 就不一样了,由于被其他应用集成,所以调用本程序的都是提前写好的程序。各个不同应用的版本升级节奏都不一样,当增加选项增加新功能时,中间会存在某段时间旧版本在接受新传入命令行选项的情况。对开发人员来说还好,但对终端用户来说就难以接受了。

考虑到不看文档的开发人员更容易遇到开发用户端产品,并使之被其他软件调用的情况,我决定让默认行为照顾这些不看文档的开发人员,即忽略未知选项。而看文档的开发人员可以主动将其改为严格模式,确保在遇到未知选项时能正确报错。

Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This PR modifies the default behavior for unknown argument handling in command line parsing options. The production code now defaults to IgnoreUnknownOptionalArguments while test code enforces strict validation with AllArgumentsMustBeRecognized.

  • Updated all static parsing option properties (Flexible, DotNet, Gnu, Posix, Windows) to set UnknownArgumentsHandling to IgnoreUnknownOptionalArguments
  • Modified test helper method to override this default with AllArgumentsMustBeRecognized for stricter test validation
  • Introduced using alias UH to reduce verbosity in test code

Reviewed Changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated no comments.

File Description
src/DotNetCampus.CommandLine/CommandLineParsingOptions.cs Sets default UnknownArgumentsHandling to IgnoreUnknownOptionalArguments for all predefined parsing option styles
tests/DotNetCampus.CommandLine.Tests/CommandLineStyleTestingExtensions.cs Overrides production defaults with AllArgumentsMustBeRecognized for testing and adds type alias for brevity

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@lindexi lindexi merged commit db07cdd into main Nov 1, 2025
9 checks passed
@lindexi lindexi deleted the t/walterlv/ignore branch November 1, 2025 02:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants