-
Notifications
You must be signed in to change notification settings - Fork 2.9k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
add MarkIfFlagPresentThenOthersRequired #2200
base: main
Are you sure you want to change the base?
Conversation
@marckhouzam Would love to get this in thanks! Let me know if you have any questions :) |
@dpetersen @markbates @EdwardBetts Would love to get this in thanks! Let me know if you have any questions :) |
@marckhouzam is there anything we can do to get this moving? Alternatively we're happy to have discussions about it being out of scope, it just felt fairly obviously useful to us. |
I like the idea. I’ll put it on my queue to review. Thank you. |
Co-authored-by: ccoVeille <[email protected]>
Co-authored-by: ccoVeille <[email protected]>
…ond flag Co-authored-by: ccoVeille <[email protected]>
Hi @ccoVeille thank you for the review, I have committed your suggested changes |
if f == nil { | ||
panic(fmt.Sprintf("Failed to find flag %q and mark it as being in an if present then others required flag group", v)) | ||
} | ||
// Each time this is called is a single new entry; this allows it to be a member of multiple groups if needed. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is this tested? I mean covered by a test that will ensure it will stay like this if there is a future refactoring
requiredAsGroupAnnotation = "cobra_annotation_required_if_others_set" | ||
oneRequiredAnnotation = "cobra_annotation_one_required" | ||
mutuallyExclusiveAnnotation = "cobra_annotation_mutually_exclusive" | ||
ifPresentThenOthersRequiredAnnotation = "cobra_annotation_if_present_then_others_required" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Could you rename them in a way they share a common prefix, not suffix
These constants are defined at the package level, so IDE will suggest them in any method when coding in that package
I would like to see something like this
requiredAsGroupAnnotation = "cobra_annotation_required_if_others_set" | |
oneRequiredAnnotation = "cobra_annotation_one_required" | |
mutuallyExclusiveAnnotation = "cobra_annotation_mutually_exclusive" | |
ifPresentThenOthersRequiredAnnotation = "cobra_annotation_if_present_then_others_required" | |
annotationGroupRequired = "cobra_annotation_required_if_others_set" | |
annotationRequiredOne = "cobra_annotation_one_required" | |
annotationMutuallyExclusive = "cobra_annotation_mutually_exclusive" | |
annotationGroupDependent = "cobra_annotation_if_present_then_others_required" |
The names of the constants are just suggestions to give you an idea
This PR introduces a new flag group function,
MarkIfFlagPresentThenOthersRequired
, which enforces a "one-way required together" relationship among flags. This means that if a primary flag is set, then other dependent flags must also be set. This allows users to make certain flags conditionally required based on the presence of another flag, while maintaining flexibility when the primary flag is not provided.Example
Consider a command called
get-range
that uses the flags--start
and--end
to specify a date range. By default, the command can run without either flag, using default start and end values (e.g.,start=someDefaultStart
andend=Now
). However, you may want to enforce that if the user specifies an--end
, they must also specify a--start
.--end=value
, it will trigger an error because--start
is missing.--start
, it will run using the default values or the provided start date.This change makes it easier to enforce dependencies between flags while allowing flexible defaults when the primary flag is not specified.