diff --git a/cli/cmdlineparser.cpp b/cli/cmdlineparser.cpp index 5ae6a7a1ac4..03841fb3814 100644 --- a/cli/cmdlineparser.cpp +++ b/cli/cmdlineparser.cpp @@ -312,7 +312,7 @@ CmdLineParser::Result CmdLineParser::parseFromArgs(int argc, const char* const a mSettings.exename = Path::getCurrentExecutablePath(argv[0]); // default to --check-level=normal from CLI for now - mSettings.setCheckLevelNormal(); + mSettings.setCheckLevel(Settings::CheckLevel::normal); if (argc <= 1) { printHelp(); @@ -473,11 +473,11 @@ CmdLineParser::Result CmdLineParser::parseFromArgs(int argc, const char* const a // Check code exhaustively else if (std::strcmp(argv[i], "--check-level=exhaustive") == 0) - mSettings.setCheckLevelExhaustive(); + mSettings.setCheckLevel(Settings::CheckLevel::exhaustive); // Check code with normal analysis else if (std::strcmp(argv[i], "--check-level=normal") == 0) - mSettings.setCheckLevelNormal(); + mSettings.setCheckLevel(Settings::CheckLevel::normal); // Check library definitions else if (std::strcmp(argv[i], "--check-library") == 0) { diff --git a/gui/mainwindow.cpp b/gui/mainwindow.cpp index 2e358a1f0e6..5d79794784c 100644 --- a/gui/mainwindow.cpp +++ b/gui/mainwindow.cpp @@ -970,7 +970,7 @@ QPair MainWindow::getCppcheckSettings() result.exename = QCoreApplication::applicationFilePath().toStdString(); // default to --check-level=normal for GUI for now - result.setCheckLevelNormal(); + result.setCheckLevel(Settings::CheckLevel::normal); const bool std = tryLoadLibrary(&result.library, "std.cfg"); if (!std) { @@ -1064,9 +1064,9 @@ QPair MainWindow::getCppcheckSettings() result.maxCtuDepth = mProjectFile->getMaxCtuDepth(); result.maxTemplateRecursion = mProjectFile->getMaxTemplateRecursion(); if (mProjectFile->isCheckLevelExhaustive()) - result.setCheckLevelExhaustive(); + result.setCheckLevel(Settings::CheckLevel::exhaustive); else - result.setCheckLevelNormal(); + result.setCheckLevel(Settings::CheckLevel::normal); result.checkHeaders = mProjectFile->getCheckHeaders(); result.checkUnusedTemplates = mProjectFile->getCheckUnusedTemplates(); result.safeChecks.classes = mProjectFile->safeChecks.classes; diff --git a/lib/importproject.cpp b/lib/importproject.cpp index 64c9a6428eb..e6678831512 100644 --- a/lib/importproject.cpp +++ b/lib/importproject.cpp @@ -1126,7 +1126,7 @@ bool ImportProject::importCppcheckGuiProject(std::istream &istr, Settings *setti Settings temp; // default to --check-level=normal for import for now - temp.setCheckLevelNormal(); + temp.setCheckLevel(Settings::CheckLevel::normal); guiProject.analyzeAllVsConfigs.clear(); @@ -1271,9 +1271,9 @@ bool ImportProject::importCppcheckGuiProject(std::istream &istr, Settings *setti settings->safeChecks = temp.safeChecks; if (checkLevelExhaustive) - settings->setCheckLevelExhaustive(); + settings->setCheckLevel(Settings::CheckLevel::exhaustive); else - settings->setCheckLevelNormal(); + settings->setCheckLevel(Settings::CheckLevel::normal); return true; } diff --git a/lib/settings.cpp b/lib/settings.cpp index d5e226da64d..1940a07ced3 100644 --- a/lib/settings.cpp +++ b/lib/settings.cpp @@ -41,7 +41,7 @@ Settings::Settings() { severity.setEnabled(Severity::error, true); certainty.setEnabled(Certainty::normal, true); - setCheckLevelExhaustive(); + setCheckLevel(Settings::CheckLevel::exhaustive); executor = defaultExecutor(); } @@ -268,21 +268,20 @@ void Settings::loadSummaries() Summaries::loadReturn(buildDir, summaryReturn); } - -void Settings::setCheckLevelExhaustive() -{ - // Checking can take a little while. ~ 10 times slower than normal analysis is OK. - checkLevel = CheckLevel::exhaustive; - performanceValueFlowMaxIfCount = -1; - performanceValueFlowMaxSubFunctionArgs = 256; -} - -void Settings::setCheckLevelNormal() +void Settings::setCheckLevel(CheckLevel level) { - // Checking should finish in reasonable time. - checkLevel = CheckLevel::normal; - performanceValueFlowMaxSubFunctionArgs = 8; - performanceValueFlowMaxIfCount = 100; + if (level == CheckLevel::normal) { + // Checking should finish in reasonable time. + checkLevel = level; + performanceValueFlowMaxSubFunctionArgs = 8; + performanceValueFlowMaxIfCount = 100; + } + else if (level == CheckLevel::exhaustive) { + // Checking can take a little while. ~ 10 times slower than normal analysis is OK. + checkLevel = CheckLevel::exhaustive; + performanceValueFlowMaxIfCount = -1; + performanceValueFlowMaxSubFunctionArgs = 256; + } } // TODO: auto generate these tables diff --git a/lib/settings.h b/lib/settings.h index 03bf0b9530c..2d48464429f 100644 --- a/lib/settings.h +++ b/lib/settings.h @@ -456,15 +456,14 @@ class CPPCHECKLIB WARN_UNUSED Settings { return jobs == 1; } - void setCheckLevelExhaustive(); - void setCheckLevelNormal(); - enum class CheckLevel { normal, exhaustive }; CheckLevel checkLevel = CheckLevel::exhaustive; + void setCheckLevel(CheckLevel level); + using ExecuteCmdFn = std::function,std::string,std::string&)>; void setMisraRuleTexts(const ExecuteCmdFn& executeCommand); void setMisraRuleTexts(const std::string& data); diff --git a/test/fixture.cpp b/test/fixture.cpp index 024bd004327..a4cb9b98caa 100644 --- a/test/fixture.cpp +++ b/test/fixture.cpp @@ -445,13 +445,8 @@ void TestFixture::setTemplateFormat(const std::string &templateFormat) } } -TestFixture::SettingsBuilder& TestFixture::SettingsBuilder::normal() { - settings.setCheckLevelNormal(); - return *this; -} - -TestFixture::SettingsBuilder& TestFixture::SettingsBuilder::exhaustive() { - settings.setCheckLevelExhaustive(); +TestFixture::SettingsBuilder& TestFixture::SettingsBuilder::checkLevel(Settings::CheckLevel level) { + settings.setCheckLevel(level); return *this; } diff --git a/test/fixture.h b/test/fixture.h index 17e076546de..cef34a2ba3e 100644 --- a/test/fixture.h +++ b/test/fixture.h @@ -208,9 +208,7 @@ class TestFixture : public ErrorLogger { return *this; } - SettingsBuilder& exhaustive(); - - SettingsBuilder& normal(); + SettingsBuilder& checkLevel(Settings::CheckLevel level); SettingsBuilder& library(const char lib[]);