Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix #13362: Misra report on command line #7096

Merged
merged 46 commits into from
Jan 27, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
30d5440
add command line option and setting for report-type
ludviggunne Dec 10, 2024
7148104
add classification and guideline fields to ErrorMessage
ludviggunne Dec 10, 2024
eee69e5
set classification and guideline for ErrorMessage
ludviggunne Dec 10, 2024
2699d11
update make dependencies
ludviggunne Dec 10, 2024
dc5b54e
add guidline/classification to xml output
ludviggunne Dec 10, 2024
1652e5a
show classification and guideline in stderr
ludviggunne Dec 11, 2024
ff5f3bf
set guidline/classification for cert c/c++
ludviggunne Dec 11, 2024
d943057
add description for report-type option
ludviggunne Dec 11, 2024
ab45d00
fix warning
ludviggunne Dec 11, 2024
3ef82a5
fix warning
ludviggunne Dec 11, 2024
dbd8abb
use existing split function
ludviggunne Dec 11, 2024
1baccfc
hoist stoi calls
ludviggunne Dec 12, 2024
cae8682
decouple guideline/classification logic from ErrorMessage
ludviggunne Dec 12, 2024
50b90e2
add vector variant of splitString
ludviggunne Dec 12, 2024
2061c60
movec reporttype logic to checkers.*
ludviggunne Dec 12, 2024
914b65f
use library ReportType in GUI
ludviggunne Dec 12, 2024
f3067cc
formatting
ludviggunne Dec 13, 2024
5faf85f
use library getGuideline/getClassification in GUI
ludviggunne Dec 18, 2024
9b013d1
set message guideline/classification in StdLogger::reportErr
ludviggunne Dec 18, 2024
ca160c6
move guideline mapping to library
ludviggunne Dec 18, 2024
0c84359
update cmake dependencies for gui tests
ludviggunne Dec 27, 2024
f7a90f5
add uint8_t base for ReportType
ludviggunne Dec 27, 2024
66271b5
add FALLTHROUGH macro
ludviggunne Dec 27, 2024
09167fc
add cmdlineparser tests
ludviggunne Dec 27, 2024
56a1b58
add errorlogger tests
ludviggunne Dec 27, 2024
78e16a7
add defaultReportType test
ludviggunne Dec 27, 2024
a8e19ad
update cppcheck manual and cli usage
ludviggunne Dec 27, 2024
49fe94a
refactor splitString
ludviggunne Dec 30, 2024
9ee60f6
explicit ReportType values
ludviggunne Dec 30, 2024
c4f6bf4
update releasenotes.txt
ludviggunne Dec 30, 2024
277169a
update .ts files
ludviggunne Jan 5, 2025
e245967
Revert "update .ts files"
ludviggunne Jan 12, 2025
b955c4f
change default template argument for splitString
ludviggunne Jan 18, 2025
d808b30
move guideline/classification functions to errorlogger
ludviggunne Jan 12, 2025
8f6d965
add CPPCHECKLIB to declarations
ludviggunne Jan 19, 2025
78b6a52
remove some unused includes
ludviggunne Jan 19, 2025
a46d10d
fix typo
ludviggunne Jan 20, 2025
5d3650b
revert lib/utils.* changes
ludviggunne Jan 20, 2025
a6f72d6
use forward declarations where possible
ludviggunne Jan 20, 2025
637a487
move guideline mapping to StdLogger
ludviggunne Jan 22, 2025
3319846
move ReportType back to checkers.h, keep functions in errorlogger.h
ludviggunne Jan 24, 2025
1de202e
separate list entries in manual
ludviggunne Jan 25, 2025
8c50f81
separate more list entries in manual
ludviggunne Jan 25, 2025
d33ecbd
remove unused include
ludviggunne Jan 26, 2025
07f3821
update --report-type arguments
ludviggunne Jan 26, 2025
0557358
update *.ts files
ludviggunne Jan 26, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
252 changes: 126 additions & 126 deletions Makefile

Large diffs are not rendered by default.

