Cppcheck: Show single 'too many configurations' message if --enable=information hasn't been used and there are too many configurations.
This commit is contained in:
parent
735069e3a7
commit
bfb82fe3e1
|
@ -195,6 +195,8 @@ int CppCheckExecutor::check(int argc, const char* const argv[])
|
||||||
if (!settings._errorsOnly)
|
if (!settings._errorsOnly)
|
||||||
reportUnmatchedSuppressions(settings.nomsg.getUnmatchedGlobalSuppressions());
|
reportUnmatchedSuppressions(settings.nomsg.getUnmatchedGlobalSuppressions());
|
||||||
|
|
||||||
|
cppCheck.tooManyConfigsError("",0U);
|
||||||
|
|
||||||
if (settings.isEnabled("missingInclude") && Preprocessor::missingIncludeFlag) {
|
if (settings.isEnabled("missingInclude") && Preprocessor::missingIncludeFlag) {
|
||||||
const std::list<ErrorLogger::ErrorMessage::FileLocation> callStack;
|
const std::list<ErrorLogger::ErrorMessage::FileLocation> callStack;
|
||||||
ErrorLogger::ErrorMessage msg(callStack,
|
ErrorLogger::ErrorMessage msg(callStack,
|
||||||
|
|
|
@ -40,7 +40,7 @@ static const char ExtraVersion[] = "";
|
||||||
static TimerResults S_timerResults;
|
static TimerResults S_timerResults;
|
||||||
|
|
||||||
CppCheck::CppCheck(ErrorLogger &errorLogger, bool useGlobalSuppressions)
|
CppCheck::CppCheck(ErrorLogger &errorLogger, bool useGlobalSuppressions)
|
||||||
: _errorLogger(errorLogger), exitcode(0), _useGlobalSuppressions(useGlobalSuppressions)
|
: _errorLogger(errorLogger), exitcode(0), _useGlobalSuppressions(useGlobalSuppressions), tooManyConfigs(false)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -171,46 +171,20 @@ unsigned int CppCheck::processFile(const std::string& filename)
|
||||||
configurations.push_back(_settings.userDefines);
|
configurations.push_back(_settings.userDefines);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_settings.isEnabled("information") && !_settings._force && configurations.size() > _settings._maxConfigs) {
|
if (!_settings._force && configurations.size() > _settings._maxConfigs) {
|
||||||
const std::string fixedpath = Path::toNativeSeparators(filename);
|
if (_settings.isEnabled("information")) {
|
||||||
ErrorLogger::ErrorMessage::FileLocation location;
|
tooManyConfigsError(Path::toNativeSeparators(filename),configurations.size());
|
||||||
location.setfile(fixedpath);
|
} else {
|
||||||
const std::list<ErrorLogger::ErrorMessage::FileLocation> loclist(1, location);
|
tooManyConfigs = true;
|
||||||
std::ostringstream msg;
|
}
|
||||||
msg << "Too many #ifdef configurations - cppcheck will only check " << _settings._maxConfigs << " of " << configurations.size() << ".\n"
|
|
||||||
"The checking of the file will be interrupted because there are too many "
|
|
||||||
"#ifdef configurations. Checking of all #ifdef configurations can be forced "
|
|
||||||
"by --force command line option or from GUI preferences. However that may "
|
|
||||||
"increase the checking time.";
|
|
||||||
ErrorLogger::ErrorMessage errmsg(loclist,
|
|
||||||
Severity::information,
|
|
||||||
msg.str(),
|
|
||||||
"toomanyconfigs",
|
|
||||||
false);
|
|
||||||
|
|
||||||
reportErr(errmsg);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned int checkCount = 0;
|
unsigned int checkCount = 0;
|
||||||
for (std::list<std::string>::const_iterator it = configurations.begin(); it != configurations.end(); ++it) {
|
for (std::list<std::string>::const_iterator it = configurations.begin(); it != configurations.end(); ++it) {
|
||||||
// Check only a few configurations (default 12), after that bail out, unless --force
|
// Check only a few configurations (default 12), after that bail out, unless --force
|
||||||
// was used.
|
// was used.
|
||||||
if (_settings.isEnabled("information") && !_settings._force && checkCount >= _settings._maxConfigs) {
|
if (!_settings._force && ++checkCount > _settings._maxConfigs)
|
||||||
|
|
||||||
const std::string fixedpath = Path::toNativeSeparators(filename);
|
|
||||||
ErrorLogger::ErrorMessage::FileLocation location;
|
|
||||||
location.setfile(fixedpath);
|
|
||||||
std::list<ErrorLogger::ErrorMessage::FileLocation> loclist;
|
|
||||||
loclist.push_back(location);
|
|
||||||
ErrorLogger::ErrorMessage errmsg(loclist,
|
|
||||||
Severity::information,
|
|
||||||
"Interrupted checking because of too many #ifdef configurations.",
|
|
||||||
"toomanyconfigs",
|
|
||||||
false);
|
|
||||||
|
|
||||||
reportInfo(errmsg);
|
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
|
|
||||||
cfg = *it;
|
cfg = *it;
|
||||||
|
|
||||||
|
@ -234,8 +208,6 @@ unsigned int CppCheck::processFile(const std::string& filename)
|
||||||
} else {
|
} else {
|
||||||
checkFile(codeWithoutCfg + appendCode, filename.c_str());
|
checkFile(codeWithoutCfg + appendCode, filename.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
++checkCount;
|
|
||||||
}
|
}
|
||||||
} catch (const std::runtime_error &e) {
|
} catch (const std::runtime_error &e) {
|
||||||
// Exception was thrown when checking this file..
|
// Exception was thrown when checking this file..
|
||||||
|
@ -456,6 +428,46 @@ Settings &CppCheck::settings()
|
||||||
return _settings;
|
return _settings;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CppCheck::tooManyConfigsError(const std::string &file, const std::size_t numberOfConfigurations)
|
||||||
|
{
|
||||||
|
if (!_settings.isEnabled("information") && !tooManyConfigs)
|
||||||
|
return;
|
||||||
|
|
||||||
|
tooManyConfigs = false;
|
||||||
|
|
||||||
|
if (_settings.isEnabled("information") && file.empty())
|
||||||
|
return;
|
||||||
|
|
||||||
|
std::list<ErrorLogger::ErrorMessage::FileLocation> loclist;
|
||||||
|
if (!file.empty()) {
|
||||||
|
ErrorLogger::ErrorMessage::FileLocation location;
|
||||||
|
location.setfile(file);
|
||||||
|
loclist.push_back(location);
|
||||||
|
}
|
||||||
|
|
||||||
|
std::ostringstream msg;
|
||||||
|
msg << "Too many #ifdef configurations - cppcheck only checks " << _settings._maxConfigs;
|
||||||
|
if (numberOfConfigurations > _settings._maxConfigs)
|
||||||
|
msg << " of " << numberOfConfigurations << " configurations. Use --force to check all configurations.\n";
|
||||||
|
if (file.empty())
|
||||||
|
msg << " configurations. Use --force to check all configurations. For more details, use --enable=information.\n";
|
||||||
|
msg << "The checking of the file will be interrupted because there are too many "
|
||||||
|
"#ifdef configurations. Checking of all #ifdef configurations can be forced "
|
||||||
|
"by --force command line option or from GUI preferences. However that may "
|
||||||
|
"increase the checking time.";
|
||||||
|
if (file.empty())
|
||||||
|
msg << " For more details, use --enable=information.";
|
||||||
|
|
||||||
|
|
||||||
|
ErrorLogger::ErrorMessage errmsg(loclist,
|
||||||
|
Severity::information,
|
||||||
|
msg.str(),
|
||||||
|
"toomanyconfigs",
|
||||||
|
false);
|
||||||
|
|
||||||
|
reportErr(errmsg);
|
||||||
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
void CppCheck::reportErr(const ErrorLogger::ErrorMessage &msg)
|
void CppCheck::reportErr(const ErrorLogger::ErrorMessage &msg)
|
||||||
|
@ -534,6 +546,9 @@ void CppCheck::reportStatus(unsigned int /*fileindex*/, unsigned int /*filecount
|
||||||
|
|
||||||
void CppCheck::getErrorMessages()
|
void CppCheck::getErrorMessages()
|
||||||
{
|
{
|
||||||
|
tooManyConfigs = true;
|
||||||
|
tooManyConfigsError("",0U);
|
||||||
|
|
||||||
// call all "getErrorMessages" in all registered Check classes
|
// call all "getErrorMessages" in all registered Check classes
|
||||||
for (std::list<Check *>::iterator it = Check::instances().begin(); it != Check::instances().end(); ++it)
|
for (std::list<Check *>::iterator it = Check::instances().begin(); it != Check::instances().end(); ++it)
|
||||||
(*it)->getErrorMessages(this, &_settings);
|
(*it)->getErrorMessages(this, &_settings);
|
||||||
|
|
|
@ -131,6 +131,8 @@ public:
|
||||||
return _dependencies;
|
return _dependencies;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void tooManyConfigsError(const std::string &file, const std::size_t numberOfConfigurations);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
/** @brief Process one file. */
|
/** @brief Process one file. */
|
||||||
|
@ -189,6 +191,9 @@ private:
|
||||||
unsigned int exitcode;
|
unsigned int exitcode;
|
||||||
|
|
||||||
bool _useGlobalSuppressions;
|
bool _useGlobalSuppressions;
|
||||||
|
|
||||||
|
/** Are there too many configs? */
|
||||||
|
bool tooManyConfigs;
|
||||||
};
|
};
|
||||||
|
|
||||||
/// @}
|
/// @}
|
||||||
|
|
Loading…
Reference in New Issue