@@ -282,6 +282,62 @@ bool CmdLineParser::fillSettingsFromArgs(int argc, const char* const argv[])
282282// TODO: error out on all missing given files/paths
283283CmdLineParser::Result CmdLineParser::parseFromArgs (int argc, const char * const argv[])
284284{
285+ if (argc <= 1 ) {
286+ printHelp ();
287+ return Result::Exit;
288+ }
289+
290+ // check for exclusive options
291+ for (int i = 1 ; i < argc; i++) {
292+ // documentation..
293+ if (std::strcmp (argv[i], " --doc" ) == 0 ) {
294+ std::ostringstream doc;
295+ // Get documentation..
296+ for (const Check * it : Check::instances ()) {
297+ const std::string& name (it->name ());
298+ const std::string info (it->classInfo ());
299+ if (!name.empty () && !info.empty ())
300+ doc << " ## " << name << " ##\n "
301+ << info << " \n " ;
302+ }
303+
304+ mLogger .printRaw (doc.str ());
305+ return Result::Exit;
306+ }
307+
308+ // print all possible error messages..
309+ if (std::strcmp (argv[i], " --errorlist" ) == 0 ) {
310+ mSettings .loadCppcheckCfg ();
311+ {
312+ XMLErrorMessagesLogger xmlLogger;
313+ std::cout << ErrorMessage::getXMLHeader (mSettings .cppcheckCfgProductName );
314+ CppCheck::getErrorMessages (xmlLogger);
315+ std::cout << ErrorMessage::getXMLFooter () << std::endl;
316+ }
317+ return Result::Exit;
318+ }
319+
320+ // Print help
321+ if (std::strcmp (argv[i], " -h" ) == 0 || std::strcmp (argv[i], " --help" ) == 0 ) {
322+ printHelp ();
323+ return Result::Exit;
324+ }
325+
326+ if (std::strcmp (argv[i], " --version" ) == 0 ) {
327+ mSettings .loadCppcheckCfg ();
328+ if (!mSettings .cppcheckCfgProductName .empty ()) {
329+ mLogger .printRaw (mSettings .cppcheckCfgProductName );
330+ } else {
331+ const char * const extraVersion = CppCheck::extraVersion ();
332+ if (*extraVersion != ' \0 ' )
333+ mLogger .printRaw (std::string (" Cppcheck " ) + CppCheck::version () + " (" + extraVersion + ' )' );
334+ else
335+ mLogger .printRaw (std::string (" Cppcheck " ) + CppCheck::version ());
336+ }
337+ return Result::Exit;
338+ }
339+ }
340+
285341 bool def = false ;
286342 bool maxconfigs = false ;
287343
@@ -466,23 +522,6 @@ CmdLineParser::Result CmdLineParser::parseFromArgs(int argc, const char* const a
466522 }
467523 }
468524
469- // documentation..
470- else if (std::strcmp (argv[i], " --doc" ) == 0 ) {
471- // TODO: make an exclusive option
472- std::ostringstream doc;
473- // Get documentation..
474- for (const Check * it : Check::instances ()) {
475- const std::string& name (it->name ());
476- const std::string info (it->classInfo ());
477- if (!name.empty () && !info.empty ())
478- doc << " ## " << name << " ##\n "
479- << info << " \n " ;
480- }
481-
482- mLogger .printRaw (doc.str ());
483- return Result::Exit;
484- }
485-
486525 // dump cppcheck data
487526 else if (std::strcmp (argv[i], " --dump" ) == 0 )
488527 mSettings .dump = true ;
@@ -506,19 +545,6 @@ CmdLineParser::Result CmdLineParser::parseFromArgs(int argc, const char* const a
506545 }
507546 }
508547
509- // print all possible error messages..
510- else if (std::strcmp (argv[i], " --errorlist" ) == 0 ) {
511- // TODO: make this an exclusive option
512- mSettings .loadCppcheckCfg ();
513- {
514- XMLErrorMessagesLogger xmlLogger;
515- std::cout << ErrorMessage::getXMLHeader (mSettings .cppcheckCfgProductName );
516- CppCheck::getErrorMessages (xmlLogger);
517- std::cout << ErrorMessage::getXMLFooter () << std::endl;
518- }
519- return Result::Exit;
520- }
521-
522548 // --error-exitcode=1
523549 else if (std::strncmp (argv[i], " --error-exitcode=" , 17 ) == 0 ) {
524550 if (!parseNumberArg (argv[i], 17 , mSettings .exitCode ))
@@ -592,13 +618,6 @@ CmdLineParser::Result CmdLineParser::parseFromArgs(int argc, const char* const a
592618 else if (std::strcmp (argv[i], " --funsigned-char" ) == 0 )
593619 mSettings .platform .defaultSign = ' u' ;
594620
595- // Print help
596- else if (std::strcmp (argv[i], " -h" ) == 0 || std::strcmp (argv[i], " --help" ) == 0 ) {
597- // TODO: make this an exclusive option
598- printHelp ();
599- return Result::Exit;
600- }
601-
602621 // Ignored paths
603622 else if (std::strncmp (argv[i], " -i" , 2 ) == 0 ) {
604623 std::string path;
@@ -1150,21 +1169,6 @@ CmdLineParser::Result CmdLineParser::parseFromArgs(int argc, const char* const a
11501169 else if (std::strcmp (argv[i], " -v" ) == 0 || std::strcmp (argv[i], " --verbose" ) == 0 )
11511170 mSettings .verbose = true ;
11521171
1153- else if (std::strcmp (argv[i], " --version" ) == 0 ) {
1154- // TODO: make this an exclusive parameter
1155- mSettings .loadCppcheckCfg ();
1156- if (!mSettings .cppcheckCfgProductName .empty ()) {
1157- mLogger .printRaw (mSettings .cppcheckCfgProductName );
1158- } else {
1159- const char * const extraVersion = CppCheck::extraVersion ();
1160- if (*extraVersion != ' \0 ' )
1161- mLogger .printRaw (std::string (" Cppcheck " ) + CppCheck::version () + " (" + extraVersion + ' )' );
1162- else
1163- mLogger .printRaw (std::string (" Cppcheck " ) + CppCheck::version ());
1164- }
1165- return Result::Exit;
1166- }
1167-
11681172 // Write results in results.xml
11691173 else if (std::strcmp (argv[i], " --xml" ) == 0 )
11701174 mSettings .xml = true ;
@@ -1226,11 +1230,6 @@ CmdLineParser::Result CmdLineParser::parseFromArgs(int argc, const char* const a
12261230 mLogger .printMessage (" unusedFunction check can't be used with '-j' option. Disabling unusedFunction check." );
12271231 }
12281232
1229- if (argc <= 1 ) {
1230- printHelp ();
1231- return Result::Exit;
1232- }
1233-
12341233 if (!mPathNames .empty () && project.projectType != ImportProject::Type::NONE) {
12351234 mLogger .printError (" --project cannot be used in conjunction with source files." );
12361235 return Result::Fail;
0 commit comments