Skip to content

Commit 15473e3

Browse files
committed
fixed #6969 - added CLI option --exitcode-suppress
1 parent c0d6206 commit 15473e3

4 files changed

Lines changed: 57 additions & 0 deletions

File tree

cli/cmdlineparser.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -756,6 +756,15 @@ CmdLineParser::Result CmdLineParser::parseFromArgs(int argc, const char* const a
756756
}
757757
}
758758

759+
else if (std::strncmp(argv[i], "--exitcode-suppress=", 20) == 0) {
760+
const std::string suppression = argv[i]+20;
761+
const std::string errmsg(mSuppressions.nofail.addSuppressionLine(suppression));
762+
if (!errmsg.empty()) {
763+
mLogger.printError(errmsg);
764+
return Result::Fail;
765+
}
766+
}
767+
759768
// Filter errors
760769
else if (std::strncmp(argv[i], "--exitcode-suppressions=", 24) == 0) {
761770
// exitcode-suppressions=filename.txt
@@ -1795,6 +1804,9 @@ void CmdLineParser::printHelp() const
17951804
" provided. Note that your operating system can modify\n"
17961805
" this value, e.g. '256' can become '0'.\n"
17971806
" --errorlist Print a list of all the error messages in XML format.\n"
1807+
" --exitcode-suppress=<spec>\n"
1808+
" Used to specify an error ID which should not result in\n"
1809+
" a non-zero exitcode."
17981810
" --exitcode-suppressions=<file>\n"
17991811
" Used when certain messages should be displayed but\n"
18001812
" should not cause a non-zero exitcode.\n"

man/cppcheck.1.xml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,9 @@ man(1), man(7), http://www.tldp.org/HOWTO/Man-Page/
117117
<arg choice="opt">
118118
<option>--errorlist</option>
119119
</arg>
120+
<arg choice="opt">
121+
<option>--exitcode-suppress=&lt;spec&gt;</option>
122+
</arg>
120123
<arg choice="opt">
121124
<option>--exitcode-suppressions=&lt;file&gt;</option>
122125
</arg>
@@ -343,6 +346,14 @@ Example: '-UDEBUG'</para>
343346
<para>Print a list of all possible error messages in XML format.</para>
344347
</listitem>
345348
</varlistentry>
349+
<varlistentry>
350+
<term>
351+
<option>--exitcode-suppress=&lt;spec&gt;</option>
352+
</term>
353+
<listitem>
354+
<para>Used to specify an error ID which should not result in a non-zero exitcode.</para>
355+
</listitem>
356+
</varlistentry>
346357
<varlistentry>
347358
<term>
348359
<option>--exitcode-suppressions=&lt;file&gt;</option>

releasenotes.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,5 @@ Infrastructure & dependencies:
2020
-
2121

2222
Other:
23+
- Added CLI option `--exitcode-suppress` to specify an error ID which should not result in a non-zero exitcode.
2324
-

test/testcmdlineparser.cpp

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -304,6 +304,10 @@ class TestCmdlineParser : public TestFixture {
304304
TEST_CASE(suppressSingleFile);
305305
TEST_CASE(suppressTwo);
306306
TEST_CASE(suppressTwoSeparate);
307+
TEST_CASE(exitcodeSuppressSingle);
308+
TEST_CASE(exitcodeSuppressSingleFile);
309+
TEST_CASE(exitcodeSuppressTwo);
310+
TEST_CASE(exitcodeSuppressTwoSeparate);
307311
TEST_CASE(templates);
308312
TEST_CASE(templatesGcc);
309313
TEST_CASE(templatesVs);
@@ -1985,6 +1989,35 @@ class TestCmdlineParser : public TestFixture {
19851989
ASSERT_EQUALS(true, supprs->nomsg.isSuppressed(errorMessage("noConstructor", "file.cpp", 1U)));
19861990
}
19871991

1992+
void exitcodeSuppressSingle() {
1993+
REDIRECT;
1994+
const char * const argv[] = {"cppcheck", "--exitcode-suppress=uninitvar", "file.cpp"};
1995+
ASSERT_EQUALS_ENUM(CmdLineParser::Result::Success, parseFromArgs(argv));
1996+
ASSERT_EQUALS(true, supprs->nofail.isSuppressed(errorMessage("uninitvar", "file.cpp", 1)));
1997+
}
1998+
1999+
void exitcodeSuppressSingleFile() {
2000+
REDIRECT;
2001+
const char * const argv[] = {"cppcheck", "--exitcode-suppress=uninitvar:file.cpp", "file.cpp"};
2002+
ASSERT_EQUALS_ENUM(CmdLineParser::Result::Success, parseFromArgs(argv));
2003+
ASSERT_EQUALS(true, supprs->nofail.isSuppressed(errorMessage("uninitvar", "file.cpp", 1U)));
2004+
}
2005+
2006+
void exitcodeSuppressTwo() {
2007+
REDIRECT;
2008+
const char * const argv[] = {"cppcheck", "--exitcode-suppress=uninitvar,noConstructor", "file.cpp"};
2009+
ASSERT_EQUALS_ENUM(CmdLineParser::Result::Fail, parseFromArgs(argv));
2010+
ASSERT_EQUALS("cppcheck: error: Failed to add suppression. Invalid id \"uninitvar,noConstructor\"\n", logger->str());
2011+
}
2012+
2013+
void exitcodeSuppressTwoSeparate() {
2014+
REDIRECT;
2015+
const char * const argv[] = {"cppcheck", "--exitcode-suppress=uninitvar", "--exitcode-suppress=noConstructor", "file.cpp"};
2016+
ASSERT_EQUALS_ENUM(CmdLineParser::Result::Success, parseFromArgs(argv));
2017+
ASSERT_EQUALS(true, supprs->nofail.isSuppressed(errorMessage("uninitvar", "file.cpp", 1U)));
2018+
ASSERT_EQUALS(true, supprs->nofail.isSuppressed(errorMessage("noConstructor", "file.cpp", 1U)));
2019+
}
2020+
19882021
void templates() {
19892022
REDIRECT;
19902023
const char * const argv[] = {"cppcheck", "--template={file}:{line},{severity},{id},{message}", "--template-location={file}:{line}:{column} {info}", "file.cpp"};

0 commit comments

Comments
 (0)