diff --git a/index.js b/index.js index ecbeb8281..007091b42 100644 --- a/index.js +++ b/index.js @@ -1124,7 +1124,12 @@ class Command extends EventEmitter { */ unknownCommand() { - const message = `error: unknown command '${this.args[0]}'`; + const partCommands = [this.name()]; + for (let parentCmd = this.parent; parentCmd; parentCmd = parentCmd.parent) { + partCommands.unshift(parentCmd.name()); + } + const fullCommand = partCommands.join(' '); + const message = `error: unknown command '${this.args[0]}'. See '${fullCommand} ${this._helpLongFlag}'.`; console.error(message); this._exit(1, 'commander.unknownCommand', message); }; diff --git a/tests/command.exitOverride.test.js b/tests/command.exitOverride.test.js index fb76504bb..52917ca38 100644 --- a/tests/command.exitOverride.test.js +++ b/tests/command.exitOverride.test.js @@ -54,6 +54,7 @@ describe('.exitOverride and error details', () => { test('when specify unknown command then throw CommanderError', () => { const program = new commander.Command(); program + .name('prog') .exitOverride() .command('sub'); @@ -65,7 +66,7 @@ describe('.exitOverride and error details', () => { } expect(consoleErrorSpy).toHaveBeenCalled(); - expectCommanderError(caughtErr, 1, 'commander.unknownCommand', "error: unknown command 'oops'"); + expectCommanderError(caughtErr, 1, 'commander.unknownCommand', "error: unknown command 'oops'. See 'prog --help'."); }); // Same error as above, but with custom handler.