Refactoring: Removed Severity::possibleStyle

This commit is contained in:
Daniel Marjamäki 2010-05-16 14:43:42 +02:00
parent 5fe2a56b41
commit 6edb2e77b4
11 changed files with 47 additions and 108 deletions

View File

@ -101,7 +101,7 @@ protected:
std::list<const Token *> callstack;
if (tok)
callstack.push_back(tok);
else if (severity == Severity::possibleError || severity == Severity::possibleStyle)
else if (severity == Severity::possibleError)
return; // don't list inconclusive checks in the --errorlist output
reportError(callstack, severity, id, msg);
}

View File

@ -582,8 +582,8 @@ void CheckClass::checkConstructors(const Token *tok1, const std::string &funcnam
if (classNameUsed)
operatorEqVarError(constructor_token, className, var->name);
}
else if (!var->isStatic)
uninitVarError(constructor_token, className, var->name, hasPrivateConstructor);
else if (!hasPrivateConstructor && !var->isStatic)
uninitVarError(constructor_token, className, var->name);
}
for (Var *var = varlist; var; var = var->next)
@ -1986,9 +1986,9 @@ void CheckClass::noConstructorError(const Token *tok, const std::string &classna
reportError(tok, Severity::style, "noConstructor", "The " + std::string(isStruct ? "struct" : "class") + " '" + classname + "' has no constructor. Member variables not initialized.");
}
void CheckClass::uninitVarError(const Token *tok, const std::string &classname, const std::string &varname, bool hasPrivateConstructor)
void CheckClass::uninitVarError(const Token *tok, const std::string &classname, const std::string &varname)
{
reportError(tok, hasPrivateConstructor ? Severity::possibleStyle : Severity::style, "uninitVar", "Member variable not initialized in the constructor '" + classname + "::" + varname + "'");
reportError(tok, Severity::style, "uninitVar", "Member variable not initialized in the constructor '" + classname + "::" + varname + "'");
}
void CheckClass::operatorEqVarError(const Token *tok, const std::string &classname, const std::string &varname)

View File

