Skip to content

Commit 6545172

Browse files
committed
Revert "Add a dynamic rule enable/disable system"
This reverts commit 231b486. There was regressions reported in tools/generate_and_run_more_tests.sh.
1 parent 231b486 commit 6545172

3 files changed

Lines changed: 20 additions & 71 deletions

File tree

cli/cmdlineparser.cpp

Lines changed: 9 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -641,68 +641,43 @@ bool CmdLineParser::ParseFromArgs(int argc, const char* const argv[])
641641
else if (std::strncmp(argv[i], "--rule=", 7) == 0) {
642642
Settings::Rule rule;
643643
rule.pattern = 7 + argv[i];
644-
_settings->rules[rule.id] = rule;
644+
_settings->rules.push_back(rule);
645645
}
646646

647647
// Rule file
648648
else if (std::strncmp(argv[i], "--rule-file=", 12) == 0) {
649649
tinyxml2::XMLDocument doc;
650650
if (doc.LoadFile(12+argv[i]) == tinyxml2::XML_NO_ERROR) {
651-
const tinyxml2::XMLElement *node = doc.FirstChildElement();
651+
tinyxml2::XMLElement *node = doc.FirstChildElement();
652652
for (; node && strcmp(node->Value(), "rule") == 0; node = node->NextSiblingElement()) {
653653
Settings::Rule rule;
654654

655-
const tinyxml2::XMLElement *tokenlist = node->FirstChildElement("tokenlist");
655+
tinyxml2::XMLElement *tokenlist = node->FirstChildElement("tokenlist");
656656
if (tokenlist)
657657
rule.tokenlist = tokenlist->GetText();
658658

659-
const tinyxml2::XMLElement *pattern = node->FirstChildElement("pattern");
659+
tinyxml2::XMLElement *pattern = node->FirstChildElement("pattern");
660660
if (pattern) {
661661
rule.pattern = pattern->GetText();
662662
}
663663

664-
const tinyxml2::XMLElement *message = node->FirstChildElement("message");
664+
tinyxml2::XMLElement *message = node->FirstChildElement("message");
665665
if (message) {
666-
const tinyxml2::XMLElement *severity = message->FirstChildElement("severity");
666+
tinyxml2::XMLElement *severity = message->FirstChildElement("severity");
667667
if (severity)
668668
rule.severity = severity->GetText();
669669

670-
const tinyxml2::XMLElement *id = message->FirstChildElement("id");
670+
tinyxml2::XMLElement *id = message->FirstChildElement("id");
671671
if (id)
672672
rule.id = id->GetText();
673673

674-
const tinyxml2::XMLElement *summary = message->FirstChildElement("summary");
674+
tinyxml2::XMLElement *summary = message->FirstChildElement("summary");
675675
if (summary)
676676
rule.summary = summary->GetText() ? summary->GetText() : "";
677677
}
678678

679-
tinyxml2::XMLElement *state = node->FirstChildElement("state");
680-
if (state) {
681-
std::string rule_state = state->GetText();
682-
if (rule_state == "enabled")
683-
rule.enabled = true;
684-
else if (rule_state == "disabled")
685-
rule.enabled = false;
686-
else {
687-
std::string msg("cppcheck: error: unrecognized rule state: \"");
688-
msg += rule_state;
689-
msg += "\". Supported states: disable, enable.";
690-
PrintMessage(msg);
691-
}
692-
}
693-
694-
tinyxml2::XMLElement *disabled = node->FirstChildElement("disable");
695-
if (disabled) {
696-
rule.disable_rules = disabled->GetText();
697-
}
698-
699-
tinyxml2::XMLElement *enabled = node->FirstChildElement("enable");
700-
if (enabled) {
701-
rule.enable_rules = enabled->GetText();
702-
}
703-
704679
if (!rule.pattern.empty())
705-
_settings->rules[rule.id] = rule;
680+
_settings->rules.push_back(rule);
706681
}
707682
}
708683
}

lib/cppcheck.cpp

Lines changed: 9 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -168,8 +168,8 @@ unsigned int CppCheck::processFile(const std::string& filename, std::istream& fi
168168
}
169169

