Description
Is your feature request related to a problem? Please describe.
not really a feature request, just wanted to post this for others to be aware.
the way oclif handles flag defaults makes it hard to tell wether a user really typed that flag or is just a default value from flag.default: ()=>{}
.
Workaround:
search for the flag in argv
, like this:
https://github.com/salesforcecli/plugin-telemetry/blob/6eaedbed2bdbdf2979be9f6bcd9fad5c43ae2a5b/src/commandExecution.ts#L180-L181
so you need to carefully search for all valid flag styles (long/short, with =
sep).
Example:
in sf
we have a requiredHubFlag
for commands that interact with Salesforce devhubs that is both required and has a default value handler:
https://github.com/salesforcecli/sf-plugins-core/blob/58d8e9a08dda865850adcdec0d791ee0195871f9/src/flags/orgFlags.ts#L175-L189
it seems the parser will first set any flag value that has a flag.default
val/func defined and after that validate if flag.required: true
that the flag has a value, which at the time this validation happens it's true.
some side-effects of this:
- can't determine at if a user really typed a flag or is just a default value.
- if a flag has a default and
required: true
, help text is wrong ((required)
when it may not be)
Describe the solution you'd like
maybe the parser could set a prop that we could check to see if it was typed or not.
Not sure what could we do with the help text.
Describe alternatives you've considered
- parsing
argv
- set flags with no defaults, then handle them in the
run
method if they weren't specified.
Additional context
We got an issue in our repo about this but some internal people noticed multiple times:
forcedotcom/cli#2538