@ -180,7 +180,7 @@ private:
// Reporting errors..
void noConstructorError(const Token *tok, const std::string &classname, bool isStruct);
void uninitVarError(const Token *tok, const std::string &classname, const std::string &varname, bool hasPrivateConstructor);
void uninitVarError(const Token *tok, const std::string &classname, const std::string &varname);
void operatorEqVarError(const Token *tok, const std::string &classname, const std::string &varname);
void unusedPrivateFunctionError(const Token *tok, const std::string &classname, const std::string &funcname);
void memsetClassError(const Token *tok, const std::string &memfunc);
@ -197,7 +197,7 @@ private:
void getErrorMessages()
{
noConstructorError(0, "classname", false);
uninitVarError(0, "classname", "varname", false);
uninitVarError(0, "classname", "varname");
operatorEqVarError(0, "classname", "");
unusedPrivateFunctionError(0, "classname", "funcname");
memsetClassError(0, "memfunc");

View File

@ -356,7 +356,7 @@ void CheckOther::invalidFunctionUsage()
void CheckOther::checkUnsignedDivision()
{
if (!_settings->inconclusive || !_settings->_checkCodingStyle)
if (!_settings->_checkCodingStyle)
return;
// Check for "ivar / uvar" and "uvar / ivar"
@ -371,24 +371,9 @@ void CheckOther::checkUnsignedDivision()
varsign[tok->tokAt(2)->varId()] = 's';
}
else if (!Token::Match(tok, "[).]") &&
Token::Match(tok->next(), "%var% / %var%") &&
tok->tokAt(1)->varId() != 0 &&
tok->tokAt(3)->varId() != 0)
{
char sign1 = varsign[tok->tokAt(1)->varId()];
char sign2 = varsign[tok->tokAt(3)->varId()];
if (sign1 && sign2 && sign1 != sign2)
{
// One of the operands are signed, the other is unsigned..
udivWarning(tok->next());
}
}
else if (!Token::Match(tok, "[).]") && Token::Match(tok->next(), "%var% / %num%"))
{
if (tok->strAt(3)[0] == '-' && ErrorLogger::udivError())
if (tok->strAt(3)[0] == '-')
{
char sign1 = varsign[tok->tokAt(1)->varId()];
if (sign1 == 'u')
@ -400,7 +385,7 @@ void CheckOther::checkUnsignedDivision()
else if (Token::Match(tok, "[([=*/+-,] %num% / %var%"))
{
if (tok->strAt(1)[0] == '-' && ErrorLogger::udivError())
if (tok->strAt(1)[0] == '-')
{
char sign2 = varsign[tok->tokAt(3)->varId()];
if (sign2 == 'u')
@ -3518,11 +3503,6 @@ void CheckOther::udivError(const Token *tok)
reportError(tok, Severity::error, "udivError", "Unsigned division. The result will be wrong.");
}
void CheckOther::udivWarning(const Token *tok)
{
reportError(tok, Severity::possibleStyle, "udivWarning", "Division with signed and unsigned operators");
}
void CheckOther::unusedStructMemberError(const Token *tok, const std::string &structname, const std::string &varname)
{
reportError(tok, Severity::style, "unusedStructMember", "struct or union member '" + structname + "::" + varname + "' is never used");
@ -3614,7 +3594,7 @@ void CheckOther::mathfunctionCallError(const Token *tok, const unsigned int numP
void CheckOther::postIncrementError(const Token *tok, const std::string &var_name, const bool isIncrement)
{
std::string type = (isIncrement ? "Incrementing" : "Decrementing");
reportError(tok, Severity::possibleStyle, "postIncrementDecrement", ("Pre-" + type + " variable '" + var_name + "' is preferred to Post-" + type));
reportError(tok, Severity::style, "postIncrementDecrement", ("Pre-" + type + " variable '" + var_name + "' is preferred to Post-" + type));
}
void CheckOther::emptyStringTestError(const Token *tok, const std::string &var_name, const bool isTestForEmpty)

View File

@ -174,7 +174,6 @@ public:
void dangerousUsageStrtolError(const Token *tok);
void sprintfOverlappingDataError(const Token *tok, const std::string &varname);
void udivError(const Token *tok);
void udivWarning(const Token *tok);
void unusedStructMemberError(const Token *tok, const std::string &structname, const std::string &varname);
void passedByValueError(const Token *tok, const std::string &parname);
void constStatementError(const Token *tok, const std::string &type);
@ -213,7 +212,6 @@ public:
redundantIfDelete0Error(0);
redundantIfRemoveError(0);
dangerousUsageStrtolError(0);
udivWarning(0);
unusedStructMemberError(0, "structname", "variable");
passedByValueError(0, "parametername");
constStatementError(0, "type");

View File

@ -688,5 +688,5 @@ void CheckStl::sizeError(const Token *tok)
{
const std::string varname(tok ? tok->str().c_str() : "list");
const bool verbose(_settings ? _settings->_verbose : true);
reportError(tok, Severity::possibleStyle, "stlSize", "Use " + varname + ".empty() instead of " + varname + ".size() to guarantee fast code." + (verbose ? " size() can take linear time but empty() is guaranteed to take constant time." : ""));
reportError(tok, Severity::style, "stlSize", "Use " + varname + ".empty() instead of " + varname + ".size() to guarantee fast code." + (verbose ? " size() can take linear time but empty() is guaranteed to take constant time." : ""));
}

View File

@ -322,7 +322,7 @@ private:
class Severity
{
public:
enum e { error, style, possibleError, possibleStyle };
enum e { error, style, possibleError };
static std::string stringify(e severity)
{
switch (severity)
@ -333,8 +333,6 @@ public:
return "style";
case possibleError:
return "possible error";
case possibleStyle:
return "possible style";
};
return "???";
}

View File

@ -1762,8 +1762,7 @@ private:
" int foo;\n"
" Foo() { }\n"
"};\n");
ASSERT_EQUALS("[test.cpp:3]: (possible style) Member variable not initialized in the constructor 'Foo::foo'\n", errout.str());
ASSERT_EQUALS("", errout.str());
}
void privateCtor2()
@ -1777,13 +1776,11 @@ private:
" Foo(int _i) { }\n"
"};\n");
// actual results - "possible style" for both messages
ASSERT_EQUALS("[test.cpp:5]: (possible style) Member variable not initialized in the constructor 'Foo::foo'\n"
"[test.cpp:7]: (possible style) Member variable not initialized in the constructor 'Foo::foo'\n", errout.str());
// actual results
ASSERT_EQUALS("", errout.str());
// wanted results - "style" for the public constructor
TODO_ASSERT_EQUALS("[test.cpp:5]: (possible style) Member variable not initialized in the constructor 'Foo::foo'\n"
"[test.cpp:7]: (style) Member variable not initialized in the constructor 'Foo::foo'\n", errout.str());
// wanted results - warning for the public constructor
TODO_ASSERT_EQUALS("[test.cpp:7]: (style) Member variable not initialized in the constructor 'Foo::foo'\n", errout.str());
}

View File

@ -36,7 +36,7 @@ public:
{ }
private:
void check(const char code[], bool style = true, bool all = true)
void check(const char code[], bool style = true)
{
// Tokenize..
Tokenizer tokenizer;
@ -47,7 +47,6 @@ private:
errout.str("");
Settings settings;
settings.inconclusive = all;
settings._checkCodingStyle = style;
// Check for unsigned divisions..
@ -59,7 +58,6 @@ private:
{
TEST_CASE(division1);
TEST_CASE(division2);
TEST_CASE(division3);
TEST_CASE(division4);
TEST_CASE(division5);
TEST_CASE(division6);
@ -76,7 +74,8 @@ private:
" unsigned int uvar = 2;\n"
" return ivar / uvar;\n"
"}\n");
ASSERT_EQUALS("[test.cpp:5]: (possible style) Division with signed and unsigned operators\n", errout.str());
TODO_ASSERT_EQUALS("[test.cpp:5]: (style) Division with signed and unsigned operators\n", errout.str());
ASSERT_EQUALS("", errout.str());
}
void division2()
@ -87,20 +86,8 @@ private:
" unsigned int uvar = 2;\n"
" return uvar / ivar;\n"
"}\n");
ASSERT_EQUALS("[test.cpp:5]: (possible style) Division with signed and unsigned operators\n", errout.str());
}
void division3()
{
check("typedef int s32;\n"
"typedef unsigned int u32;\n"
"void f()\n"
"{\n"
" s32 ivar = -2;\n"
" u32 uvar = 2;\n"
" return uvar / ivar;\n"
"}\n");
ASSERT_EQUALS("[test.cpp:7]: (possible style) Division with signed and unsigned operators\n", errout.str());
TODO_ASSERT_EQUALS("[test.cpp:5]: (style) Division with signed and unsigned operators\n", errout.str());
ASSERT_EQUALS("", errout.str());
}
void division4()
@ -155,8 +142,7 @@ private:
check("void foo()\n"
"{\n"
" unsigned int val = 32;\n"
" int i = -96 / val; }\n"
);
" int i = -96 / val; }\n");
ASSERT_EQUALS("[test.cpp:4]: (error) Unsigned division. The result will be wrong.\n", errout.str());
}
@ -169,35 +155,26 @@ private:
" unsigned int a;\n"
" unsigned int c = a / b;\n"
" }\n"
"}\n", false, true);
"}\n", true);
ASSERT_EQUALS("", errout.str());
check("void foo(int b)\n"
"{\n"
" if (b > 0)\n"
" if (b < 0)\n"
" {\n"
" unsigned int a;\n"
" unsigned int c = a / b;\n"
" }\n"
"}\n", true, false);
"}\n", true);
ASSERT_EQUALS("", errout.str());
check("void foo(int b)\n"
"{\n"
" if (b > 0)\n"
" {\n"
" unsigned int a;\n"
" unsigned int c = a / b;\n"
" }\n"
"}\n", true, true);
ASSERT_EQUALS("[test.cpp:6]: (possible style) Division with signed and unsigned operators\n", errout.str());
TODO_ASSERT_EQUALS("unsigned division", errout.str());
check("void a(int i) { }\n"
"int foo( unsigned int sz )\n"
"{\n"
" register unsigned int i=1;\n"
" return i/sz;\n"
"}\n", true, true);
"}\n", true);
ASSERT_EQUALS("", errout.str());
}
@ -209,7 +186,8 @@ private:
" unsigned long uvar = 2;\n"
" return ivar / uvar;\n"
"}\n");
ASSERT_EQUALS("[test.cpp:5]: (possible style) Division with signed and unsigned operators\n", errout.str());
ASSERT_EQUALS("", errout.str());
TODO_ASSERT_EQUALS("unsigned division", errout.str());
check("void f()\n"
"{\n"
@ -217,20 +195,8 @@ private:
" unsigned long long uvar = 2;\n"
" return ivar / uvar;\n"
"}\n");
ASSERT_EQUALS("[test.cpp:5]: (possible style) Division with signed and unsigned operators\n", errout.str());
check("template<class A, class B> class C\n"
"{\n"
" A a;\n"
" B b;\n"
" void foo() { a / b; }\n"
"};\n"
"C<int, unsigned int> c1;\n"
"C<int, unsigned long> c2;\n"
"C<int, unsigned long long> c3;\n");
ASSERT_EQUALS("[test.cpp:5]: (possible style) Division with signed and unsigned operators\n"
"[test.cpp:5]: (possible style) Division with signed and unsigned operators\n"
"[test.cpp:5]: (possible style) Division with signed and unsigned operators\n", errout.str());
ASSERT_EQUALS("", errout.str());
TODO_ASSERT_EQUALS("unsigned division", errout.str());
}
};

