commandlineparser / commandlineparser/commandline

Implement --no-SOME_OPTION

Open
#783 10 comments 1 reaction 0 assignees View on GitHub
good first issue help wanted
Dominant language
C#
Stars
4.8k
Forks
478
PR merge metrics
No merged PRs in 30d

Description

I want these mutually exclusive options:

- --updateParts
- --not-updateParts

The default is to update parts, and it's disabled if the second flag is passed. The user needs to pass one flag or the other (so they don't get a behavior they didn't explicitly ask for).

Is there any way to do this? I had a go with this:

`class Options
{
private static bool _updateParts;

public Options(bool updateParts, bool doNotUpdateParts)
{
_updateParts = updateParts;
if (doNotUpdateParts) _updateParts = false;
}

[Option('c', "updateParts", SetName = "update", Required = true, Default = true)]
public static bool UpdateParts { get { return _updateParts; } }

[Option('C', "no-updateParts", SetName = "noUpdate", Required = true, Default = false)]
public static bool DoNotUpdateParts { get { return !_updateParts; } }
}`

Generally speaking this works, but it means I can't add two other options which are mutually exclusive. Imagine I now want to add:

- --doLogging
- --not-doLogging

I can't make them mutually exclusive because they don't belong to either set update or noUpdate.

Contributor guide

No contributing guide indexed for this repository

Research direction

No source file or test is named. Start by tracing how Option attributes, SetName, Required, and Default are validated, then examine how multiple mutually exclusive groups are represented. Done means independent updateParts and doLogging flag pairs can each enforce their own exclusivity without conflicting groups, with coverage for omitted and conflicting flags.

Written by the indexing model from the issue text.

Assessment

Tech stack
csharp
Domain
cli
Issue type
Feature
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.