Split CommandLineParser::parse() into smaller functions

This commit is contained in:
Kamil Śliwak
2021-09-17 18:42:13 +02:00
parent 13571f4a67
commit 30796b8957
2 changed files with 61 additions and 20 deletions
+42 -19
View File
@@ -323,6 +323,16 @@ OptimiserSettings CommandLineOptions::optimiserSettings() const
return settings;
}
bool CommandLineParser::parse(int _argc, char const* const* _argv, bool _interactiveTerminal)
{
m_hasOutput = false;
if (!parseArgs(_argc, _argv, _interactiveTerminal))
return false;
return processArgs();
}
bool CommandLineParser::parseInputPathsAndRemappings()
{
m_options.input.ignoreMissingFiles = (m_args.count(g_strIgnoreMissingFiles) > 0);
@@ -478,10 +488,8 @@ bool CommandLineParser::parseLibraryOption(string const& _input)
return true;
}
bool CommandLineParser::parse(int _argc, char const* const* _argv, bool interactiveTerminal)
po::options_description CommandLineParser::optionsDescription()
{
m_hasOutput = false;
// Declare the supported options.
po::options_description desc((R"(solc, the Solidity commandline compiler.
@@ -780,12 +788,22 @@ General Information)").c_str(),
;
desc.add(smtCheckerOptions);
po::options_description allOptions = desc;
allOptions.add_options()(g_strInputFile.c_str(), po::value<vector<string>>(), "input file");
desc.add_options()(g_strInputFile.c_str(), po::value<vector<string>>(), "input file");
return desc;
}
po::positional_options_description CommandLineParser::positionalOptionsDescription()
{
// All positional options should be interpreted as input files
po::positional_options_description filesPositions;
filesPositions.add(g_strInputFile.c_str(), -1);
return filesPositions;
}
bool CommandLineParser::parseArgs(int _argc, char const* const* _argv, bool _interactiveTerminal)
{
po::options_description allOptions = optionsDescription();
po::positional_options_description filesPositions = positionalOptionsDescription();
// parse the compiler arguments
try
@@ -801,6 +819,25 @@ General Information)").c_str(),
return false;
}
if (m_args.count(g_strHelp) || (_interactiveTerminal && _argc == 1))
{
sout() << allOptions;
return false;
}
if (m_args.count(g_strVersion))
printVersionAndExit();
if (m_args.count(g_strLicense))
printLicenseAndExit();
po::notify(m_args);
return true;
}
bool CommandLineParser::processArgs()
{
if (!checkMutuallyExclusive({g_strColor, g_strNoColor}))
return false;
@@ -826,18 +863,6 @@ General Information)").c_str(),
m_options.formatting.withErrorIds = m_args.count(g_strErrorIds);
if (m_args.count(g_strHelp) || (interactiveTerminal && _argc == 1))
{
sout() << desc;
return false;
}
if (m_args.count(g_strVersion))
printVersionAndExit();
if (m_args.count(g_strLicense))
printLicenseAndExit();
if (m_args.count(g_strRevertStrings))
{
string revertStringsString = m_args[g_strRevertStrings].as<string>();
@@ -895,8 +920,6 @@ General Information)").c_str(),
m_options.compiler.estimateGas = (m_args.count(g_strGas) > 0);
po::notify(m_args);
if (m_args.count(g_strBasePath))
m_options.input.basePath = m_args[g_strBasePath].as<string>();