View File

@ -2150,7 +2150,7 @@ private:
" for (it = ab.begin(); it != ab.end(); it++)\n"
" ;\n"
"}\n");
ASSERT_EQUALS("[test.cpp:4]: (possible style) Pre-Incrementing variable 'it' is preferred to Post-Incrementing\n", errout.str());
ASSERT_EQUALS("[test.cpp:4]: (style) Pre-Incrementing variable 'it' is preferred to Post-Incrementing\n", errout.str());
checkpostIncrementDecrement("void f1()\n"
"{\n"
@ -2160,8 +2160,8 @@ private:
" for (it = ab.begin(); it != ab.end(); it++)\n"
" ;\n"
"}\n");
ASSERT_EQUALS("[test.cpp:4]: (possible style) Pre-Incrementing variable 'it' is preferred to Post-Incrementing\n"
"[test.cpp:6]: (possible style) Pre-Incrementing variable 'it' is preferred to Post-Incrementing\n", errout.str());
ASSERT_EQUALS("[test.cpp:4]: (style) Pre-Incrementing variable 'it' is preferred to Post-Incrementing\n"
"[test.cpp:6]: (style) Pre-Incrementing variable 'it' is preferred to Post-Incrementing\n", errout.str());
checkpostIncrementDecrement("void f2()\n"
"{\n"
@ -2169,7 +2169,7 @@ private:
" for (it = ab.end(); it != ab.begin(); it--)\n"
" ;\n"
"}\n");
ASSERT_EQUALS("[test.cpp:4]: (possible style) Pre-Decrementing variable 'it' is preferred to Post-Decrementing\n", errout.str());
ASSERT_EQUALS("[test.cpp:4]: (style) Pre-Decrementing variable 'it' is preferred to Post-Decrementing\n", errout.str());
checkpostIncrementDecrement("void f2()\n"
"{\n"
@ -2179,8 +2179,8 @@ private:
" for (it = ab.end(); it != ab.begin(); it--)\n"
" ;\n"
"}\n");
ASSERT_EQUALS("[test.cpp:4]: (possible style) Pre-Decrementing variable 'it' is preferred to Post-Decrementing\n"
"[test.cpp:6]: (possible style) Pre-Decrementing variable 'it' is preferred to Post-Decrementing\n", errout.str());
ASSERT_EQUALS("[test.cpp:4]: (style) Pre-Decrementing variable 'it' is preferred to Post-Decrementing\n"
"[test.cpp:6]: (style) Pre-Decrementing variable 'it' is preferred to Post-Decrementing\n", errout.str());
checkpostIncrementDecrement("void f1()\n"
"{\n"
@ -2188,7 +2188,7 @@ private:
" for (it = ab.begin(); it != ab.end(); it++)\n"
" ;\n"
"}\n");
ASSERT_EQUALS("[test.cpp:4]: (possible style) Pre-Incrementing variable 'it' is preferred to Post-Incrementing\n", errout.str());
ASSERT_EQUALS("[test.cpp:4]: (style) Pre-Incrementing variable 'it' is preferred to Post-Incrementing\n", errout.str());
checkpostIncrementDecrement("void f1()\n"
"{\n"
@ -2196,7 +2196,7 @@ private:
" for (it = ab.begin(); it != ab.end(); it++)\n"
" ;\n"
"}\n");
ASSERT_EQUALS("[test.cpp:4]: (possible style) Pre-Incrementing variable 'it' is preferred to Post-Incrementing\n", errout.str());
ASSERT_EQUALS("[test.cpp:4]: (style) Pre-Incrementing variable 'it' is preferred to Post-Incrementing\n", errout.str());
}
void postIncrementDecrementClass()
@ -2208,7 +2208,7 @@ private:
" for (tClass = TestClass.begin(); tClass != TestClass.end(); tClass++)\n"
" ;\n"
"}\n");
ASSERT_EQUALS("[test.cpp:5]: (possible style) Pre-Incrementing variable 'tClass' is preferred to Post-Incrementing\n", errout.str());
ASSERT_EQUALS("[test.cpp:5]: (style) Pre-Incrementing variable 'tClass' is preferred to Post-Incrementing\n", errout.str());
checkpostIncrementDecrement("class TestClass;\n"
"void f1()\n"
@ -2217,7 +2217,7 @@ private:
" for (tClass = TestClass.end(); tClass != TestClass.begin(); tClass--)\n"
" ;\n"
"}\n");
ASSERT_EQUALS("[test.cpp:5]: (possible style) Pre-Decrementing variable 'tClass' is preferred to Post-Decrementing\n", errout.str());
ASSERT_EQUALS("[test.cpp:5]: (style) Pre-Decrementing variable 'tClass' is preferred to Post-Decrementing\n", errout.str());
}
void dangerousStrolUsage()

