From 650d2dba1fafa469a4a7a790f48dad5b33705feb Mon Sep 17 00:00:00 2001 From: skywing Date: Thu, 20 Jun 2019 07:11:16 -0400 Subject: [PATCH] Warn/error about unsupported flags #468 Warn/error about unsupported flags #468 --- packages/truffle-core/lib/command.js | 29 ++++++++++++++++++++++++++ packages/truffle-core/test/commands.js | 21 +++++++++++++++++++ 2 files changed, 50 insertions(+) diff --git a/packages/truffle-core/lib/command.js b/packages/truffle-core/lib/command.js index 9fde2b76890..a62dafd7a6e 100644 --- a/packages/truffle-core/lib/command.js +++ b/packages/truffle-core/lib/command.js @@ -100,6 +100,35 @@ class Command { } }); + //Check unsupported command line flag according to the option list in help + try { + const inputOptions = []; + inputStrings.map(i => { + if (i.startsWith("--")) { + inputOptions.push(i); + } + }); + + const validOptions = []; + result.command.help.options.map(item => { + let opt = item.option.split(" ")[0]; + if (opt.startsWith("--")) validOptions.push(opt); + }); + + let notValidOptions = inputOptions.filter( + opt => !validOptions.includes(opt) + ); + + if (notValidOptions.length > 0) + return callback( + new TaskError( + "Unsupported (Undocumented) command line option: " + notValidOptions + ) + ); + } catch (err) { + callback(err); + } + const newOptions = Object.assign({}, clone, argv); try { diff --git a/packages/truffle-core/test/commands.js b/packages/truffle-core/test/commands.js index bc649bddc20..50ae5086b4b 100644 --- a/packages/truffle-core/test/commands.js +++ b/packages/truffle-core/test/commands.js @@ -37,4 +37,25 @@ describe("Commander", function() { var actualCommand = commander.getCommand("console").command; assert.equal(actualCommand, commands.console); }); + + it("will stop and display error for unsupported flags in commands", function() { + var actualCommand = commander.getCommand("mig").command; + assert.equal(actualCommand, commands.migrate); + commander.run( + [ + "migrate", + "--network", + "localhost", + "--unsupportedflag", + "invalidoption" + ], + { noAliases: true }, + function(err) { + assert.equal( + err.message.split(":")[0], + "Unsupported (Undocumented) command line option" + ); + } + ); + }); });