Skip to content

Commit 50f9dd5

Browse files
committed
Used enum instead of string in implementation for '--language='.
1 parent 77b5175 commit 50f9dd5

6 files changed

Lines changed: 39 additions & 26 deletions

File tree

cli/cmdlineparser.cpp

Lines changed: 22 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -126,21 +126,29 @@ bool CmdLineParser::ParseFromArgs(int argc, const char* const argv[])
126126
_settings->inconclusive = true;
127127

128128
// Enforce language (--language=, -x)
129-
else if (strncmp(argv[i], "--language=", 11) == 0) {
130-
_settings->enforcedLang = argv[i] + 11;
131-
if (_settings->enforcedLang != "c" && _settings->enforcedLang != "c++" && _settings->enforcedLang != "java" && _settings->enforcedLang != "c#") { // Valid values
132-
PrintMessage("cppcheck: Unknown language '" + _settings->enforcedLang + "' enforced.");
133-
return false;
134-
}
135-
} else if (strcmp(argv[i], "-x") == 0) {
136-
i++;
137-
if (i >= argc || argv[i][0] == '-') {
138-
PrintMessage("cppcheck: No language given to '-x' option.");
139-
return false;
129+
else if (strncmp(argv[i], "--language=", 11) == 0 || strcmp(argv[i], "-x") == 0) {
130+
std::string str;
131+
if (argv[i][2]) {
132+
str = argv[i]+11;
133+
} else {
134+
i++;
135+
if (i >= argc || argv[i][0] == '-') {
136+
PrintMessage("cppcheck: No language given to '-x' option.");
137+
return false;
138+
}
139+
str = argv[i];
140140
}
141-
_settings->enforcedLang = argv[i];
142-
if (_settings->enforcedLang != "c" && _settings->enforcedLang != "c++" && _settings->enforcedLang != "java" && _settings->enforcedLang != "c#") { // Valid values
143-
PrintMessage("cppcheck: Unknown language '" + _settings->enforcedLang + "' enforced.");
141+
142+
if (str == "c")
143+
_settings->enforcedLang = Settings::C;
144+
else if (str == "c++")
145+
_settings->enforcedLang = Settings::CPP;
146+
else if (str == "c#")
147+
_settings->enforcedLang = Settings::CSharp;
148+
else if (str == "java")
149+
_settings->enforcedLang = Settings::Java;
150+
else {
151+
PrintMessage("cppcheck: Unknown language '" + str + "' enforced.");
144152
return false;
145153
}
146154
}

lib/preprocessor.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1552,7 +1552,7 @@ std::string Preprocessor::getcode(const std::string &filedata, const std::string
15521552

15531553
// Create a map for the cfg for faster access to defines
15541554
std::map<std::string, std::string> cfgmap(getcfgmap(cfg));
1555-
if (((_settings && _settings->enforcedLang == "c++") || ((!_settings || _settings->enforcedLang.empty()) && Path::isCPP(filename))) && cfgmap.find("__cplusplus") == cfgmap.end())
1555+
if (((_settings && _settings->enforcedLang == Settings::CPP) || ((!_settings || _settings->enforcedLang == Settings::None) && Path::isCPP(filename))) && cfgmap.find("__cplusplus") == cfgmap.end())
15561556
cfgmap["__cplusplus"] = "1";
15571557

15581558
std::stack<std::string> filenames;

lib/settings.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ Settings::Settings()
3737
_exitCode(0),
3838
_showtime(0),
3939
_maxConfigs(12),
40+
enforcedLang(None),
4041
reportProgress(false),
4142
checkConfiguration(false)
4243
{

lib/settings.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,8 +149,12 @@ class CPPCHECKLIB Settings {
149149
*/
150150
std::string addEnabled(const std::string &str);
151151

152+
enum Language {
153+
None, C, CPP, CSharp, Java
154+
};
155+
152156
/** @brief Name of the language that is enforced. Empty per default. */
153-
std::string enforcedLang;
157+
Language enforcedLang;
154158

155159
/** @brief suppress message (--suppressions) */
156160
Suppressions nomsg;

lib/tokenize.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9355,12 +9355,12 @@ const std::string& Tokenizer::getSourceFilePath() const
93559355

93569356
bool Tokenizer::isJava() const
93579357
{
9358-
return _settings->enforcedLang == "java" || (_settings->enforcedLang.empty() && Path::isJava(getSourceFilePath()));
9358+
return _settings->enforcedLang == Settings::Java || (_settings->enforcedLang == Settings::None && Path::isJava(getSourceFilePath()));
93599359
}
93609360

93619361
bool Tokenizer::isCSharp() const
93629362
{
9363-
return _settings->enforcedLang == "c#" || (_settings->enforcedLang.empty() && Path::isCSharp(getSourceFilePath()));
9363+
return _settings->enforcedLang == Settings::CSharp || (_settings->enforcedLang == Settings::None && Path::isCSharp(getSourceFilePath()));
93649364
}
93659365

93669366
bool Tokenizer::isJavaOrCSharp() const
@@ -9370,12 +9370,12 @@ bool Tokenizer::isJavaOrCSharp() const
93709370

93719371
bool Tokenizer::isC() const
93729372
{
9373-
return _settings->enforcedLang == "c" || (_settings->enforcedLang.empty() && Path::isC(getSourceFilePath()));
9373+
return _settings->enforcedLang == Settings::C || (_settings->enforcedLang == Settings::None && Path::isC(getSourceFilePath()));
93749374
}
93759375

93769376
bool Tokenizer::isCPP() const
93779377
{
9378-
return _settings->enforcedLang == "c++" || (_settings->enforcedLang.empty() && Path::isCPP(getSourceFilePath()));
9378+
return _settings->enforcedLang == Settings::CPP || (_settings->enforcedLang == Settings::None && Path::isCPP(getSourceFilePath()));
93799379
}
93809380

93819381
void Tokenizer::reportError(const Token* tok, const Severity::SeverityType severity, const std::string& id, const std::string& msg, bool inconclusive) const

test/testcmdlineparser.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -375,14 +375,14 @@ class TestCmdlineParser : public TestFixture {
375375
Settings settings;
376376
CmdLineParser parser(&settings);
377377
ASSERT(parser.ParseFromArgs(2, argv));
378-
ASSERT_EQUALS("", settings.enforcedLang);
378+
ASSERT_EQUALS(Settings::None, settings.enforcedLang);
379379
}
380380
{
381381
const char *argv[] = {"cppcheck", "-x", "c++", "file.cpp"};
382382
Settings settings;
383383
CmdLineParser parser(&settings);
384384
ASSERT(parser.ParseFromArgs(4, argv));
385-
ASSERT_EQUALS("c++", settings.enforcedLang);
385+
ASSERT_EQUALS(Settings::CPP, settings.enforcedLang);
386386
}
387387
{
388388
const char *argv[] = {"cppcheck", "-x"};
@@ -401,28 +401,28 @@ class TestCmdlineParser : public TestFixture {
401401
Settings settings;
402402
CmdLineParser parser(&settings);
403403
ASSERT(parser.ParseFromArgs(3, argv));
404-
ASSERT_EQUALS("c++", settings.enforcedLang);
404+
ASSERT_EQUALS(Settings::CPP, settings.enforcedLang);
405405
}
406406
{
407407
const char *argv[] = {"cppcheck", "--language=c", "file.cpp"};
408408
Settings settings;
409409
CmdLineParser parser(&settings);
410410
ASSERT(parser.ParseFromArgs(3, argv));
411-
ASSERT_EQUALS("c", settings.enforcedLang);
411+
ASSERT_EQUALS(Settings::C, settings.enforcedLang);
412412
}
413413
{
414414
const char *argv[] = {"cppcheck", "--language=c#", "file.cpp"};
415415
Settings settings;
416416
CmdLineParser parser(&settings);
417417
ASSERT(parser.ParseFromArgs(3, argv));
418-
ASSERT_EQUALS("c#", settings.enforcedLang);
418+
ASSERT_EQUALS(Settings::CSharp, settings.enforcedLang);
419419
}
420420
{
421421
const char *argv[] = {"cppcheck", "--language=java", "file.cpp"};
422422
Settings settings;
423423
CmdLineParser parser(&settings);
424424
ASSERT(parser.ParseFromArgs(3, argv));
425-
ASSERT_EQUALS("java", settings.enforcedLang);
425+
ASSERT_EQUALS(Settings::Java, settings.enforcedLang);
426426
}
427427
{
428428
const char *argv[] = {"cppcheck", "--language=unknwonLanguage", "file.cpp"};

0 commit comments

Comments
 (0)