diff --git a/lib/command.js b/lib/command.js index e21742ad0..27bdb3e67 100644 --- a/lib/command.js +++ b/lib/command.js @@ -1761,13 +1761,14 @@ Expecting one of '${allowedValues.join("', '")}'`); if (flag.startsWith('--') && this._showSuggestionAfterError) { // Looping to pick up the global options too let candidateFlags = []; - for (const command of this._getCommandAndAncestors()) { + let command = this; + do { const moreFlags = command.createHelp().visibleOptions(command) .filter(option => option.long) .map(option => option.long); candidateFlags = candidateFlags.concat(moreFlags); - if (command._enablePositionalOptions) break; - } + command = command.parent; + } while (command && !command._enablePositionalOptions); suggestion = suggestSimilar(flag, candidateFlags); } diff --git a/lib/help.js b/lib/help.js index 7f1c2c354..560801bd3 100644 --- a/lib/help.js +++ b/lib/help.js @@ -101,10 +101,10 @@ class Help { if (!this.showGlobalOptions) return []; const globalOptions = []; - cmd._getCommandAndAncestors().slice(1).forEach((ancestorCmd) => { + for (let ancestorCmd = cmd.parent; ancestorCmd; ancestorCmd = ancestorCmd.parent) { const visibleOptions = ancestorCmd.options.filter((option) => !option.hidden); globalOptions.push(...visibleOptions); - }); + } if (this.sortOptions) { globalOptions.sort(this.compareOptions); } @@ -241,9 +241,9 @@ class Help { cmdName = cmdName + '|' + cmd._aliases[0]; } let ancestorCmdNames = ''; - cmd._getCommandAndAncestors().slice(1).forEach((ancestorCmd) => { + for (let ancestorCmd = cmd.parent; ancestorCmd; ancestorCmd = ancestorCmd.parent) { ancestorCmdNames = ancestorCmd.name() + ' ' + ancestorCmdNames; - }); + } return ancestorCmdNames + cmdName + ' ' + cmd.usage(); }