Skip to content

Commit a7e9e68

Browse files
authored
fix #13362: Misra report on command line (#7096)
1 parent aa6500a commit a7e9e68

32 files changed

+1239
-931
lines changed

Makefile

Lines changed: 126 additions & 126 deletions
Large diffs are not rendered by default.

cli/cmdlineparser.cpp

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1231,6 +1231,28 @@ CmdLineParser::Result CmdLineParser::parseFromArgs(int argc, const char* const a
12311231
mSettings.reportProgress = tmp;
12321232
}
12331233

1234+
else if (std::strncmp(argv[i], "--report-type=", 14) == 0) {
1235+
const std::string typeStr = argv[i] + 14;
1236+
if (typeStr == "normal") {
1237+
mSettings.reportType = ReportType::normal;
1238+
} else if (typeStr == "autosar") {
1239+
mSettings.reportType = ReportType::autosar;
1240+
} else if (typeStr == "cert-c-2016") {
1241+
mSettings.reportType = ReportType::certC;
1242+
} else if (typeStr == "cert-cpp-2016") {
1243+
mSettings.reportType = ReportType::certCpp;
1244+
} else if (typeStr == "misra-c-2012" || typeStr == "misra-c-2023") {
1245+
mSettings.reportType = ReportType::misraC;
1246+
} else if (typeStr == "misra-cpp-2008") {
1247+
mSettings.reportType = ReportType::misraCpp2008;
1248+
} else if (typeStr == "misra-cpp-2023") {
1249+
mSettings.reportType = ReportType::misraCpp2023;
1250+
} else {
1251+
mLogger.printError("Unknown report type \'" + typeStr + "\'");
1252+
return Result::Fail;
1253+
}
1254+
}
1255+
12341256
// Rule given at command line
12351257
else if (std::strncmp(argv[i], "--rule=", 7) == 0) {
12361258
#ifdef HAVE_RULES
@@ -1828,6 +1850,16 @@ void CmdLineParser::printHelp() const
18281850
" currently only possible to apply the base paths to\n"
18291851
" files that are on a lower level in the directory tree.\n"
18301852
" --report-progress Report progress messages while checking a file (single job only).\n"
1853+
" --report-type=<type> Add guideline and classification fields for specified coding standard.\n"
1854+
" The available report types are:\n"
1855+
" * normal Default, only show cppcheck error ID and severity\n"
1856+
" * autosar Autosar\n"
1857+
" * cert-c-2016 Cert C 2016\n"
1858+
" * cert-cpp-2016 Cert C++ 2016\n"
1859+
" * misra-c-2012 Misra C 2012\n"
1860+
" * misra-c-2023 Misra C 2023\n"
1861+
" * misra-cpp-2008 Misra C++ 2008\n"
1862+
" * misra-cpp-2023 Misra C++ 2023\n"
18311863
" --rule=<rule> Match regular expression.\n"
18321864
" --rule-file=<file> Use given rule file. For more information, see:\n"
18331865
" http://sourceforge.net/projects/cppcheck/files/Articles/\n"

cli/cppcheckexecutor.cpp

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -249,6 +249,7 @@ namespace {
249249
public:
250250
explicit StdLogger(const Settings& settings)
251251
: mSettings(settings)
252+
, mGuidelineMapping(createGuidelineMapping(settings.reportType))
252253
{
253254
if (!mSettings.outputFile.empty()) {
254255
mErrorOutput = new std::ofstream(settings.outputFile);
@@ -342,6 +343,11 @@ namespace {
342343
* SARIF report generator
343344
*/
344345
SarifReport mSarifReport;
346+
347+
/**
348+
* Coding standard guideline mapping
349+
*/
350+
std::map<std::string, std::string> mGuidelineMapping;
345351
};
346352
}
347353

@@ -626,12 +632,17 @@ void StdLogger::reportErr(const ErrorMessage &msg)
626632
if (!mSettings.emitDuplicates && !mShownErrors.insert(msg.toString(mSettings.verbose)).second)
627633
return;
628634

635+
ErrorMessage msgCopy = msg;
636+
msgCopy.guideline = getGuideline(msgCopy.id, mSettings.reportType,
637+
mGuidelineMapping, msgCopy.severity);
638+
msgCopy.classification = getClassification(msgCopy.guideline, mSettings.reportType);
639+
629640
if (mSettings.outputFormat == Settings::OutputFormat::sarif)
630-
mSarifReport.addFinding(msg);
641+
mSarifReport.addFinding(msgCopy);
631642
else if (mSettings.xml)
632-
reportErr(msg.toXML());
643+
reportErr(msgCopy.toXML());
633644
else
634-
reportErr(msg.toString(mSettings.verbose, mSettings.templateFormat, mSettings.templateLocation));
645+
reportErr(msgCopy.toString(mSettings.verbose, mSettings.templateFormat, mSettings.templateLocation));
635646
}
636647

637648
/**

gui/common.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@
5252

5353
// Report type
5454
#define SETTINGS_REPORT_TYPE "Report type"
55-
enum class ReportType : std::uint8_t { normal=0, autosar=1, certC=2, certCpp=3, misraC=4, misraCpp2008=5, misraCpp2023=6 };
55+
enum class ReportType : std::uint8_t;
5656

5757
// Show * states
5858
#define SETTINGS_SHOW_STYLE "Show style"

gui/cppcheck_de.ts

Lines changed: 42 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -2235,67 +2235,67 @@ Options:
22352235
<translation type="unfinished"></translation>
22362236
</message>
22372237
<message>
2238-
<location filename="resultstree.cpp" line="227"/>
2238+
<location filename="resultstree.cpp" line="132"/>
22392239
<source>File</source>
22402240
<translation type="unfinished">Datei</translation>
22412241
</message>
22422242
<message>
2243-
<location filename="resultstree.cpp" line="228"/>
2243+
<location filename="resultstree.cpp" line="133"/>
22442244
<source>Line</source>
22452245
<translation type="unfinished">Zeile</translation>
22462246
</message>
22472247
<message>
2248-
<location filename="resultstree.cpp" line="229"/>
2248+
<location filename="resultstree.cpp" line="134"/>
22492249
<source>Severity</source>
22502250
<translation type="unfinished">Schweregrad</translation>
22512251
</message>
22522252
<message>
2253-
<location filename="resultstree.cpp" line="230"/>
2253+
<location filename="resultstree.cpp" line="135"/>
22542254
<source>Classification</source>
22552255
<translation type="unfinished"></translation>
22562256
</message>
22572257
<message>
2258-
<location filename="resultstree.cpp" line="231"/>
2258+
<location filename="resultstree.cpp" line="136"/>
22592259
<source>Level</source>
22602260
<translation type="unfinished"></translation>
22612261
</message>
22622262
<message>
2263-
<location filename="resultstree.cpp" line="232"/>
2263+
<location filename="resultstree.cpp" line="137"/>
22642264
<source>Inconclusive</source>
22652265
<translation type="unfinished">Unklar</translation>
22662266
</message>
22672267
<message>
2268-
<location filename="resultstree.cpp" line="233"/>
2268+
<location filename="resultstree.cpp" line="138"/>
22692269
<source>Summary</source>
22702270
<translation type="unfinished">Zusammenfassung</translation>
22712271
</message>
22722272
<message>
2273-
<location filename="resultstree.cpp" line="234"/>
2273+
<location filename="resultstree.cpp" line="139"/>
22742274
<source>Id</source>
22752275
<translation type="unfinished">Id</translation>
22762276
</message>
22772277
<message>
2278-
<location filename="resultstree.cpp" line="235"/>
2278+
<location filename="resultstree.cpp" line="140"/>
22792279
<source>Guideline</source>
22802280
<translation type="unfinished"></translation>
22812281
</message>
22822282
<message>
2283-
<location filename="resultstree.cpp" line="236"/>
2283+
<location filename="resultstree.cpp" line="141"/>
22842284
<source>Rule</source>
22852285
<translation type="unfinished"></translation>
22862286
</message>
22872287
<message>
2288-
<location filename="resultstree.cpp" line="237"/>
2288+
<location filename="resultstree.cpp" line="142"/>
22892289
<source>Since date</source>
22902290
<translation type="unfinished">Seit Datum</translation>
22912291
</message>
22922292
<message>
2293-
<location filename="resultstree.cpp" line="238"/>
2293+
<location filename="resultstree.cpp" line="143"/>
22942294
<source>Tags</source>
22952295
<translation type="unfinished"></translation>
22962296
</message>
22972297
<message>
2298-
<location filename="resultstree.cpp" line="239"/>
2298+
<location filename="resultstree.cpp" line="144"/>
22992299
<source>CWE</source>
23002300
<translation type="unfinished"></translation>
23012301
</message>
@@ -2342,93 +2342,93 @@ Options:
23422342
<translation type="vanished">Zusammenfassung</translation>
23432343
</message>
23442344
<message>
2345-
<location filename="resultstree.cpp" line="374"/>
2345+
<location filename="resultstree.cpp" line="260"/>
23462346
<source>Undefined file</source>
23472347
<translation>Undefinierte Datei</translation>
23482348
</message>
23492349
<message>
2350-
<location filename="resultstree.cpp" line="865"/>
2350+
<location filename="resultstree.cpp" line="751"/>
23512351
<source>Copy</source>
23522352
<translation>Kopieren</translation>
23532353
</message>
23542354
<message>
2355-
<location filename="resultstree.cpp" line="1058"/>
2355+
<location filename="resultstree.cpp" line="944"/>
23562356
<source>Could not find file:</source>
23572357
<translation>Kann Datei nicht finden:</translation>
23582358
</message>
23592359
<message>
2360-
<location filename="resultstree.cpp" line="1062"/>
2360+
<location filename="resultstree.cpp" line="948"/>
23612361
<source>Please select the folder &apos;%1&apos;</source>
23622362
<translation>Bitte wählen Sie den Ordner &apos;%1&apos;</translation>
23632363
</message>
23642364
<message>
2365-
<location filename="resultstree.cpp" line="1063"/>
2365+
<location filename="resultstree.cpp" line="949"/>
23662366
<source>Select Directory &apos;%1&apos;</source>
23672367
<translation>Wähle Verzeichnis &apos;%1&apos;</translation>
23682368
</message>
23692369
<message>
2370-
<location filename="resultstree.cpp" line="1065"/>
2370+
<location filename="resultstree.cpp" line="951"/>
23712371
<source>Please select the directory where file is located.</source>
23722372
<translation>Bitte wählen Sie das Verzeichnis, wo sich die Datei befindet</translation>
23732373
</message>
23742374
<message>
2375-
<location filename="resultstree.cpp" line="574"/>
2375+
<location filename="resultstree.cpp" line="460"/>
23762376
<source>debug</source>
23772377
<translation>Debug</translation>
23782378
</message>
23792379
<message>
2380-
<location filename="resultstree.cpp" line="500"/>
2380+
<location filename="resultstree.cpp" line="386"/>
23812381
<source>note</source>
23822382
<translation>Anmerkung</translation>
23832383
</message>
23842384
<message>
2385-
<location filename="resultstree.cpp" line="864"/>
2385+
<location filename="resultstree.cpp" line="750"/>
23862386
<source>Recheck</source>
23872387
<translation>Erneut prüfen</translation>
23882388
</message>
23892389
<message>
2390-
<location filename="resultstree.cpp" line="866"/>
2390+
<location filename="resultstree.cpp" line="752"/>
23912391
<source>Hide</source>
23922392
<translation>Verstecken</translation>
23932393
</message>
23942394
<message>
2395-
<location filename="resultstree.cpp" line="867"/>
2395+
<location filename="resultstree.cpp" line="753"/>
23962396
<source>Hide all with id</source>
23972397
<translation>Verstecke alle mit gleicher ID</translation>
23982398
</message>
23992399
<message>
2400-
<location filename="resultstree.cpp" line="886"/>
2400+
<location filename="resultstree.cpp" line="772"/>
24012401
<source>Suppress selected id(s)</source>
24022402
<translation>Ausgewählte ID(s) unterdrücken</translation>
24032403
</message>
24042404
<message>
2405-
<location filename="resultstree.cpp" line="868"/>
2405+
<location filename="resultstree.cpp" line="754"/>
24062406
<source>Open containing folder</source>
24072407
<translation>Übergeordneten Ordner öffnen</translation>
24082408
</message>
24092409
<message>
2410-
<location filename="resultstree.cpp" line="577"/>
2410+
<location filename="resultstree.cpp" line="463"/>
24112411
<source>internal</source>
24122412
<translation type="unfinished"></translation>
24132413
</message>
24142414
<message>
2415-
<location filename="resultstree.cpp" line="907"/>
2415+
<location filename="resultstree.cpp" line="793"/>
24162416
<source>Tag</source>
24172417
<translation>Tag</translation>
24182418
</message>
24192419
<message>
2420-
<location filename="resultstree.cpp" line="909"/>
2420+
<location filename="resultstree.cpp" line="795"/>
24212421
<source>No tag</source>
24222422
<translation>Kein Tag</translation>
24232423
</message>
24242424
<message>
2425-
<location filename="resultstree.cpp" line="940"/>
2426-
<location filename="resultstree.cpp" line="954"/>
2425+
<location filename="resultstree.cpp" line="826"/>
2426+
<location filename="resultstree.cpp" line="840"/>
24272427
<source>Cppcheck</source>
24282428
<translation>Cppcheck</translation>
24292429
</message>
24302430
<message>
2431-
<location filename="resultstree.cpp" line="941"/>
2431+
<location filename="resultstree.cpp" line="827"/>
24322432
<source>No editor application configured.
24332433

24342434
Configure the editor application for Cppcheck in preferences/Applications.</source>
@@ -2437,7 +2437,7 @@ Configure the editor application for Cppcheck in preferences/Applications.</sour
24372437
Konfigurieren Sie diese unter Einstellungen/Anwendungen.</translation>
24382438
</message>
24392439
<message>
2440-
<location filename="resultstree.cpp" line="955"/>
2440+
<location filename="resultstree.cpp" line="841"/>
24412441
<source>No default editor application selected.
24422442

24432443
Please select the default editor application in preferences/Applications.</source>
@@ -2446,12 +2446,12 @@ Please select the default editor application in preferences/Applications.</sourc
24462446
Bitte wählen Sie eine Standardanwendung unter Einstellungen/Anwendungen.</translation>
24472447
</message>
24482448
<message>
2449-
<location filename="resultstree.cpp" line="981"/>
2449+
<location filename="resultstree.cpp" line="867"/>
24502450
<source>Could not find the file!</source>
24512451
<translation>Datei konnte nicht gefunden werden!</translation>
24522452
</message>
24532453
<message>
2454-
<location filename="resultstree.cpp" line="1044"/>
2454+
<location filename="resultstree.cpp" line="930"/>
24552455
<source>Could not start %1
24562456

24572457
Please check the application path and parameters are correct.</source>
@@ -2460,7 +2460,7 @@ Please check the application path and parameters are correct.</source>
24602460
Bitte überprüfen Sie ob der Pfad und die Parameter der Anwendung richtig eingestellt sind.</translation>
24612461
</message>
24622462
<message>
2463-
<location filename="resultstree.cpp" line="1066"/>
2463+
<location filename="resultstree.cpp" line="952"/>
24642464
<source>Select Directory</source>
24652465
<translation>Wähle Verzeichnis</translation>
24662466
</message>
@@ -2477,32 +2477,32 @@ Bitte überprüfen Sie ob der Pfad und die Parameter der Anwendung richtig einge
24772477
<translation type="vanished">Seit Datum</translation>
24782478
</message>
24792479
<message>
2480-
<location filename="resultstree.cpp" line="556"/>
2480+
<location filename="resultstree.cpp" line="442"/>
24812481
<source>style</source>
24822482
<translation>Stil</translation>
24832483
</message>
24842484
<message>
2485-
<location filename="resultstree.cpp" line="559"/>
2485+
<location filename="resultstree.cpp" line="445"/>
24862486
<source>error</source>
24872487
<translation>Fehler</translation>
24882488
</message>
24892489
<message>
2490-
<location filename="resultstree.cpp" line="562"/>
2490+
<location filename="resultstree.cpp" line="448"/>
24912491
<source>warning</source>
24922492
<translation>Warnung</translation>
24932493
</message>
24942494
<message>
2495-
<location filename="resultstree.cpp" line="565"/>
2495+
<location filename="resultstree.cpp" line="451"/>
24962496
<source>performance</source>
24972497
<translation>Performance</translation>
24982498
</message>
24992499
<message>
2500-
<location filename="resultstree.cpp" line="568"/>
2500+
<location filename="resultstree.cpp" line="454"/>
25012501
<source>portability</source>
25022502
<translation>Portabilität</translation>
25032503
</message>
25042504
<message>
2505-
<location filename="resultstree.cpp" line="571"/>
2505+
<location filename="resultstree.cpp" line="457"/>
25062506
<source>information</source>
25072507
<translation>Information</translation>
25082508
</message>

0 commit comments

Comments
 (0)