Skip to content

Commit 886e306

Browse files
authored
Fix #12798: Add inline supression to projectDialog (#6453)
1 parent 22477ef commit 886e306

10 files changed

+58
-1
lines changed

gui/mainwindow.cpp

+4-1
Original file line numberDiff line numberDiff line change
@@ -1018,6 +1018,8 @@ QPair<bool,Settings> MainWindow::getCppcheckSettings()
10181018
QStringList dirs = mProjectFile->getIncludeDirs();
10191019
addIncludeDirs(dirs, result);
10201020

1021+
result.inlineSuppressions = mProjectFile->getInlineSuppression();
1022+
10211023
const QStringList defines = mProjectFile->getDefines();
10221024
for (const QString& define : defines) {
10231025
if (!result.userDefines.empty())
@@ -1111,6 +1113,8 @@ QPair<bool,Settings> MainWindow::getCppcheckSettings()
11111113
result.setMisraRuleTexts(CheckThread::executeCommand);
11121114
}
11131115
}
1116+
else
1117+
result.inlineSuppressions = mSettings->value(SETTINGS_INLINE_SUPPRESSIONS, false).toBool();
11141118

11151119
// Include directories (and files) are searched in listed order.
11161120
// Global include directories must be added AFTER the per project include
@@ -1135,7 +1139,6 @@ QPair<bool,Settings> MainWindow::getCppcheckSettings()
11351139
result.force = mSettings->value(SETTINGS_CHECK_FORCE, 1).toBool();
11361140
result.xml = false;
11371141
result.jobs = mSettings->value(SETTINGS_CHECK_THREADS, 1).toInt();
1138-
result.inlineSuppressions = mSettings->value(SETTINGS_INLINE_SUPPRESSIONS, false).toBool();
11391142
result.certainty.setEnabled(Certainty::inconclusive, mSettings->value(SETTINGS_INCONCLUSIVE_ERRORS, false).toBool());
11401143
if (!mProjectFile || result.platform.type == Platform::Type::Unspecified)
11411144
result.platform.set((Platform::Type) mSettings->value(SETTINGS_CHECKED_PLATFORM, 0).toInt());

gui/projectfile.cpp

+8
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ void ProjectFile::clear()
7777
mAnalyzeAllVsConfigs = false;
7878
mCheckHeaders = true;
7979
mCheckUnusedTemplates = true;
80+
mInlineSuppression = true;
8081
mMaxCtuDepth = settings.maxCtuDepth;
8182
mMaxTemplateRecursion = settings.maxTemplateRecursion;
8283
mCheckUnknownFunctionReturn.clear();
@@ -143,6 +144,9 @@ bool ProjectFile::read(const QString &filename)
143144
if (xmlReader.name() == QString(CppcheckXml::CheckUnusedTemplatesElementName))
144145
mCheckUnusedTemplates = readBool(xmlReader);
145146

147+
if (xmlReader.name() == QString(CppcheckXml::InlineSuppression))
148+
mInlineSuppression = readBool(xmlReader);
149+
146150
if (xmlReader.name() == QString(CppcheckXml::CheckLevelExhaustiveElementName))
147151
mCheckLevel = CheckLevel::exhaustive;
148152

@@ -873,6 +877,10 @@ bool ProjectFile::write(const QString &filename)
873877
xmlWriter.writeCharacters(bool_to_string(mCheckUnusedTemplates));
874878
xmlWriter.writeEndElement();
875879

880+
xmlWriter.writeStartElement(CppcheckXml::InlineSuppression);
881+
xmlWriter.writeCharacters(bool_to_string(mInlineSuppression));
882+
xmlWriter.writeEndElement();
883+
876884
xmlWriter.writeStartElement(CppcheckXml::MaxCtuDepthElementName);
877885
xmlWriter.writeCharacters(QString::number(mMaxCtuDepth));
878886
xmlWriter.writeEndElement();

gui/projectfile.h

+13
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,14 @@ class ProjectFile : public QObject {
107107
mCheckUnusedTemplates = b;
108108
}
109109

110+
bool getInlineSuppression() const {
111+
return mInlineSuppression;
112+
}
113+
114+
void setInlineSuppression(bool b) {
115+
mInlineSuppression = b;
116+
}
117+
110118
/**
111119
* @brief Get list of include directories.
112120
* @return list of directories.
@@ -557,6 +565,11 @@ class ProjectFile : public QObject {
557565
/** Check code in unused templates */
558566
bool mCheckUnusedTemplates;
559567

568+
/**
569+
* @brief Enable inline suppression.
570+
*/
571+
bool mInlineSuppression;
572+
560573
/**
561574
* @brief List of include directories used to search include files.
562575
*/

gui/projectfile.ui

+7
Original file line numberDiff line numberDiff line change
@@ -746,6 +746,13 @@
746746
</layout>
747747
</widget>
748748
</item>
749+
<item>
750+
<widget class="QCheckBox" name="mInlineSuppressions">
751+
<property name="text">
752+
<string>Enable inline suppressions</string>
753+
</property>
754+
</widget>
755+
</item>
749756
<item>
750757
<spacer name="verticalSpacer_9">
751758
<property name="orientation">

gui/projectfiledialog.cpp

