Skip to content

Commit a25e8fa

Browse files
authored
Settings: made loadCppcheckCfg() static (danmar#6046)
1 parent b11b420 commit a25e8fa

5 files changed

Lines changed: 36 additions & 34 deletions

File tree

cli/cmdlineparser.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1688,7 +1688,7 @@ void CmdLineParser::printHelp() const
16881688

16891689
bool CmdLineParser::isCppcheckPremium() const {
16901690
if (mSettings.cppcheckCfgProductName.empty())
1691-
mSettings.loadCppcheckCfg();
1691+
Settings::loadCppcheckCfg(mSettings, mSettings.supprs);
16921692
return startsWith(mSettings.cppcheckCfgProductName, "Cppcheck Premium");
16931693
}
16941694

@@ -1784,7 +1784,7 @@ bool CmdLineParser::loadAddons(Settings& settings)
17841784

17851785
bool CmdLineParser::loadCppcheckCfg()
17861786
{
1787-
const std::string cfgErr = mSettings.loadCppcheckCfg();
1787+
const std::string cfgErr = Settings::loadCppcheckCfg(mSettings, mSuppressions);
17881788
if (!cfgErr.empty()) {
17891789
mLogger.printError("could not load cppcheck.cfg - " + cfgErr);
17901790
return false;

gui/mainwindow.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ MainWindow::MainWindow(TranslationHandler* th, QSettings* settings) :
122122
{
123123
Settings tempSettings;
124124
tempSettings.exename = QCoreApplication::applicationFilePath().toStdString();
125-
tempSettings.loadCppcheckCfg(); // TODO: how to handle error?
125+
Settings::loadCppcheckCfg(tempSettings, tempSettings.supprs); // TODO: how to handle error?
126126
mCppcheckCfgProductName = QString::fromStdString(tempSettings.cppcheckCfgProductName);
127127
mCppcheckCfgAbout = QString::fromStdString(tempSettings.cppcheckCfgAbout);
128128
}
@@ -978,7 +978,7 @@ QPair<bool,Settings> MainWindow::getCppcheckSettings()
978978
const QString pythonCmd = fromNativePath(mSettings->value(SETTINGS_PYTHON_PATH).toString());
979979

980980
{
981-
const QString cfgErr = QString::fromStdString(result.loadCppcheckCfg());
981+
const QString cfgErr = QString::fromStdString(Settings::loadCppcheckCfg(result, result.supprs));
982982
if (!cfgErr.isEmpty()) {
983983
QMessageBox::critical(this, tr("Error"), tr("Failed to load %1 - %2\n\nAnalysis is aborted.").arg("cppcheck.cfg").arg(cfgErr));
984984
return {false, {}};

lib/settings.cpp

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,9 @@ Settings::Settings()
4141
setCheckLevelNormal();
4242
}
4343

44-
std::string Settings::loadCppcheckCfg()
44+
std::string Settings::loadCppcheckCfg(Settings& settings, Suppressions& suppressions)
4545
{
46+
// TODO: this always needs to be run *after* the Settings has been filled
4647
static const std::string cfgFilename = "cppcheck.cfg";
4748
std::string fileName;
4849
#ifdef FILESDIR
@@ -51,7 +52,8 @@ std::string Settings::loadCppcheckCfg()
5152
#endif
5253
// cppcheck-suppress knownConditionTrueFalse
5354
if (fileName.empty()) {
54-
fileName = Path::getPathFromFilename(exename) + cfgFilename;
55+
// TODO: make sure that exename is set
56+
fileName = Path::getPathFromFilename(settings.exename) + cfgFilename;
5557
if (!Path::isFile(fileName))
5658
return "";
5759
}
@@ -73,7 +75,7 @@ std::string Settings::loadCppcheckCfg()
7375
const auto& v = it->second;
7476
if (!v.is<std::string>())
7577
return "'productName' is not a string";
76-
cppcheckCfgProductName = v.get<std::string>();
78+
settings.cppcheckCfgProductName = v.get<std::string>();
7779
}
7880
}
7981
{
@@ -82,7 +84,7 @@ std::string Settings::loadCppcheckCfg()
8284
const auto& v = it->second;
8385
if (!v.is<std::string>())
8486
return "'about' is not a string";
85-
cppcheckCfgAbout = v.get<std::string>();
87+
settings.cppcheckCfgAbout = v.get<std::string>();
8688
}
8789
}
8890
{
@@ -97,9 +99,9 @@ std::string Settings::loadCppcheckCfg()
9799
return "'addons' array entry is not a string";
98100
const std::string &s = v.get<std::string>();
99101
if (!Path::isAbsolute(s))
100-
addons.emplace(Path::join(Path::getPathFromFilename(fileName), s));
102+
settings.addons.emplace(Path::join(Path::getPathFromFilename(fileName), s));
101103
else
102-
addons.emplace(s);
104+
settings.addons.emplace(s);
103105
}
104106
}
105107
}
@@ -114,7 +116,7 @@ std::string Settings::loadCppcheckCfg()
114116
if (!v.is<std::string>())
115117
return "'suppressions' array entry is not a string";
116118
const std::string &s = v.get<std::string>();
117-
const std::string err = supprs.nomsg.addSuppressionLine(s);
119+
const std::string err = suppressions.nomsg.addSuppressionLine(s);
118120
if (!err.empty())
119121
return "could not parse suppression '" + s + "' - " + err;
120122
}
@@ -126,7 +128,7 @@ std::string Settings::loadCppcheckCfg()
126128
const auto& v = it->second;
127129
if (!v.is<bool>())
128130
return "'safety' is not a bool";
129-
safety = safety || v.get<bool>();
131+
settings.safety = settings.safety || v.get<bool>();
130132
}
131133
}
132134

