From e8606a5e5a457cf40204164cf8a6eb210e887da8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Mon, 31 Oct 2022 15:04:16 +0100 Subject: [PATCH] let --premium=misra-c-2012 also set --addon=misra. changed addons container to a set --- cli/cmdlineparser.cpp | 7 +++++-- gui/mainwindow.cpp | 2 +- lib/importproject.cpp | 6 ++++-- lib/settings.cpp | 4 ++-- lib/settings.h | 3 ++- 5 files changed, 14 insertions(+), 8 deletions(-) diff --git a/cli/cmdlineparser.cpp b/cli/cmdlineparser.cpp index c6d3665a3..49a970752 100644 --- a/cli/cmdlineparser.cpp +++ b/cli/cmdlineparser.cpp @@ -230,7 +230,7 @@ bool CmdLineParser::parseFromArgs(int argc, const char* const argv[]) } else if (std::strncmp(argv[i], "--addon=", 8) == 0) - mSettings->addons.emplace_back(argv[i]+8); + mSettings->addons.emplace(argv[i]+8); else if (std::strncmp(argv[i],"--addon-python=", 15) == 0) mSettings->addonPython.assign(argv[i]+15); @@ -621,7 +621,10 @@ bool CmdLineParser::parseFromArgs(int argc, const char* const argv[]) else if (std::strncmp(argv[i], "--premium=", 10) == 0 && isCppcheckPremium()) { if (!mSettings->premiumArgs.empty()) mSettings->premiumArgs += " "; - mSettings->premiumArgs += "--" + std::string(argv[i] + 10); + const std::string p(argv[i] + 10); + mSettings->premiumArgs += "--" + p; + if (p == "misra-c-2012") + mSettings->addons.emplace("misra"); } // --project diff --git a/gui/mainwindow.cpp b/gui/mainwindow.cpp index a7147cf68..ca52cdde7 100644 --- a/gui/mainwindow.cpp +++ b/gui/mainwindow.cpp @@ -981,7 +981,7 @@ Settings MainWindow::getCppcheckSettings() json += ", \"args\":[\"" + arg + "\"]"; } json += " }"; - result.addons.push_back(json.toStdString()); + result.addons.emplace(json.toStdString()); } if (isCppcheckPremium()) { diff --git a/lib/importproject.cpp b/lib/importproject.cpp index cb908da8c..48285ff19 100644 --- a/lib/importproject.cpp +++ b/lib/importproject.cpp @@ -1187,8 +1187,10 @@ bool ImportProject::importCppcheckGuiProject(std::istream &istr, Settings *setti guiProject.analyzeAllVsConfigs = node->GetText(); else if (strcmp(node->Name(), CppcheckXml::Parser) == 0) temp.clang = true; - else if (strcmp(node->Name(), CppcheckXml::AddonsElementName) == 0) - temp.addons = readXmlStringList(node, emptyString, CppcheckXml::AddonElementName, nullptr); + else if (strcmp(node->Name(), CppcheckXml::AddonsElementName) == 0) { + const auto& addons = readXmlStringList(node, emptyString, CppcheckXml::AddonElementName, nullptr); + temp.addons.insert(addons.cbegin(), addons.cend()); + } else if (strcmp(node->Name(), CppcheckXml::TagsElementName) == 0) node->Attribute(CppcheckXml::TagElementName); // FIXME: Write some warning else if (strcmp(node->Name(), CppcheckXml::ToolsElementName) == 0) { diff --git a/lib/settings.cpp b/lib/settings.cpp index c2a68e5b1..4256fc334 100644 --- a/lib/settings.cpp +++ b/lib/settings.cpp @@ -98,9 +98,9 @@ void Settings::loadCppcheckCfg() for (const picojson::value &v : obj["addons"].get()) { const std::string &s = v.get(); if (!Path::isAbsolute(s)) - addons.push_back(Path::getPathFromFilename(fileName) + s); + addons.emplace(Path::getPathFromFilename(fileName) + s); else - addons.push_back(s); + addons.emplace(s); } } if (obj.count("suppressions") && obj["suppressions"].is()) { diff --git a/lib/settings.h b/lib/settings.h index 4e6ceb279..1d7b268ea 100644 --- a/lib/settings.h +++ b/lib/settings.h @@ -37,6 +37,7 @@ #include #include #include +#include namespace ValueFlow { class Value; @@ -99,7 +100,7 @@ public: void loadCppcheckCfg(); /** @brief addons, either filename of python/json file or json data */ - std::list addons; + std::unordered_set addons; /** @brief Path to the python interpreter to be used to run addons. */ std::string addonPython;