Fix #3510 (Improve error message for --suppressions-list)

http://sourceforge.net/apps/trac/cppcheck/ticket/3510
Print additional info to error message if we suspect that multiple files were given.
This commit is contained in:
Reijo Tomperi 2012-01-12 22:21:51 +02:00
parent 34105cb17e
commit da09adc583
4 changed files with 50 additions and 6 deletions

View File

@ -16,6 +16,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
#include <algorithm>
#include <iostream> #include <iostream>
#include <sstream> #include <sstream>
#include <fstream> #include <fstream>
@ -178,6 +179,15 @@ bool CmdLineParser::ParseFromArgs(int argc, const char* const argv[])
std::string message("cppcheck: Couldn't open the file: \""); std::string message("cppcheck: Couldn't open the file: \"");
message += std::string(filename); message += std::string(filename);
message += "\"."; message += "\".";
if (count(filename.begin(), filename.end(), ',') > 0 ||
count(filename.begin(), filename.end(), '.') > 1) {
// If user tried to pass multiple files (we can only guess that)
// e.g. like this: --suppressions-list=a.txt,b.txt
// print more detailed error message to tell user how he can solve the problem
message += "\nIf you want to pass two files, you can do it e.g. like this:";
message += "\n cppcheck --suppressions-list=a.txt --suppressions-list=b.txt file.cpp";
}
PrintMessage(message); PrintMessage(message);
return false; return false;
} }

View File

@ -60,7 +60,7 @@ public:
if (selindex >= 0 && unselindex == -1) if (selindex >= 0 && unselindex == -1)
return Qt::Checked; return Qt::Checked;
if (selindex >= 0 && unselindex >= 0 && if (selindex >= 0 && unselindex >= 0 &&
selected[selindex].size() > unselected[unselindex].size()) selected[selindex].size() > unselected[unselindex].size())
return Qt::Checked; return Qt::Checked;
return Qt::Unchecked; return Qt::Unchecked;

View File

@ -50,6 +50,17 @@ public:
output << _out.str(); output << _out.str();
} }
/** Return what would be printed to cout. See also clearOutput() */
std::string getOutput() {
return _out.str();
}
/** Normally called after getOutput() to prevent same text to be returned
twice. */
void clearOutput() {
_out.str("");
}
private: private:
std::stringstream _out; std::stringstream _out;
std::stringstream _err; std::stringstream _err;
@ -58,5 +69,7 @@ private:
}; };
#define REDIRECT RedirectOutputError redir; #define REDIRECT RedirectOutputError redir;
#define GET_REDIRECT_OUTPUT redir.getOutput()
#define CLEAR_REDIRECT_OUTPUT redir.clearOutput()
#endif #endif

View File

@ -665,12 +665,33 @@ private:
} }
void suppressionsNoFile() { void suppressionsNoFile() {
// TODO: Fails because there is no suppr.txt file!
REDIRECT; REDIRECT;
const char *argv[] = {"cppcheck", "--suppressions-list=", "file.cpp"}; {
Settings settings; CLEAR_REDIRECT_OUTPUT;
CmdLineParser parser(&settings); const char *argv[] = {"cppcheck", "--suppressions-list=", "file.cpp"};
TODO_ASSERT_EQUALS(true, false, parser.ParseFromArgs(3, argv)); Settings settings;
CmdLineParser parser(&settings);
ASSERT_EQUALS(false, parser.ParseFromArgs(3, argv));
ASSERT_EQUALS(false, GET_REDIRECT_OUTPUT.find("If you want to pass two files") != std::string::npos);
}
{
CLEAR_REDIRECT_OUTPUT;
const char *argv[] = {"cppcheck", "--suppressions-list=a.suppr,b.suppr", "file.cpp"};
Settings settings;
CmdLineParser parser(&settings);
ASSERT_EQUALS(false, parser.ParseFromArgs(3, argv));
ASSERT_EQUALS(true, GET_REDIRECT_OUTPUT.find("If you want to pass two files") != std::string::npos);
}
{
CLEAR_REDIRECT_OUTPUT;
const char *argv[] = {"cppcheck", "--suppressions-list=a.suppr b.suppr", "file.cpp"};
Settings settings;
CmdLineParser parser(&settings);
ASSERT_EQUALS(false, parser.ParseFromArgs(3, argv));
ASSERT_EQUALS(true, GET_REDIRECT_OUTPUT.find("If you want to pass two files") != std::string::npos);
}
} }
void suppressionSingle() { void suppressionSingle() {