Skip to content

side effects of setting flag defaults #854

Open
@cristiand391

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:

  1. can't determine at if a user really typed a flag or is just a default value.
  2. 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

  1. parsing argv
  2. 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

Metadata

Assignees

No one assigned

    Labels

    announcementPinned issues for known bugs or general communication with the community.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions