Skip to content

Commit 8604d63

Browse files
committed
fixed #6969 - added CLI option --exitcode-suppress
1 parent db9f970 commit 8604d63

File tree

4 files changed

+59
-0
lines changed

4 files changed

+59
-0
lines changed

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
@@ -1811,6 +1820,9 @@ void CmdLineParser::printHelp() const
18111820
" provided. Note that your operating system can modify\n"
18121821
" this value, e.g. '256' can become '0'.\n"
18131822
" --errorlist Print a list of all the error messages in XML format.\n"
1823+
" --exitcode-suppress=<spec>\n"
1824+
" Used to specify an error ID which should not result in\n"
1825+
" a non-zero exitcode."
18141826
" --exitcode-suppressions=<file>\n"
18151827
" Used when certain messages should be displayed but\n"
18161828
" 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: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,3 +21,6 @@ Infrastructure & dependencies:
2121

2222
Other:
2323
- Make it possible to specify the regular expression engine using the `engine` element in a rule XML.
24+
- Added CLI option `--exitcode-suppress` to specify an error ID which should not result in a non-zero exitcode.
25+
-
26+
-

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);
@@ -1986,6 +1990,35 @@ class TestCmdlineParser : public TestFixture {
19861990
ASSERT_EQUALS(true, supprs->nomsg.isSuppressed(errorMessage("noConstructor", "file.cpp", 1U)));
19871991
}
19881992

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

0 commit comments

Comments
 (0)