Skip to content

Commit fcda2d1

Browse files
authored
some CmdLineParser-related cleanups (#7105)
1 parent a9f496c commit fcda2d1

File tree

7 files changed

+44
-47
lines changed

7 files changed

+44
-47
lines changed

Diff for: cli/cmdlineparser.cpp

+14-18
Original file line numberDiff line numberDiff line change
@@ -606,9 +606,9 @@ CmdLineParser::Result CmdLineParser::parseFromArgs(int argc, const char* const a
606606
mLogger.printError("no path has been specified for --cppcheck-build-dir");
607607
return Result::Fail;
608608
}
609+
if (endsWith(path, '/'))
610+
path.pop_back();
609611
mSettings.buildDir = std::move(path);
610-
if (endsWith(mSettings.buildDir, '/'))
611-
mSettings.buildDir.pop_back();
612612
}
613613

614614
else if (std::strcmp(argv[i], "--cpp-header-probe") == 0) {
@@ -992,10 +992,8 @@ CmdLineParser::Result CmdLineParser::parseFromArgs(int argc, const char* const a
992992
}
993993

994994
else if (std::strncmp(argv[i], "--max-template-recursion=", 25) == 0) {
995-
int temp = 0;
996-
if (!parseNumberArg(argv[i], 25, temp))
995+
if (!parseNumberArg(argv[i], 25, mSettings.maxTemplateRecursion))
997996
return Result::Fail;
998-
mSettings.maxTemplateRecursion = temp;
999997
}
1000998

1001999
// undocumented option for usage in Python tests to indicate that no build dir should be injected
@@ -1013,6 +1011,7 @@ CmdLineParser::Result CmdLineParser::parseFromArgs(int argc, const char* const a
10131011

10141012
else if (std::strncmp(argv[i], "--output-format=", 16) == 0) {
10151013
const std::string format = argv[i] + 16;
1014+
// TODO: text and plist is missing
10161015
if (format == "sarif")
10171016
mSettings.outputFormat = Settings::OutputFormat::sarif;
10181017
else if (format == "xml")
@@ -1021,7 +1020,6 @@ CmdLineParser::Result CmdLineParser::parseFromArgs(int argc, const char* const a
10211020
mLogger.printError("argument to '--output-format=' must be 'sarif' or 'xml'.");
10221021
return Result::Fail;
10231022
}
1024-
mSettings.xml = (mSettings.outputFormat == Settings::OutputFormat::xml);
10251023
}
10261024

10271025

@@ -1064,12 +1062,11 @@ CmdLineParser::Result CmdLineParser::parseFromArgs(int argc, const char* const a
10641062

10651063
// Write results in results.plist
10661064
else if (std::strncmp(argv[i], "--plist-output=", 15) == 0) {
1067-
mSettings.outputFormat = Settings::OutputFormat::plist;
1068-
mSettings.plistOutput = Path::simplifyPath(argv[i] + 15);
1069-
if (mSettings.plistOutput.empty())
1070-
mSettings.plistOutput = ".";
1065+
std::string path = Path::simplifyPath(argv[i] + 15);
1066+
if (path.empty())
1067+
path = ".";
10711068

1072-
const std::string plistOutput = Path::toNativeSeparators(mSettings.plistOutput);
1069+
const std::string plistOutput = Path::toNativeSeparators(path);
10731070
if (!Path::isDirectory(plistOutput)) {
10741071
std::string message("plist folder does not exist: '");
10751072
message += plistOutput;
@@ -1078,8 +1075,11 @@ CmdLineParser::Result CmdLineParser::parseFromArgs(int argc, const char* const a
10781075
return Result::Fail;
10791076
}
10801077

1081-
if (!endsWith(mSettings.plistOutput,'/'))
1082-
mSettings.plistOutput += '/';
1078+
if (!endsWith(path,'/'))
1079+
path += '/';
1080+
1081+
mSettings.outputFormat = Settings::OutputFormat::plist;
1082+
mSettings.plistOutput = std::move(path);
10831083
}
10841084

10851085
// Special Cppcheck Premium options
@@ -1226,10 +1226,8 @@ CmdLineParser::Result CmdLineParser::parseFromArgs(int argc, const char* const a
12261226
}
12271227

12281228
else if (std::strncmp(argv[i], "--report-progress=", 18) == 0) {
1229-
int tmp;
1230-
if (!parseNumberArg(argv[i], 18, tmp, true))
1229+
if (!parseNumberArg(argv[i], 18, mSettings.reportProgress, true))
12311230
return Result::Fail;
1232-
mSettings.reportProgress = tmp;
12331231
}
12341232

12351233
else if (std::strncmp(argv[i], "--report-type=", 14) == 0) {
@@ -1501,7 +1499,6 @@ CmdLineParser::Result CmdLineParser::parseFromArgs(int argc, const char* const a
15011499

15021500
// Write results in results.xml
15031501
else if (std::strcmp(argv[i], "--xml") == 0) {
1504-
mSettings.xml = true;
15051502
mSettings.outputFormat = Settings::OutputFormat::xml;
15061503
}
15071504

@@ -1518,7 +1515,6 @@ CmdLineParser::Result CmdLineParser::parseFromArgs(int argc, const char* const a
15181515

15191516
mSettings.xml_version = tmp;
15201517
// Enable also XML if version is set
1521-
mSettings.xml = true;
15221518
mSettings.outputFormat = Settings::OutputFormat::xml;
15231519
}
15241520

Diff for: cli/cppcheckexecutor.cpp

+5-5
Original file line numberDiff line numberDiff line change
@@ -425,7 +425,7 @@ int CppCheckExecutor::check_internal(const Settings& settings) const
425425
if (settings.reportProgress >= 0)
426426
stdLogger.resetLatestProgressOutputTime();
427427

428-
if (settings.xml) {
428+
if (settings.outputFormat == Settings::OutputFormat::xml) {
429429
stdLogger.reportErr(ErrorMessage::getXMLHeader(settings.cppcheckCfgProductName, settings.xml_version));
430430
}
431431

@@ -477,7 +477,7 @@ int CppCheckExecutor::check_internal(const Settings& settings) const
477477

478478
stdLogger.writeCheckersReport();
479479

480-
if (settings.xml) {
480+
if (settings.outputFormat == Settings::OutputFormat::xml) {
481481
stdLogger.reportErr(ErrorMessage::getXMLFooter(settings.xml_version));
482482
}
483483

@@ -492,7 +492,7 @@ int CppCheckExecutor::check_internal(const Settings& settings) const
492492
void StdLogger::writeCheckersReport()
493493
{
494494
const bool summary = mSettings.safety || mSettings.severity.isEnabled(Severity::information);
495-
const bool xmlReport = mSettings.xml && mSettings.xml_version == 3;
495+
const bool xmlReport = mSettings.outputFormat == Settings::OutputFormat::xml && mSettings.xml_version == 3;
496496
const bool textReport = !mSettings.checkersReportFilename.empty();
497497

498498
if (!summary && !xmlReport && !textReport)
@@ -566,7 +566,7 @@ void StdLogger::reportErr(const std::string &errmsg)
566566
if (mErrorOutput)
567567
*mErrorOutput << errmsg << std::endl;
568568
else {
569-
std::cerr << ansiToOEM(errmsg, !mSettings.xml) << std::endl;
569+
std::cerr << ansiToOEM(errmsg, mSettings.outputFormat != Settings::OutputFormat::xml) << std::endl;
570570
}
571571
}
572572

@@ -640,7 +640,7 @@ void StdLogger::reportErr(const ErrorMessage &msg)
640640

641641
if (mSettings.outputFormat == Settings::OutputFormat::sarif)
642642
mSarifReport.addFinding(msgCopy);
643-
else if (mSettings.xml)
643+
else if (mSettings.outputFormat == Settings::OutputFormat::xml)
644644
reportErr(msgCopy.toXML());
645645
else
646646
reportErr(msgCopy.toString(mSettings.verbose, mSettings.templateFormat, mSettings.templateLocation));

Diff for: gui/mainwindow.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -1201,7 +1201,7 @@ QPair<bool,Settings> MainWindow::getCppcheckSettings()
12011201
result.quiet = false;
12021202
result.verbose = true;
12031203
result.force = mSettings->value(SETTINGS_CHECK_FORCE, 1).toBool();
1204-
result.xml = false;
1204+
result.outputFormat = Settings::OutputFormat::text;
12051205
result.jobs = mSettings->value(SETTINGS_CHECK_THREADS, 1).toInt();
12061206
result.certainty.setEnabled(Certainty::inconclusive, mSettings->value(SETTINGS_INCONCLUSIVE_ERRORS, false).toBool());
12071207
if (!mProjectFile || result.platform.type == Platform::Type::Unspecified)

Diff for: lib/check.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ ErrorPath Check::getErrorPath(const Token* errtok, const ValueFlow::Value* value
115115
ErrorPath errorPath;
116116
if (!value) {
117117
errorPath.emplace_back(errtok, std::move(bug));
118-
} else if (mSettings->verbose || mSettings->xml || !mSettings->templateLocation.empty()) {
118+
} else if (mSettings->verbose || mSettings->outputFormat == Settings::OutputFormat::xml || !mSettings->templateLocation.empty()) {
119119
errorPath = value->errorPath;
120120
errorPath.emplace_back(errtok, std::move(bug));
121121
} else {

Diff for: lib/settings.h

+9-10
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ class CPPCHECKLIB WARN_UNUSED Settings {
137137
/**
138138
* Check code in the headers, this is on by default but can
139139
* be turned off to save CPU */
140-
bool checkHeaders = true;
140+
bool checkHeaders = true; // TODO: CLI
141141

142142
/** Check for incomplete info in library files? */
143143
bool checkLibrary{};
@@ -149,10 +149,10 @@ class CPPCHECKLIB WARN_UNUSED Settings {
149149
std::string checkersReportFilename;
150150

151151
/** @brief check unknown function return values */
152-
std::set<std::string> checkUnknownFunctionReturn;
152+
std::set<std::string> checkUnknownFunctionReturn; // TODO: move to Library?
153153

154154
/** Check unused/uninstantiated templates */
155-
bool checkUnusedTemplates = true;
155+
bool checkUnusedTemplates = true; // TODO: CLI
156156

157157
/** Use Clang */
158158
bool clang{};
@@ -161,10 +161,10 @@ class CPPCHECKLIB WARN_UNUSED Settings {
161161
std::string clangExecutable = "clang";
162162

163163
/** Use clang-tidy */
164-
bool clangTidy{};
164+
bool clangTidy{}; // TODO: CLI
165165

166166
/** Internal: Clear the simplecpp non-existing include cache */
167-
bool clearIncludeCache{};
167+
bool clearIncludeCache{}; // internal
168168

169169
/** @brief include paths excluded from checking the configuration */
170170
std::set<std::string> configExcludePaths;
@@ -269,8 +269,10 @@ class CPPCHECKLIB WARN_UNUSED Settings {
269269
/** Library */
270270
Library library;
271271

272+
#ifdef HAS_THREADING_MODEL_FORK
272273
/** @brief Load average value */
273274
int loadAverage{};
275+
#endif
274276

275277
/** @brief Maximum number of configurations to check before bailing.
276278
Default is 12. (--max-configs=N) */
@@ -291,7 +293,7 @@ class CPPCHECKLIB WARN_UNUSED Settings {
291293
Platform platform;
292294

293295
/** @brief pid of cppcheck. Intention is that this is set in the main process. */
294-
int pid;
296+
int pid; // internal
295297

296298
/** @brief plist output (--plist-output=&lt;dir&gt;) */
297299
std::string plistOutput;
@@ -458,11 +460,8 @@ class CPPCHECKLIB WARN_UNUSED Settings {
458460
/** @brief Is --verbose given? */
459461
bool verbose{};
460462

461-
/** @brief write XML results (--xml) */
462-
bool xml{};
463-
464463
/** @brief XML version (--xml-version=..) */
465-
int xml_version = 2;
464+
int xml_version = 2; // TODO: integrate into outputFormat enum?
466465

467466
/**
468467
* @brief return true if a included file is to be excluded in Preprocessor::getConfigs

Diff for: lib/tokenize.cpp

+10-8
Original file line numberDiff line numberDiff line change
@@ -5930,29 +5930,31 @@ void Tokenizer::printDebugOutput(int simplification, std::ostream &out) const
59305930
(simplification != 2U && mSettings.debugnormal);
59315931

59325932
if (debug && list.front()) {
5933-
if (!mSettings.xml)
5934-
list.front()->printOut(out, mSettings.xml, nullptr, list.getFiles());
5933+
const bool xml = (mSettings.outputFormat == Settings::OutputFormat::xml);
59355934

5936-
if (mSettings.xml)
5935+
if (!xml)
5936+
list.front()->printOut(out, xml, nullptr, list.getFiles());
5937+
5938+
if (xml)
59375939
{
59385940
out << "<debug>" << std::endl;
5939-
list.front()->printOut(out, mSettings.xml, nullptr, list.getFiles());
5941+
list.front()->printOut(out, xml, nullptr, list.getFiles());
59405942
}
59415943

59425944
if (mSymbolDatabase) {
5943-
if (mSettings.xml)
5945+
if (xml)
59445946
mSymbolDatabase->printXml(out);
59455947
else if (mSettings.verbose) {
59465948
mSymbolDatabase->printOut("Symbol database");
59475949
}
59485950
}
59495951

59505952
if (mSettings.verbose)
5951-
list.front()->printAst(mSettings.verbose, mSettings.xml, list.getFiles(), out);
5953+
list.front()->printAst(mSettings.verbose, xml, list.getFiles(), out);
59525954

5953-
list.front()->printValueFlow(mSettings.xml, out);
5955+
list.front()->printValueFlow(xml, out);
59545956

5955-
if (mSettings.xml)
5957+
if (xml)
59565958
out << "</debug>" << std::endl;
59575959
}
59585960

Diff for: test/testcmdlineparser.cpp

+4-4
Original file line numberDiff line numberDiff line change
@@ -1834,31 +1834,31 @@ class TestCmdlineParser : public TestFixture {
18341834
REDIRECT;
18351835
const char * const argv[] = {"cppcheck", "--xml", "file.cpp"};
18361836
ASSERT_EQUALS_ENUM(CmdLineParser::Result::Success, parser->parseFromArgs(3, argv));
1837-
ASSERT(settings->xml);
1837+
ASSERT_EQUALS_ENUM(Settings::OutputFormat::xml, settings->outputFormat);
18381838
ASSERT_EQUALS(2, settings->xml_version);
18391839
}
18401840

18411841
void xmlver2() {
18421842
REDIRECT;
18431843
const char * const argv[] = {"cppcheck", "--xml-version=2", "file.cpp"};
18441844
ASSERT_EQUALS_ENUM(CmdLineParser::Result::Success, parser->parseFromArgs(3, argv));
1845-
ASSERT(settings->xml);
1845+
ASSERT_EQUALS_ENUM(Settings::OutputFormat::xml, settings->outputFormat);
18461846
ASSERT_EQUALS(2, settings->xml_version);
18471847
}
18481848

18491849
void xmlver2both() {
18501850
REDIRECT;
18511851
const char * const argv[] = {"cppcheck", "--xml", "--xml-version=2", "file.cpp"};
18521852
ASSERT_EQUALS_ENUM(CmdLineParser::Result::Success, parser->parseFromArgs(4, argv));
1853-
ASSERT(settings->xml);
1853+
ASSERT_EQUALS_ENUM(Settings::OutputFormat::xml, settings->outputFormat);
18541854
ASSERT_EQUALS(2, settings->xml_version);
18551855
}
18561856

18571857
void xmlver2both2() {
18581858
REDIRECT;
18591859
const char * const argv[] = {"cppcheck", "--xml-version=2", "--xml", "file.cpp"};
18601860
ASSERT_EQUALS_ENUM(CmdLineParser::Result::Success, parser->parseFromArgs(4, argv));
1861-
ASSERT(settings->xml);
1861+
ASSERT_EQUALS_ENUM(Settings::OutputFormat::xml, settings->outputFormat);
18621862
ASSERT_EQUALS(2, settings->xml_version);
18631863
}
18641864

0 commit comments

Comments
 (0)