170170
// Run rules on this code
171-
for (std::map<std::string, Settings::Rule>::const_iterator it = _settings.rules.begin(); it != _settings.rules.end(); ++it) {
172-
if (it->second.enabled && it->second.tokenlist == "define") {
171+
for (std::list<Settings::Rule>::const_iterator it = _settings.rules.begin(); it != _settings.rules.end(); ++it) {
172+
if (it->tokenlist == "define") {
173173
Tokenizer tokenizer2(&_settings, this);
174174
std::istringstream istr2(filedata);
175175
tokenizer2.list.createTokens(istr2, filename);
@@ -320,8 +320,8 @@ bool CppCheck::checkFile(const std::string &code, const char FileName[], std::se
320320
_tokenizer.setTimerResults(&S_timerResults);
321321
try {
322322
// Execute rules for "raw" code
323-
for (std::map<std::string, Settings::Rule>::const_iterator it = _settings.rules.begin(); it != _settings.rules.end(); ++it) {
324-
if (it->second.enabled && it->second.tokenlist == "raw") {
323+
for (std::list<Settings::Rule>::const_iterator it = _settings.rules.begin(); it != _settings.rules.end(); ++it) {
324+
if (it->tokenlist == "raw") {
325325
Tokenizer tokenizer2(&_settings, this);
326326
std::istringstream istr(code);
327327
tokenizer2.list.createTokens(istr, FileName);
@@ -439,8 +439,8 @@ void CppCheck::executeRules(const std::string &tokenlist, const Tokenizer &token
439439
#ifdef HAVE_RULES
440440
// Are there rules to execute?
441441
bool isrule = false;
442-
for (std::map<std::string, Settings::Rule>::const_iterator it = _settings.rules.begin(); it != _settings.rules.end(); ++it) {
443-
if (it->second.enabled && it->second.tokenlist == tokenlist)
442+
for (std::list<Settings::Rule>::const_iterator it = _settings.rules.begin(); it != _settings.rules.end(); ++it) {
443+
if (it->tokenlist == tokenlist)
444444
isrule = true;
445445
}
446446

@@ -454,9 +454,9 @@ void CppCheck::executeRules(const std::string &tokenlist, const Tokenizer &token
454454
ostr << " " << tok->str();
455455
const std::string str(ostr.str());
456456

457-
for (std::map<std::string, Settings::Rule>::const_iterator it = _settings.rules.begin(); it != _settings.rules.end(); ++it) {
458-
const Settings::Rule &rule = it->second;
459-
if (rule.pattern.empty() || rule.id.empty() || rule.severity.empty() || rule.tokenlist != tokenlist || !rule.enabled)
457+
for (std::list<Settings::Rule>::const_iterator it = _settings.rules.begin(); it != _settings.rules.end(); ++it) {
458+
const Settings::Rule &rule = *it;
459+
if (rule.pattern.empty() || rule.id.empty() || rule.severity.empty() || rule.tokenlist != tokenlist)
460460
continue;
461461

462462
const char *error = nullptr;
@@ -511,26 +511,6 @@ void CppCheck::executeRules(const std::string &tokenlist, const Tokenizer &token
511511

512512
// Report error
513513
reportErr(errmsg);
514-
515-
// Disable rules that must be disabled
516-
std::istringstream disable(rule.disable_rules);
517-
do {
518-
std::string rule_to_disable;
519-
disable >> rule_to_disable;
520-
if (rule_to_disable != "") {
521-
_settings.rules[rule_to_disable].enabled = false;
522-
}
523-
} while (disable);
524-
525-
// Enable rules that must be enabled
526-
std::istringstream enable(rule.enable_rules);
527-
do {
528-
std::string rule_to_enable;
529-
enable >> rule_to_enable;
530-
if (rule_to_enable != "") {
531-
_settings.rules[rule_to_enable].enabled = true;
532-
}
533-
} while (enable);
534514
}
535515

536516
pcre_free(re);

lib/settings.h

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -218,26 +218,20 @@ class CPPCHECKLIB Settings {
218218
Rule()
219219
: tokenlist("simple") // use simple tokenlist
220220
, id("rule") // default id
221-
, severity("style") // default severity
222-
, disable_rules("") // default disabled rules
223-
, enable_rules("") // default enabled rules
224-
, enabled(true) {
221+
, severity("style") { // default severity
225222
}
226223

227224
std::string tokenlist;
228225
std::string pattern;
229226
std::string id;
230227
std::string severity;
231228
std::string summary;
232-
std::string disable_rules;
233-
std::string enable_rules;
234-
bool enabled;
235229
};
236230

237231
/**
238232
* @brief Extra rules
239233
*/
240-
std::map<std::string, Rule> rules;
234+
std::list<Rule> rules;
241235

242236
/** Is the 'configuration checking' wanted? */
243237
bool checkConfiguration;

0 commit comments

Comments
 (0)