Skip to content

Commit ec6c253

Browse files
committed
csfilter: match checker as regex in MsgFilter
... in order to ease defining filters that apply to multiple checkers
1 parent 7a56fbb commit ec6c253

File tree

1 file changed

+33
-36
lines changed

1 file changed

+33
-36
lines changed

src/csfilter.cc

Lines changed: 33 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -42,22 +42,26 @@ inline std::string regexReplaceWrap(
4242
MsgFilter* MsgFilter::self_;
4343

4444
struct MsgReplace {
45-
const RE regex;
45+
const RE reChecker;
46+
const RE reMsg;
4647
const std::string replaceWith;
4748

48-
MsgReplace(const std::string &regex_, const std::string &rpl) :
49-
regex(regex_),
50-
replaceWith(rpl)
49+
MsgReplace(
50+
const std::string &reChecker,
51+
const std::string &reMsg,
52+
const std::string &replaceWith) :
53+
reChecker(reChecker),
54+
reMsg(reMsg),
55+
replaceWith(replaceWith)
5156
{
5257
}
5358
};
5459

55-
typedef std::vector<MsgReplace *> TRegexList;
56-
typedef std::map<const std::string, TRegexList> TMsgFilterMap;
60+
typedef std::vector<MsgReplace *> TMsgReplaceList;
5761

5862
struct MsgFilter::Private {
5963
bool ignorePath = false;
60-
TMsgFilterMap msgFilterMap;
64+
TMsgReplaceList repList;
6165
TSubstMap fileSubsts;
6266

6367
const std::string strKrn = "^[a-zA-Z+]+";
@@ -70,12 +74,15 @@ struct MsgFilter::Private {
7074
const RE reTmpCleaner = RE("(.*)");
7175

7276
void addMsgFilter(
73-
const std::string &checker,
77+
std::string checker,
7478
const std::string &regexp,
7579
const std::string &replacement = "")
7680
{
77-
struct MsgReplace *rpl = new MsgReplace(regexp, replacement);
78-
msgFilterMap[checker].push_back(rpl);
81+
if (checker.empty())
82+
// match everything
83+
checker = ".*";
84+
85+
this->repList.push_back(new MsgReplace(checker, regexp, replacement));
7986
}
8087
};
8188

@@ -115,21 +122,17 @@ MsgFilter::MsgFilter():
115122
" on line [0-9]+\\.$", " on line NNNN.");
116123

117124
// pylint reports, either raw, or prospector-wrapped
118-
const std::vector<std::string> pylintCheckers= {
119-
"PROSPECTOR_WARNING",
120-
"PYLINT_WARNING"
121-
};
122-
for (const std::string &checker : pylintCheckers) {
123-
// "Too many lines in module (1152/1000)" etc.
124-
d->addMsgFilter(checker, " \\([0-9]+/[0-9]+\\)$", "");
125-
126-
// "... Redefining name 'desc' from outer scope (line 10)" etc.
127-
d->addMsgFilter(checker, " \\((?:imported )?line [0-9]+\\)$", "");
128-
129-
// ".. method already defined line 199"
130-
d->addMsgFilter(checker, " method already defined line [0-9]+$",
131-
" method already defined");
132-
}
125+
const std::string pylintCheckers = "PROSPECTOR_WARNING|PYLINT_WARNING";
126+
127+
// "Too many lines in module (1152/1000)" etc.
128+
d->addMsgFilter(pylintCheckers, " \\([0-9]+/[0-9]+\\)$", "");
129+
130+
// "... Redefining name 'desc' from outer scope (line 10)" etc.
131+
d->addMsgFilter(pylintCheckers, " \\((?:imported )?line [0-9]+\\)$", "");
132+
133+
// ".. method already defined line 199"
134+
d->addMsgFilter(pylintCheckers, " method already defined line [0-9]+$",
135+
" method already defined");
133136

134137
// "__coverity_strcmp" -> "strcmp", etc.
135138
d->addMsgFilter("", "__coverity_", "");
@@ -143,9 +146,8 @@ MsgFilter::MsgFilter():
143146

144147
MsgFilter::~MsgFilter()
145148
{
146-
for (TMsgFilterMap::const_reference item : d->msgFilterMap)
147-
for (struct MsgReplace *rpl : item.second)
148-
delete rpl;
149+
for (struct MsgReplace *rpl : d->repList)
150+
delete rpl;
149151

150152
delete d;
151153
}
@@ -167,14 +169,9 @@ std::string MsgFilter::filterMsg(
167169
const std::string &checker)
168170
{
169171
std::string filtered = msg;
170-
for (const struct MsgReplace *rpl : d->msgFilterMap[checker]) {
171-
filtered = regexReplaceWrap(filtered, rpl->regex, rpl->replaceWith);
172-
}
173-
174-
// these substitutions are common for all checkers
175-
for (const struct MsgReplace *rpl : d->msgFilterMap[""]) {
176-
filtered = regexReplaceWrap(filtered, rpl->regex, rpl->replaceWith);
177-
}
172+
for (const struct MsgReplace *rpl : d->repList)
173+
if (boost::regex_match(checker, rpl->reChecker))
174+
filtered = regexReplaceWrap(filtered, rpl->reMsg, rpl->replaceWith);
178175

179176
#if DEBUG_SUBST > 1
180177
std::cerr << "filterMsg: " << filtered << "\n";

0 commit comments

Comments
 (0)