Skip to content

Commit d219792

Browse files
committed
csparser: assign per-checker language attribute
1 parent 2c47266 commit d219792

12 files changed

+875
-0
lines changed

csparser.cc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -386,6 +386,7 @@ struct CovParser::Private {
386386
EToken code;
387387
KeyEventDigger keDigger;
388388
AnnotHandler annotHdl;
389+
LangDetector langDetector;
389390

390391
Private(std::istream &input_, std::string fileName_, bool silent_):
391392
lexer(input_),
@@ -568,6 +569,7 @@ bool CovParser::Private::parseNext(Defect *def) {
568569

569570
this->keDigger.initVerbosity(def);
570571
this->annotHdl.handleDef(def);
572+
this->langDetector.inferLangFromChecker(def);
571573

572574
// all OK
573575
return true;

parser-common.cc

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,3 +29,40 @@ int parse_int(const std::string &str, const int fallback) {
2929
return fallback;
3030
}
3131
}
32+
33+
struct LangDetector::Private {
34+
typedef std::map<std::string, std::string> TMap;
35+
TMap langByChecker;
36+
};
37+
38+
LangDetector::LangDetector():
39+
d(new Private)
40+
{
41+
d->langByChecker["CLANG_WARNING"] = "c/c++";
42+
d->langByChecker["COMPILER_WARNING"] = "c/c++";
43+
d->langByChecker["CPPCHECK_WARNING"] = "c/c++";
44+
d->langByChecker["GCC_ANALYZER_WARNING"] = "c/c++";
45+
d->langByChecker["PROSPECTOR_WARNING"] = "python";
46+
d->langByChecker["SHELLCHECK_WARNING"] = "shell";
47+
d->langByChecker["SMATCH_WARNING"] = "c/c++";
48+
}
49+
50+
LangDetector::~LangDetector() {
51+
delete d;
52+
}
53+
54+
void LangDetector::inferLangFromChecker(Defect *pDef, const bool onlyIfMissing)
55+
const
56+
{
57+
if (onlyIfMissing && !pDef->language.empty())
58+
// language already assigned
59+
return;
60+
61+
Private::TMap::const_iterator it = d->langByChecker.find(pDef->checker);
62+
if (d->langByChecker.end() == it)
63+
// not found
64+
return;
65+
66+
// found --> assign from map
67+
pDef->language = it->second;
68+
}

parser-common.hh

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
#ifndef H_GUARD_PARSER_COMMON_H
2121
#define H_GUARD_PARSER_COMMON_H
2222

23+
#include "defect.hh"
24+
2325
#include <string>
2426

2527
#define RE_EVENT_GCC "(?:(?:(?:fatal|internal) )?[a-z][\\[\\]A-Za-z0-9_-]+)"
@@ -28,4 +30,16 @@
2830

2931
int parse_int(const std::string &, int fallback = 0);
3032

33+
class LangDetector {
34+
public:
35+
LangDetector();
36+
~LangDetector();
37+
38+
void inferLangFromChecker(Defect *, bool onlyIfMissing = true) const;
39+
40+
private:
41+
struct Private;
42+
Private *d;
43+
};
44+
3145
#endif /* H_GUARD_PARSER_COMMON_H */

tests/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,7 @@ test_csgrep(csgrep "58-csparser-gcc-analyzer-curl")
178178
test_csgrep(csgrep "59-json-parser-cov-v7-cwe" )
179179
test_csgrep(csgrep "60-gcc-parser-cppcheck-cwe" )
180180
test_csgrep(csgrep "61-json-parser-cov-v7-lang" )
181+
test_csgrep(csgrep "62-csparser-checker-lang" )
181182
test_csparser(csparser-5.8 00)
182183
test_csparser(csparser-5.8 01)
183184
test_csparser(csparser-5.8 02)

tests/csgrep/20-clang-warnings-stdout.txt

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
"defects": [
33
{
44
"checker": "COMPILER_WARNING",
5+
"language": "c/c++",
56
"key_event_idx": 1,
67
"events": [
78
{
@@ -22,6 +23,7 @@
2223
},
2324
{
2425
"checker": "COMPILER_WARNING",
26+
"language": "c/c++",
2527
"key_event_idx": 1,
2628
"events": [
2729
{
@@ -42,6 +44,7 @@
4244
},
4345
{
4446
"checker": "COMPILER_WARNING",
47+
"language": "c/c++",
4548
"key_event_idx": 0,
4649
"events": [
4750
{
@@ -55,6 +58,7 @@
5558
},
5659
{
5760
"checker": "COMPILER_WARNING",
61+
"language": "c/c++",
5862
"key_event_idx": 1,
5963
"events": [
6064
{
@@ -75,6 +79,7 @@
7579
},
7680
{
7781
"checker": "COMPILER_WARNING",
82+
"language": "c/c++",
7883
"key_event_idx": 1,
7984
"events": [
8085
{
@@ -95,6 +100,7 @@
95100
},
96101
{
97102
"checker": "COMPILER_WARNING",
103+
"language": "c/c++",
98104
"key_event_idx": 1,
99105
"events": [
100106
{
@@ -115,6 +121,7 @@
115121
},
116122
{
117123
"checker": "COMPILER_WARNING",
124+
"language": "c/c++",
118125
"key_event_idx": 1,
119126
"events": [
120127
{
@@ -135,6 +142,7 @@
135142
},
136143
{
137144
"checker": "COMPILER_WARNING",
145+
"language": "c/c++",
138146
"key_event_idx": 0,
139147
"events": [
140148
{
@@ -148,6 +156,7 @@
148156
},
149157
{
150158
"checker": "COMPILER_WARNING",
159+
"language": "c/c++",
151160
"key_event_idx": 1,
152161
"events": [
153162
{
@@ -168,6 +177,7 @@
168177
},
169178
{
170179
"checker": "COMPILER_WARNING",
180+
"language": "c/c++",
171181
"key_event_idx": 1,
172182
"events": [
173183
{
@@ -188,6 +198,7 @@
188198
},
189199
{
190200
"checker": "COMPILER_WARNING",
201+
"language": "c/c++",
191202
"key_event_idx": 0,
192203
"events": [
193204
{
@@ -201,6 +212,7 @@
201212
},
202213
{
203214
"checker": "COMPILER_WARNING",
215+
"language": "c/c++",
204216
"key_event_idx": 0,
205217
"events": [
206218
{
@@ -214,6 +226,7 @@
214226
},
215227
{
216228
"checker": "COMPILER_WARNING",
229+
"language": "c/c++",
217230
"key_event_idx": 0,
218231
"events": [
219232
{
@@ -227,6 +240,7 @@
227240
},
228241
{
229242
"checker": "CLANG_WARNING",
243+
"language": "c/c++",
230244
"key_event_idx": 0,
231245
"events": [
232246
{

tests/csgrep/22-compiler-warnings-stdout.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
"defects": [
33
{
44
"checker": "COMPILER_WARNING",
5+
"language": "c/c++",
56
"key_event_idx": 1,
67
"events": [
78
{
@@ -65,6 +66,7 @@
6566
},
6667
{
6768
"checker": "COMPILER_WARNING",
69+
"language": "c/c++",
6870
"key_event_idx": 0,
6971
"events": [
7072
{
@@ -93,6 +95,7 @@
9395
},
9496
{
9597
"checker": "COMPILER_WARNING",
98+
"language": "c/c++",
9699
"key_event_idx": 0,
97100
"events": [
98101
{
@@ -121,6 +124,7 @@
121124
},
122125
{
123126
"checker": "COMPILER_WARNING",
127+
"language": "c/c++",
124128
"key_event_idx": 1,
125129
"events": [
126130
{

tests/csgrep/36-csgrep-json-stdout.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
"defects": [
33
{
44
"checker": "SHELLCHECK_WARNING",
5+
"language": "shell",
56
"key_event_idx": 0,
67
"events": [
78
{

0 commit comments

Comments
 (0)