+2
Original file line numberDiff line numberDiff line change
@@ -312,6 +312,7 @@ void ProjectFileDialog::loadFromProjectFile(const ProjectFile *projectFile)
312312
mUI->mCheckLevelNormal->setChecked(true);
313313
mUI->mCheckHeaders->setChecked(projectFile->getCheckHeaders());
314314
mUI->mCheckUnusedTemplates->setChecked(projectFile->getCheckUnusedTemplates());
315+
mUI->mInlineSuppressions->setChecked(projectFile->getInlineSuppression());
315316
mUI->mMaxCtuDepth->setValue(projectFile->getMaxCtuDepth());
316317
mUI->mMaxTemplateRecursion->setValue(projectFile->getMaxTemplateRecursion());
317318
if (projectFile->clangParser)
@@ -435,6 +436,7 @@ void ProjectFileDialog::saveToProjectFile(ProjectFile *projectFile) const
435436
projectFile->setVSConfigurations(getProjectConfigurations());
436437
projectFile->setCheckHeaders(mUI->mCheckHeaders->isChecked());
437438
projectFile->setCheckUnusedTemplates(mUI->mCheckUnusedTemplates->isChecked());
439+
projectFile->setInlineSuppression(mUI->mInlineSuppressions->isChecked());
438440
projectFile->setMaxCtuDepth(mUI->mMaxCtuDepth->value());
439441
projectFile->setMaxTemplateRecursion(mUI->mMaxTemplateRecursion->value());
440442
projectFile->setIncludes(getIncludePaths());

gui/test/projectfile/testprojectfile.cpp

+15
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,21 @@ void TestProjectFile::getAddonFilePath() const
139139
QCOMPARE(ProjectFile::getAddonFilePath(tempdir.path(), filepath), filepath);
140140
}
141141

142+
void TestProjectFile::getInlineSuppressionDefaultValue() const
143+
{
144+
ProjectFile projectFile;
145+
projectFile.setFilename("/some/path/123.cppcheck");
146+
QCOMPARE(projectFile.getInlineSuppression(), true);
147+
}
148+
149+
void TestProjectFile::getInlineSuppression() const
150+
{
151+
ProjectFile projectFile;
152+
projectFile.setFilename("/some/path/123.cppcheck");
153+
projectFile.setInlineSuppression(false);
154+
QCOMPARE(projectFile.getInlineSuppression(), false);
155+
}
156+
142157
void TestProjectFile::getCheckingSuppressionsRelative() const
143158
{
144159
const SuppressionList::Suppression suppression("*", "externals/*");

gui/test/projectfile/testprojectfile.h

+3
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,9 @@ private slots:
3030

3131
void getAddonFilePath() const;
3232

33+
void getInlineSuppressionDefaultValue() const;
34+
void getInlineSuppression() const;
35+
3336
void getCheckingSuppressionsRelative() const;
3437
void getCheckingSuppressionsAbsolute() const;
3538
void getCheckingSuppressionsStar() const;

lib/importproject.cpp

+3
Original file line numberDiff line numberDiff line change
@@ -1221,6 +1221,8 @@ bool ImportProject::importCppcheckGuiProject(std::istream &istr, Settings *setti
12211221
checkLevelExhaustive = true;
12221222
else if (strcmp(node->Name(), CppcheckXml::CheckUnusedTemplatesElementName) == 0)
12231223
temp.checkUnusedTemplates = (strcmp(readSafe(node->GetText(), ""), "true") == 0);
1224+
else if (strcmp(node->Name(), CppcheckXml::InlineSuppression) == 0)
1225+
temp.inlineSuppressions = (strcmp(readSafe(node->GetText(), ""), "true") == 0);
12241226
else if (strcmp(node->Name(), CppcheckXml::MaxCtuDepthElementName) == 0)
12251227
temp.maxCtuDepth = strToInt<int>(readSafe(node->GetText(), "2")); // TODO: bail out when missing?
12261228
else if (strcmp(node->Name(), CppcheckXml::MaxTemplateRecursionElementName) == 0)
@@ -1284,6 +1286,7 @@ bool ImportProject::importCppcheckGuiProject(std::istream &istr, Settings *setti
12841286
settings->checkUnusedTemplates = temp.checkUnusedTemplates;
12851287
settings->maxCtuDepth = temp.maxCtuDepth;
12861288
settings->maxTemplateRecursion = temp.maxTemplateRecursion;
1289+
settings->inlineSuppressions |= temp.inlineSuppressions;
12871290
settings->safeChecks = temp.safeChecks;
12881291

12891292
if (checkLevelExhaustive)

lib/importproject.h

+1
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,7 @@ namespace CppcheckXml {
163163
static constexpr char MaxCtuDepthElementName[] = "max-ctu-depth";
164164
static constexpr char MaxTemplateRecursionElementName[] = "max-template-recursion";
165165
static constexpr char CheckUnknownFunctionReturn[] = "check-unknown-function-return-values";
166+
static constexpr char InlineSuppression[] = "inline-suppression";
166167
static constexpr char ClangTidy[] = "clang-tidy";
167168
static constexpr char Name[] = "name";
168169
static constexpr char VSConfigurationElementName[] = "vs-configurations";

test/testimportproject.cpp

+2
Original file line numberDiff line numberDiff line change
@@ -358,6 +358,7 @@ class TestImportProject : public TestFixture {
358358
" <exclude>\n"
359359
" <path name=\"gui/temp/\"/>\n"
360360
" </exclude>\n"
361+
" <inline-suppression>true</inline-suppression>\n"
361362
" <project-name>test test</project-name>\n"
362363
"</project>\n";
363364
std::istringstream istr(xml);
@@ -368,6 +369,7 @@ class TestImportProject : public TestFixture {
368369
ASSERT_EQUALS("cli/", project.guiProject.pathNames[0]);
369370
ASSERT_EQUALS(1, s.includePaths.size());
370371
ASSERT_EQUALS("lib/", s.includePaths.front());
372+
ASSERT_EQUALS(true, s.inlineSuppressions);
371373
}
372374

373375
void ignorePaths() const {

0 commit comments

Comments
 (0)