View File

@ -819,28 +819,28 @@ private:
" std::list<int> x;\n"
" if (x.size() == 0) {}\n"
"}\n");
ASSERT_EQUALS("[test.cpp:4]: (possible style) Use x.empty() instead of x.size() to guarantee fast code.\n", errout.str());
ASSERT_EQUALS("[test.cpp:4]: (style) Use x.empty() instead of x.size() to guarantee fast code.\n", errout.str());
check("void f()\n"
"{\n"
" std::list<int> x;\n"
" if (x.size() != 0) {}\n"
"}\n");
ASSERT_EQUALS("[test.cpp:4]: (possible style) Use x.empty() instead of x.size() to guarantee fast code.\n", errout.str());
ASSERT_EQUALS("[test.cpp:4]: (style) Use x.empty() instead of x.size() to guarantee fast code.\n", errout.str());
check("void f()\n"
"{\n"
" std::list<int> x;\n"
" if (x.size() > 0) {}\n"
"}\n");
ASSERT_EQUALS("[test.cpp:4]: (possible style) Use x.empty() instead of x.size() to guarantee fast code.\n", errout.str());
ASSERT_EQUALS("[test.cpp:4]: (style) Use x.empty() instead of x.size() to guarantee fast code.\n", errout.str());
check("void f()\n"
"{\n"
" std::list<int> x;\n"
" if (x.size()) {}\n"
"}\n");
ASSERT_EQUALS("[test.cpp:4]: (possible style) Use x.empty() instead of x.size() to guarantee fast code.\n", errout.str());
ASSERT_EQUALS("[test.cpp:4]: (style) Use x.empty() instead of x.size() to guarantee fast code.\n", errout.str());
check("void f()\n"
"{\n"