Skip to content

Conversation

@aweebit
Copy link
Contributor

@aweebit aweebit commented Aug 4, 2023

An extension of #1929 fixing a problem I run into when writing demo code for #1931.

Has been merged with the already approved tiny fixes PR #1930 because the parent #1929 has been merged with it.

Problem

program
  .option('-h, --host')
  .helpOption('-h')
  .outputHelp(); // throws
lib\option.js:17
    this.required = flags.includes('<'); // A value must be supplied when the option is specified.
                          ^

TypeError: Cannot read properties of undefined (reading 'includes')
    at new Option (lib\option.js:17:27)
    at Command.createOption (lib\command.js:500:12)
    at Help.visibleOptions (lib\help.js:79:26)
    at Help.longestOptionTermLength (lib\help.js:197:19)
    at Help.padWidth (lib\help.js:419:14)
    at Help.formatHelp (lib\help.js:349:30)
    at Command.helpInformation (lib\command.js:1988:19)
    at Command.outputHelp (lib\command.js:2028:32)

Solution

Help.visibleOptions() code has been updated to support help options with only the short flag well.

Tests have been added to cover this and other similar use cases.

ChangeLog

Changed

  • (from #1929) Breaking: use .createOption() in .helpOption() to support custom option flag extraction

Fixed

  • added missing support for help options with only the short flag

aweebit added 10 commits August 3, 2023 00:44
Borrowed from a3f0e28 that was supposed to land in the now-closed tj#1921.
Analogous to 3c94dfd in tj#1933 for version option.

Storing the Option instance of the help option instead of just its
flags (_helpShortFlag, _helpLongFlag) is meaningful for cases when other
properties of the instance need to be accessed (not currently the case,
but could be in the future).
Eliminates the need for the check in other places.

(cherry picked from commit a12f5be)
@aweebit
Copy link
Contributor Author

aweebit commented Aug 4, 2023

Side note: I don't know if I'm doing it right with the base PR "extensions" and the merges. The commits and file changes look really cluttered now. If it's appropriate and if #1929 can't be merged right now, a good idea might be to create a temporary branch based off #1929 and make it the base for all PRs building on it (#1931, #1934, #1935). This PR would then only contain the last two commits which are the relevant ones, for example, making it much simpler to review the changes.

@aweebit aweebit changed the title Add missing Help.visibleOptions() test and support help options with only the short flag in Help.visibleOptions() Add missing test and support help options with only the short flag in Help.visibleOptions() Aug 4, 2023
@aweebit aweebit force-pushed the feature/helpOption-only-short branch from 610244d to 3ef03e2 Compare August 13, 2023 01:33
@shadowspawn
Copy link
Collaborator

Side note: I don't know if I'm doing it right with the base PR "extensions" and the merges. The commits and file changes look really cluttered now.

With 20/20 hindsight I can confidently say this was not the right approach. 😆

Some parts this have been approved separately, and some parts have been rejected separately. Closing this one as too messy to try and review what is left.

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.

2 participants