Skip to content

Commit ebca683

Browse files
committed
CmdLineParser: parse --check-level= like other options with values
1 parent 95b1839 commit ebca683

File tree

2 files changed

+22
-6
lines changed

2 files changed

+22
-6
lines changed

cli/cmdlineparser.cpp

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -471,13 +471,21 @@ CmdLineParser::Result CmdLineParser::parseFromArgs(int argc, const char* const a
471471
else if (std::strcmp(argv[i], "--check-config") == 0)
472472
mSettings.checkConfiguration = true;
473473

474-
// Check code exhaustively
475-
else if (std::strcmp(argv[i], "--check-level=exhaustive") == 0)
476-
mSettings.setCheckLevel(Settings::CheckLevel::exhaustive);
474+
// Check level
475+
else if (std::strncmp(argv[i], "--check-level=", 14) == 0) {
476+
Settings::CheckLevel level = Settings::CheckLevel::normal;
477+
const std::string level_s(argv[i] + 14);
478+
if (level_s == "normal")
479+
level = Settings::CheckLevel::normal;
480+
else if (level_s == "exhaustive")
481+
level = Settings::CheckLevel::exhaustive;
482+
else {
483+
mLogger.printError("unknown '--check-level' value '" + level_s + "'.");
484+
return Result::Fail;
485+
}
477486

478-
// Check code with normal analysis
479-
else if (std::strcmp(argv[i], "--check-level=normal") == 0)
480-
mSettings.setCheckLevel(Settings::CheckLevel::normal);
487+
mSettings.setCheckLevel(level);
488+
}
481489

482490
// Check library definitions
483491
else if (std::strcmp(argv[i], "--check-library") == 0) {

test/testcmdlineparser.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -381,6 +381,7 @@ class TestCmdlineParser : public TestFixture {
381381
TEST_CASE(checkLevelDefault);
382382
TEST_CASE(checkLevelNormal);
383383
TEST_CASE(checkLevelExhaustive);
384+
TEST_CASE(checkLevelUnknown);
384385

385386
TEST_CASE(ignorepaths1);
386387
TEST_CASE(ignorepaths2);
@@ -2526,6 +2527,13 @@ class TestCmdlineParser : public TestFixture {
25262527
ASSERT_EQUALS(256, settings->performanceValueFlowMaxSubFunctionArgs);
25272528
}
25282529

2530+
void checkLevelUnknown() {
2531+
REDIRECT;
2532+
const char * const argv[] = {"cppcheck", "--check-level=default", "file.cpp"};
2533+
ASSERT_EQUALS_ENUM(CmdLineParser::Result::Fail, parser->parseFromArgs(3, argv));
2534+
ASSERT_EQUALS("cppcheck: error: unknown '--check-level' value 'default'.\n", logger->str());
2535+
}
2536+
25292537
void ignorepaths1() {
25302538
REDIRECT;
25312539
const char * const argv[] = {"cppcheck", "-isrc", "file.cpp"};

0 commit comments

Comments
 (0)