Refactoring: Parse --enable values in Settings class
This commit is contained in:
parent
79c8f3dc16
commit
f5c81429cb
|
@ -84,7 +84,7 @@ static bool autodealloc(const Token * const C, const Token * const tokens)
|
||||||
|
|
||||||
void CheckExceptionSafety::unsafeNew()
|
void CheckExceptionSafety::unsafeNew()
|
||||||
{
|
{
|
||||||
if (_settings->enableId != "*" && _settings->enableId.find(",exceptNew,") == std::string::npos)
|
if (!_settings->isEnabled("exceptNew"))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// Inspect initializer lists..
|
// Inspect initializer lists..
|
||||||
|
@ -197,7 +197,7 @@ void CheckExceptionSafety::unsafeNew()
|
||||||
|
|
||||||
void CheckExceptionSafety::realloc()
|
void CheckExceptionSafety::realloc()
|
||||||
{
|
{
|
||||||
if (_settings->enableId != "*" && _settings->enableId.find(",exceptRealloc,") == std::string::npos)
|
if (!_settings->isEnabled("exceptRealloc"))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
for (const Token *tok = _tokenizer->tokens(); tok; tok = tok->next())
|
for (const Token *tok = _tokenizer->tokens(); tok; tok = tok->next())
|
||||||
|
|
|
@ -29,7 +29,6 @@
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <map>
|
|
||||||
#include <stdexcept>
|
#include <stdexcept>
|
||||||
|
|
||||||
#ifdef __GNUC__
|
#ifdef __GNUC__
|
||||||
|
@ -99,7 +98,7 @@ void CppCheck::parseFromArgs(int argc, const char* const argv[])
|
||||||
|
|
||||||
// Show all messages
|
// Show all messages
|
||||||
else if (strcmp(argv[i], "-a") == 0 || strcmp(argv[i], "--all") == 0)
|
else if (strcmp(argv[i], "-a") == 0 || strcmp(argv[i], "--all") == 0)
|
||||||
_settings._showAll = true;
|
_settings.addEnabled("possibleError");
|
||||||
|
|
||||||
// Only print something when there are errors
|
// Only print something when there are errors
|
||||||
else if (strcmp(argv[i], "-q") == 0 || strcmp(argv[i], "--quiet") == 0)
|
else if (strcmp(argv[i], "-q") == 0 || strcmp(argv[i], "--quiet") == 0)
|
||||||
|
@ -107,7 +106,7 @@ void CppCheck::parseFromArgs(int argc, const char* const argv[])
|
||||||
|
|
||||||
// Checking coding style
|
// Checking coding style
|
||||||
else if (strcmp(argv[i], "-s") == 0 || strcmp(argv[i], "--style") == 0)
|
else if (strcmp(argv[i], "-s") == 0 || strcmp(argv[i], "--style") == 0)
|
||||||
_settings._checkCodingStyle = true;
|
_settings.addEnabled("style");
|
||||||
|
|
||||||
// Filter errors
|
// Filter errors
|
||||||
else if (strcmp(argv[i], "--suppressions") == 0)
|
else if (strcmp(argv[i], "--suppressions") == 0)
|
||||||
|
@ -137,10 +136,7 @@ void CppCheck::parseFromArgs(int argc, const char* const argv[])
|
||||||
|
|
||||||
// Check if there are unused functions
|
// Check if there are unused functions
|
||||||
else if (strcmp(argv[i], "--unused-functions") == 0)
|
else if (strcmp(argv[i], "--unused-functions") == 0)
|
||||||
{
|
_settings.addEnabled("unusedFunctions");
|
||||||
if (_settings.enableId != "*")
|
|
||||||
_settings.enableId += ",unusedFunctions,";
|
|
||||||
}
|
|
||||||
|
|
||||||
// Append userdefined code to checked source code
|
// Append userdefined code to checked source code
|
||||||
else if (strncmp(argv[i], "--append=", 9) == 0)
|
else if (strncmp(argv[i], "--append=", 9) == 0)
|
||||||
|
@ -161,29 +157,18 @@ void CppCheck::parseFromArgs(int argc, const char* const argv[])
|
||||||
|
|
||||||
|
|
||||||
else if (strcmp(argv[i], "--enable") == 0)
|
else if (strcmp(argv[i], "--enable") == 0)
|
||||||
{
|
_settings.addEnabled("");
|
||||||
_settings.enableId = "*";
|
|
||||||
_settings._showAll = true;
|
|
||||||
_settings._checkCodingStyle = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
else if (strncmp(argv[i], "--enable=", 9) == 0)
|
else if (strncmp(argv[i], "--enable=", 9) == 0)
|
||||||
{
|
{
|
||||||
if (_settings.enableId != "*")
|
std::string s(9 + argv[i]);
|
||||||
{
|
if (s[0] == '\"')
|
||||||
std::string s(9 + argv[i]);
|
s.erase(0, 1);
|
||||||
if (s[0] == '\"')
|
std::string::size_type pos = s.find("\"");
|
||||||
s[0] = ',';
|
if (pos != std::string::npos)
|
||||||
std::string::size_type pos = s.find("\"");
|
s.erase(pos, 1);
|
||||||
if (pos != std::string::npos)
|
|
||||||
s.erase(pos, 1);
|
|
||||||
_settings.enableId += "," + s + ",";
|
|
||||||
|
|
||||||
if (_settings.enableId.find(",style,") != std::string::npos)
|
_settings.addEnabled(s);
|
||||||
_settings._checkCodingStyle = true;
|
|
||||||
if (_settings.enableId.find(",possibleError,") != std::string::npos)
|
|
||||||
_settings._showAll = true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// --error-exitcode=1
|
// --error-exitcode=1
|
||||||
|
@ -335,9 +320,9 @@ void CppCheck::parseFromArgs(int argc, const char* const argv[])
|
||||||
pathnames.push_back(argv[i]);
|
pathnames.push_back(argv[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_settings.enableId.find(",unusedFunctions,") != std::string::npos && _settings._jobs > 1)
|
if (_settings.isEnabled("unusedFunctions") && _settings._jobs > 1)
|
||||||
{
|
{
|
||||||
throw std::runtime_error("cppcheck: error: the unusedFunctions check can't be used with -j option.");
|
reportOut("unusedFunctions check can't be used with -j option, so it was disabled.");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pathnames.size() > 0)
|
if (pathnames.size() > 0)
|
||||||
|
@ -495,7 +480,7 @@ unsigned int CppCheck::check()
|
||||||
|
|
||||||
// This generates false positives - especially for libraries
|
// This generates false positives - especially for libraries
|
||||||
_settings._verbose = false;
|
_settings._verbose = false;
|
||||||
if (_settings.enableId != "*" && _settings.enableId.find(",unusedFunctions,") != std::string::npos)
|
if (_settings.isEnabled("unusedFunctions") && _settings._jobs == 1)
|
||||||
{
|
{
|
||||||
_errout.str("");
|
_errout.str("");
|
||||||
if (_settings._errorsOnly == false)
|
if (_settings._errorsOnly == false)
|
||||||
|
@ -555,7 +540,7 @@ void CppCheck::checkFile(const std::string &code, const char FileName[])
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (_settings.enableId != "*" || _settings.enableId.find(",unusedFunctions,") != std::string::npos)
|
if (_settings.isEnabled("unusedFunctions") && _settings._jobs == 1)
|
||||||
_checkUnusedFunctions.parseTokens(_tokenizer);
|
_checkUnusedFunctions.parseTokens(_tokenizer);
|
||||||
|
|
||||||
// call all "runSimplifiedChecks" in all registered Check classes
|
// call all "runSimplifiedChecks" in all registered Check classes
|
||||||
|
|
|
@ -113,6 +113,44 @@ bool Settings::isSuppressed(const std::string &errorId, const std::string &file,
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Settings::addEnabled(const std::string &str)
|
||||||
|
{
|
||||||
|
if (str.length() == 0)
|
||||||
|
{
|
||||||
|
_enabled["*"] = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
std::string::size_type prevPos = 0;
|
||||||
|
std::string::size_type pos = 0;
|
||||||
|
while ((pos = str.find_first_of(",", pos)) != std::string::npos)
|
||||||
|
{
|
||||||
|
if (prevPos != pos)
|
||||||
|
_enabled[str.substr(prevPos, pos-prevPos)] = true;
|
||||||
|
|
||||||
|
++pos;
|
||||||
|
prevPos = pos;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (prevPos < str.length())
|
||||||
|
_enabled[str.substr(prevPos, pos-prevPos)] = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isEnabled("style"))
|
||||||
|
_checkCodingStyle = true;
|
||||||
|
if (isEnabled("possibleError"))
|
||||||
|
_showAll = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Settings::isEnabled(const std::string &str) const
|
||||||
|
{
|
||||||
|
if (_enabled.find("*") != _enabled.end() ||
|
||||||
|
_enabled.find(str) != _enabled.end())
|
||||||
|
return true;
|
||||||
|
else
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
void Settings::addAutoAllocClass(const std::string &name)
|
void Settings::addAutoAllocClass(const std::string &name)
|
||||||
{
|
{
|
||||||
_autoDealloc.insert(name);
|
_autoDealloc.insert(name);
|
||||||
|
|
|
@ -46,6 +46,8 @@ private:
|
||||||
/** List of error which the user doesn't want to see. */
|
/** List of error which the user doesn't want to see. */
|
||||||
std::map<std::string, std::map<std::string, std::list<int> > > _suppressions;
|
std::map<std::string, std::map<std::string, std::list<int> > > _suppressions;
|
||||||
|
|
||||||
|
/** enable extra checks by id */
|
||||||
|
std::map<std::string, bool> _enabled;
|
||||||
public:
|
public:
|
||||||
Settings();
|
Settings();
|
||||||
virtual ~Settings();
|
virtual ~Settings();
|
||||||
|
@ -119,7 +121,22 @@ public:
|
||||||
std::string append() const;
|
std::string append() const;
|
||||||
|
|
||||||
/** enable extra checks by id */
|
/** enable extra checks by id */
|
||||||
std::string enableId;
|
//std::string enableId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns true if given id is in the list of
|
||||||
|
* enabled extra checks. See addEnabled()
|
||||||
|
* @param str id for the extra check, e.g. "style"
|
||||||
|
* @return true if the check is enabled.
|
||||||
|
*/
|
||||||
|
bool isEnabled(const std::string &str) const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Enable extra checks by id. See isEnabled()
|
||||||
|
* @param str single id or list of id values to be enabled
|
||||||
|
* or empty string to enable all. e.g. "style,possibleError"
|
||||||
|
*/
|
||||||
|
void addEnabled(const std::string &str);
|
||||||
};
|
};
|
||||||
|
|
||||||
/// @}
|
/// @}
|
||||||
|
|
|
@ -53,8 +53,7 @@ private:
|
||||||
|
|
||||||
// Check char variable usage..
|
// Check char variable usage..
|
||||||
Settings settings;
|
Settings settings;
|
||||||
settings._checkCodingStyle = true;
|
settings.addEnabled("");
|
||||||
settings.enableId = "*";
|
|
||||||
CheckExceptionSafety checkExceptionSafety(&tokenizer, &settings, this);
|
CheckExceptionSafety checkExceptionSafety(&tokenizer, &settings, this);
|
||||||
checkExceptionSafety.runSimplifiedChecks(&tokenizer, &settings, this);
|
checkExceptionSafety.runSimplifiedChecks(&tokenizer, &settings, this);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue