Skip to content

Commit 3dc52dc

Browse files
authored
Fix #14492 (Import checkers for checkers-report from addon json) (danmar#8216)
1 parent 952f81c commit 3dc52dc

File tree

7 files changed

+55
-899
lines changed

7 files changed

+55
-899
lines changed

lib/addoninfo.cpp

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,28 @@ static std::string parseAddonInfo(AddonInfo& addoninfo, const picojson::value &j
114114
}
115115
}
116116

117+
{
118+
const auto it = obj.find("checkers");
119+
if (it != obj.cend()) {
120+
const auto& val = it->second;
121+
if (!val.is<picojson::array>())
122+
return "Loading " + fileName + " failed. 'checkers' must be an array.";
123+
for (const picojson::value &v : val.get<picojson::array>()) {
124+
if (!v.is<picojson::object>())
125+
return "Loading " + fileName + " failed. 'checkers' entry is not an object.";
126+
127+
const picojson::object& checkerObj = v.get<picojson::object>();
128+
if (checkerObj.size() == 1) {
129+
const std::string c = checkerObj.begin()->first;
130+
if (!checkerObj.begin()->second.is<std::string>())
131+
return "Loading " + fileName + " failed. 'checkers' entry requirement is not a string.";
132+
const std::string req = checkerObj.begin()->second.get<std::string>();
133+
addoninfo.checkers.emplace(c, req);
134+
}
135+
}
136+
}
137+
}
138+
117139
{
118140
const auto it = obj.find("executable");
119141
if (it != obj.cend()) {

lib/addoninfo.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
#include "config.h"
2323

2424
#include <string>
25+
#include <map>
2526

2627
struct CPPCHECKLIB AddonInfo {
2728
std::string name;
@@ -31,6 +32,7 @@ struct CPPCHECKLIB AddonInfo {
3132
std::string python; // script interpreter
3233
bool ctu = false;
3334
std::string runScript;
35+
std::map<std::string, std::string> checkers; // checker name and its requirement
3436

3537
std::string getAddonInfo(const std::string &fileName, const std::string &exename, bool debug = false);
3638
};

0 commit comments

Comments
 (0)