32 changes: 32 additions & 0 deletions cli/cmdlineparser.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1227,6 +1227,28 @@ CmdLineParser::Result CmdLineParser::parseFromArgs(int argc, const char* const a
mSettings.reportProgress = tmp;
}

else if (std::strncmp(argv[i], "--report-type=", 14) == 0) {
const std::string typeStr = argv[i] + 14;
if (typeStr == "normal") {
mSettings.reportType = ReportType::normal;
} else if (typeStr == "autosar") {
mSettings.reportType = ReportType::autosar;
} else if (typeStr == "cert-c-2016") {
mSettings.reportType = ReportType::certC;
} else if (typeStr == "cert-cpp-2016") {
mSettings.reportType = ReportType::certCpp;
} else if (typeStr == "misra-c-2012" || typeStr == "misra-c-2023") {
mSettings.reportType = ReportType::misraC;
} else if (typeStr == "misra-cpp-2008") {
mSettings.reportType = ReportType::misraCpp2008;
} else if (typeStr == "misra-cpp-2023") {
mSettings.reportType = ReportType::misraCpp2023;
} else {
mLogger.printError("Unknown report type \'" + typeStr + "\'");
return Result::Fail;
}
}

// Rule given at command line
else if (std::strncmp(argv[i], "--rule=", 7) == 0) {
#ifdef HAVE_RULES
Expand Down Expand Up @@ -1824,6 +1846,16 @@ void CmdLineParser::printHelp() const
" currently only possible to apply the base paths to\n"
" files that are on a lower level in the directory tree.\n"
" --report-progress Report progress messages while checking a file (single job only).\n"
" --report-type=<type> Add guideline and classification fields for specified coding standard.\n"
ludviggunne marked this conversation as resolved.
Show resolved Hide resolved
" The available report types are:\n"
" * normal Default, only show cppcheck error ID and severity\n"
" * autosar Autosar\n"
" * cert-c-2016 Cert C 2016\n"
" * cert-cpp-2016 Cert C++ 2016\n"
" * misra-c-2012 Misra C 2012\n"
" * misra-c-2023 Misra C 2023\n"
" * misra-cpp-2008 Misra C++ 2008\n"
" * misra-cpp-2023 Misra C++ 2023\n"
" --rule=<rule> Match regular expression.\n"
" --rule-file=<file> Use given rule file. For more information, see:\n"
" http://sourceforge.net/projects/cppcheck/files/Articles/\n"
Expand Down
17 changes: 14 additions & 3 deletions cli/cppcheckexecutor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -249,6 +249,7 @@ namespace {
public:
explicit StdLogger(const Settings& settings)
: mSettings(settings)
, mGuidelineMapping(createGuidelineMapping(settings.reportType))
{
if (!mSettings.outputFile.empty()) {
mErrorOutput = new std::ofstream(settings.outputFile);
Expand Down Expand Up @@ -342,6 +343,11 @@ namespace {
* SARIF report generator
*/
SarifReport mSarifReport;

/**
* Coding standard guideline mapping
*/
std::map<std::string, std::string> mGuidelineMapping;
};
}

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

ErrorMessage msgCopy = msg;
msgCopy.guideline = getGuideline(msgCopy.id, mSettings.reportType,
mGuidelineMapping, msgCopy.severity);
msgCopy.classification = getClassification(msgCopy.guideline, mSettings.reportType);

if (mSettings.outputFormat == Settings::OutputFormat::sarif)
mSarifReport.addFinding(msg);
mSarifReport.addFinding(msgCopy);
else if (mSettings.xml)
reportErr(msg.toXML());
reportErr(msgCopy.toXML());
else
reportErr(msg.toString(mSettings.verbose, mSettings.templateFormat, mSettings.templateLocation));
reportErr(msgCopy.toString(mSettings.verbose, mSettings.templateFormat, mSettings.templateLocation));
}

/**
Expand Down
2 changes: 1 addition & 1 deletion gui/common.h
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@

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

// Show * states
#define SETTINGS_SHOW_STYLE "Show style"
Expand Down
84 changes: 42 additions & 42 deletions gui/cppcheck_de.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2235,67 +2235,67 @@ Options:
<translation type="unfinished"></translation>
</message>
<message>
<location filename="resultstree.cpp" line="227"/>
<location filename="resultstree.cpp" line="132"/>
<source>File</source>
<translation type="unfinished">Datei</translation>
</message>
<message>
<location filename="resultstree.cpp" line="228"/>
<location filename="resultstree.cpp" line="133"/>
<source>Line</source>
<translation type="unfinished">Zeile</translation>
</message>
<message>
<location filename="resultstree.cpp" line="229"/>
<location filename="resultstree.cpp" line="134"/>
<source>Severity</source>
<translation type="unfinished">Schweregrad</translation>
</message>
<message>
<location filename="resultstree.cpp" line="230"/>
<location filename="resultstree.cpp" line="135"/>
<source>Classification</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="resultstree.cpp" line="231"/>
<location filename="resultstree.cpp" line="136"/>
<source>Level</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="resultstree.cpp" line="232"/>
<location filename="resultstree.cpp" line="137"/>
<source>Inconclusive</source>
<translation type="unfinished">Unklar</translation>
</message>
<message>
<location filename="resultstree.cpp" line="233"/>
<location filename="resultstree.cpp" line="138"/>
<source>Summary</source>
<translation type="unfinished">Zusammenfassung</translation>
</message>
<message>
<location filename="resultstree.cpp" line="234"/>
<location filename="resultstree.cpp" line="139"/>
<source>Id</source>
<translation type="unfinished">Id</translation>
</message>
<message>
<location filename="resultstree.cpp" line="235"/>
<location filename="resultstree.cpp" line="140"/>
<source>Guideline</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="resultstree.cpp" line="236"/>
<location filename="resultstree.cpp" line="141"/>
<source>Rule</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="resultstree.cpp" line="237"/>
<location filename="resultstree.cpp" line="142"/>
<source>Since date</source>
<translation type="unfinished">Seit Datum</translation>
</message>
<message>
<location filename="resultstree.cpp" line="238"/>
<location filename="resultstree.cpp" line="143"/>
<source>Tags</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="resultstree.cpp" line="239"/>
<location filename="resultstree.cpp" line="144"/>
<source>CWE</source>
<translation type="unfinished"></translation>
</message>
Expand Down Expand Up @@ -2342,93 +2342,93 @@ Options:
<translation type="vanished">Zusammenfassung</translation>
</message>
<message>
<location filename="resultstree.cpp" line="374"/>
<location filename="resultstree.cpp" line="260"/>
<source>Undefined file</source>
<translation>Undefinierte Datei</translation>
</message>
<message>
<location filename="resultstree.cpp" line="865"/>
<location filename="resultstree.cpp" line="751"/>
<source>Copy</source>
<translation>Kopieren</translation>
</message>
<message>
<location filename="resultstree.cpp" line="1058"/>
<location filename="resultstree.cpp" line="944"/>
<source>Could not find file:</source>
<translation>Kann Datei nicht finden:</translation>
</message>
<message>
<location filename="resultstree.cpp" line="1062"/>
<location filename="resultstree.cpp" line="948"/>
<source>Please select the folder &apos;%1&apos;</source>
<translation>Bitte wählen Sie den Ordner &apos;%1&apos;</translation>
</message>
<message>
<location filename="resultstree.cpp" line="1063"/>
<location filename="resultstree.cpp" line="949"/>
<source>Select Directory &apos;%1&apos;</source>
<translation>Wähle Verzeichnis &apos;%1&apos;</translation>
</message>
<message>
<location filename="resultstree.cpp" line="1065"/>
<location filename="resultstree.cpp" line="951"/>
<source>Please select the directory where file is located.</source>
<translation>Bitte wählen Sie das Verzeichnis, wo sich die Datei befindet</translation>
</message>
<message>
<location filename="resultstree.cpp" line="574"/>
<location filename="resultstree.cpp" line="460"/>
<source>debug</source>
<translation>Debug</translation>
</message>
<message>
<location filename="resultstree.cpp" line="500"/>
<location filename="resultstree.cpp" line="386"/>
<source>note</source>
<translation>Anmerkung</translation>
</message>
<message>
<location filename="resultstree.cpp" line="864"/>
<location filename="resultstree.cpp" line="750"/>
<source>Recheck</source>
<translation>Erneut prüfen</translation>
</message>
<message>
<location filename="resultstree.cpp" line="866"/>
<location filename="resultstree.cpp" line="752"/>
<source>Hide</source>
<translation>Verstecken</translation>
</message>
<message>
<location filename="resultstree.cpp" line="867"/>
<location filename="resultstree.cpp" line="753"/>
<source>Hide all with id</source>
<translation>Verstecke alle mit gleicher ID</translation>
</message>
<message>
<location filename="resultstree.cpp" line="886"/>
<location filename="resultstree.cpp" line="772"/>
<source>Suppress selected id(s)</source>
<translation>Ausgewählte ID(s) unterdrücken</translation>
</message>
<message>
<location filename="resultstree.cpp" line="868"/>
<location filename="resultstree.cpp" line="754"/>
<source>Open containing folder</source>
<translation>Übergeordneten Ordner öffnen</translation>
</message>
<message>
<location filename="resultstree.cpp" line="577"/>
<location filename="resultstree.cpp" line="463"/>
<source>internal</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="resultstree.cpp" line="907"/>
<location filename="resultstree.cpp" line="793"/>
<source>Tag</source>
<translation>Tag</translation>
</message>
<message>
<location filename="resultstree.cpp" line="909"/>
<location filename="resultstree.cpp" line="795"/>
<source>No tag</source>
<translation>Kein Tag</translation>
</message>
<message>
<location filename="resultstree.cpp" line="940"/>
<location filename="resultstree.cpp" line="954"/>
<location filename="resultstree.cpp" line="826"/>
<location filename="resultstree.cpp" line="840"/>
<source>Cppcheck</source>
<translation>Cppcheck</translation>
</message>
<message>
<location filename="resultstree.cpp" line="941"/>
<location filename="resultstree.cpp" line="827"/>
<source>No editor application configured.

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

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

Please check the application path and parameters are correct.</source>
Expand All @@ -2460,7 +2460,7 @@ Please check the application path and parameters are correct.</source>
Bitte überprüfen Sie ob der Pfad und die Parameter der Anwendung richtig eingestellt sind.</translation>
</message>
<message>
<location filename="resultstree.cpp" line="1066"/>
<location filename="resultstree.cpp" line="952"/>
<source>Select Directory</source>
<translation>Wähle Verzeichnis</translation>
</message>
Expand All @@ -2477,32 +2477,32 @@ Bitte überprüfen Sie ob der Pfad und die Parameter der Anwendung richtig einge
<translation type="vanished">Seit Datum</translation>
</message>
<message>
<location filename="resultstree.cpp" line="556"/>
<location filename="resultstree.cpp" line="442"/>
<source>style</source>
<translation>Stil</translation>
</message>
<message>
<location filename="resultstree.cpp" line="559"/>
<location filename="resultstree.cpp" line="445"/>
<source>error</source>
<translation>Fehler</translation>
</message>
<message>
<location filename="resultstree.cpp" line="562"/>
<location filename="resultstree.cpp" line="448"/>
<source>warning</source>
<translation>Warnung</translation>
</message>
<message>
<location filename="resultstree.cpp" line="565"/>
<location filename="resultstree.cpp" line="451"/>
<source>performance</source>
<translation>Performance</translation>
</message>
<message>
<location filename="resultstree.cpp" line="568"/>
<location filename="resultstree.cpp" line="454"/>
<source>portability</source>
<translation>Portabilität</translation>
</message>
<message>
<location filename="resultstree.cpp" line="571"/>
<location filename="resultstree.cpp" line="457"/>
<source>information</source>
<translation>Information</translation>
</message>
Expand Down
Loading
Loading