lib/settings.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ class CPPCHECKLIB WARN_UNUSED Settings {
9999
public:
100100
Settings();
101101

102-
std::string loadCppcheckCfg();
102+
static std::string loadCppcheckCfg(Settings& settings, Suppressions& suppressions);
103103

104104
static std::pair<std::string, std::string> getNameAndVersion(const std::string& productName);
105105

test/testsettings.cpp

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -95,119 +95,119 @@ class TestSettings : public TestFixture {
9595
{
9696
{
9797
Settings s;
98-
ASSERT_EQUALS("", s.loadCppcheckCfg());
98+
ASSERT_EQUALS("", Settings::loadCppcheckCfg(s, s.supprs));
9999
}
100100
{
101101
Settings s;
102102
ScopedFile file("cppcheck.cfg",
103103
"{}\n");
104-
ASSERT_EQUALS("", s.loadCppcheckCfg());
104+
ASSERT_EQUALS("", Settings::loadCppcheckCfg(s, s.supprs));
105105
}
106106
{
107107
Settings s;
108108
ScopedFile file("cppcheck.cfg",
109109
"{\n");
110-
ASSERT_EQUALS("not a valid JSON - syntax error at line 2 near: ", s.loadCppcheckCfg());
110+
ASSERT_EQUALS("not a valid JSON - syntax error at line 2 near: ", Settings::loadCppcheckCfg(s, s.supprs));
111111
}
112112
{
113113
Settings s;
114114
ScopedFile file("cppcheck.cfg",
115115
R"({"productName": ""}\n)");
116-
ASSERT_EQUALS("", s.loadCppcheckCfg());
116+
ASSERT_EQUALS("", Settings::loadCppcheckCfg(s, s.supprs));
117117
ASSERT_EQUALS("", s.cppcheckCfgProductName);
118118
}
119119
{
120120
Settings s;
121121
ScopedFile file("cppcheck.cfg",
122122
R"({"productName": "product"}\n)");
123-
ASSERT_EQUALS("", s.loadCppcheckCfg());
123+
ASSERT_EQUALS("", Settings::loadCppcheckCfg(s, s.supprs));
124124
ASSERT_EQUALS("product", s.cppcheckCfgProductName);
125125
}
126126
{
127127
Settings s;
128128
ScopedFile file("cppcheck.cfg",
129129
R"({"productName": 1}\n)");
130-
ASSERT_EQUALS("'productName' is not a string", s.loadCppcheckCfg());
130+
ASSERT_EQUALS("'productName' is not a string", Settings::loadCppcheckCfg(s, s.supprs));
131131
}
132132
{
133133
Settings s;
134134
ScopedFile file("cppcheck.cfg",
135135
R"({"about": ""}\n)");
136-
ASSERT_EQUALS("", s.loadCppcheckCfg());
136+
ASSERT_EQUALS("", Settings::loadCppcheckCfg(s, s.supprs));
137137
ASSERT_EQUALS("", s.cppcheckCfgAbout);
138138
}
139139
{
140140
Settings s;
141141
ScopedFile file("cppcheck.cfg",
142142
R"({"about": "about"}\n)");
143-
ASSERT_EQUALS("", s.loadCppcheckCfg());
143+
ASSERT_EQUALS("", Settings::loadCppcheckCfg(s, s.supprs));
144144
ASSERT_EQUALS("about", s.cppcheckCfgAbout);
145145
}
146146
{
147147
Settings s;
148148
ScopedFile file("cppcheck.cfg",
149149
R"({"about": 1}\n)");
150-
ASSERT_EQUALS("'about' is not a string", s.loadCppcheckCfg());
150+
ASSERT_EQUALS("'about' is not a string", Settings::loadCppcheckCfg(s, s.supprs));
151151
}
152152
{
153153
Settings s;
154154
ScopedFile file("cppcheck.cfg",
155155
R"({"addons": []}\n)");
156-
ASSERT_EQUALS("", s.loadCppcheckCfg());
156+
ASSERT_EQUALS("", Settings::loadCppcheckCfg(s, s.supprs));
157157
ASSERT_EQUALS(0, s.addons.size());
158158
}
159159
{
160160
Settings s;
161161
ScopedFile file("cppcheck.cfg",
162162
R"({"addons": 1}\n)");
163-
ASSERT_EQUALS("'addons' is not an array", s.loadCppcheckCfg());
163+
ASSERT_EQUALS("'addons' is not an array", Settings::loadCppcheckCfg(s, s.supprs));
164164
}
165165
{
166166
Settings s;
167167
ScopedFile file("cppcheck.cfg",
168168
R"({"addons": ["addon"]}\n)");
169-
ASSERT_EQUALS("", s.loadCppcheckCfg());
169+
ASSERT_EQUALS("", Settings::loadCppcheckCfg(s, s.supprs));
170170
ASSERT_EQUALS(1, s.addons.size());
171171
ASSERT_EQUALS("addon", *s.addons.cbegin());
172172
}
173173
{
174174
Settings s;
175175
ScopedFile file("cppcheck.cfg",
176176
R"({"addons": [1]}\n)");
177-
ASSERT_EQUALS("'addons' array entry is not a string", s.loadCppcheckCfg());
177+
ASSERT_EQUALS("'addons' array entry is not a string", Settings::loadCppcheckCfg(s, s.supprs));
178178
}
179179
{
180180
Settings s;
181181
ScopedFile file("cppcheck.cfg",
182182
R"({"addons": []}\n)");
183-
ASSERT_EQUALS("", s.loadCppcheckCfg());
183+
ASSERT_EQUALS("", Settings::loadCppcheckCfg(s, s.supprs));
184184
ASSERT_EQUALS(0, s.addons.size());
185185
}
186186
{
187187
Settings s;
188188
ScopedFile file("cppcheck.cfg",
189189
R"({"suppressions": 1}\n)");
190-
ASSERT_EQUALS("'suppressions' is not an array", s.loadCppcheckCfg());
190+
ASSERT_EQUALS("'suppressions' is not an array", Settings::loadCppcheckCfg(s, s.supprs));
191191
}
192192
{
193193
Settings s;
194194
ScopedFile file("cppcheck.cfg",
195195
R"({"suppressions": ["id"]}\n)");
196-
ASSERT_EQUALS("", s.loadCppcheckCfg());
196+
ASSERT_EQUALS("", Settings::loadCppcheckCfg(s, s.supprs));
197197
ASSERT_EQUALS(1, s.supprs.nomsg.getSuppressions().size());
198198
ASSERT_EQUALS("id", s.supprs.nomsg.getSuppressions().cbegin()->errorId);
199199
}
200200
{
201201
Settings s;
202202
ScopedFile file("cppcheck.cfg",
203203
R"({"suppressions": [""]}\n)");
204-
ASSERT_EQUALS("could not parse suppression '' - Failed to add suppression. No id.", s.loadCppcheckCfg());
204+
ASSERT_EQUALS("could not parse suppression '' - Failed to add suppression. No id.", Settings::loadCppcheckCfg(s, s.supprs));
205205
}
206206
{
207207
Settings s;
208208
ScopedFile file("cppcheck.cfg",
209209
R"({"suppressions": [1]}\n)");
210-
ASSERT_EQUALS("'suppressions' array entry is not a string", s.loadCppcheckCfg());
210+
ASSERT_EQUALS("'suppressions' array entry is not a string", Settings::loadCppcheckCfg(s, s.supprs));
211211
}
212212

213213
// TODO: test with FILESDIR
@@ -220,23 +220,23 @@ class TestSettings : public TestFixture {
220220
Settings s;
221221
s.safety = false;
222222
ScopedFile file("cppcheck.cfg", "{}");
223-
ASSERT_EQUALS("", s.loadCppcheckCfg());
223+
ASSERT_EQUALS("", Settings::loadCppcheckCfg(s, s.supprs));
224224
ASSERT_EQUALS(false, s.safety);
225225
}
226226

227227
{
228228
Settings s;
229229
s.safety = true;
230230
ScopedFile file("cppcheck.cfg", "{\"safety\": false}");
231-
ASSERT_EQUALS("", s.loadCppcheckCfg());
231+
ASSERT_EQUALS("", Settings::loadCppcheckCfg(s, s.supprs));
232232
ASSERT_EQUALS(true, s.safety);
233233
}
234234

235235
{
236236
Settings s;
237237
s.safety = false;
238238
ScopedFile file("cppcheck.cfg", "{\"safety\": true}");
239-
ASSERT_EQUALS("", s.loadCppcheckCfg());
239+
ASSERT_EQUALS("", Settings::loadCppcheckCfg(s, s.supprs));
240240
ASSERT_EQUALS(true, s.safety);
241241
}
242242
}

0 commit comments

Comments
 (0)