Removed false positives and also duplicate error messages.
This commit is contained in:
parent
942c48474c
commit
a6696d6f7d
|
@ -242,59 +242,6 @@ void WarningIf()
|
||||||
}
|
}
|
||||||
ReportErr(ostr.str());
|
ReportErr(ostr.str());
|
||||||
}
|
}
|
||||||
|
|
||||||
// Search for 'if (condition) flag = true;'
|
|
||||||
bool newstatement = false;
|
|
||||||
for (TOKEN *tok = tokens; tok; tok = tok->next)
|
|
||||||
{
|
|
||||||
if (!newstatement || strcmp(tok->str,"if"))
|
|
||||||
{
|
|
||||||
newstatement = (strchr("{};",tok->str[0]));
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
int parlevel = 0;
|
|
||||||
for (TOKEN *tok2 = tok->next; tok2; tok2 = tok2->next)
|
|
||||||
{
|
|
||||||
if (tok2->str[0]=='(')
|
|
||||||
parlevel++;
|
|
||||||
else if (tok2->str[0]==')')
|
|
||||||
{
|
|
||||||
parlevel--;
|
|
||||||
if (parlevel<=0)
|
|
||||||
{
|
|
||||||
if ( strcmp(getstr(tok2,5), "else") == 0 )
|
|
||||||
{
|
|
||||||
if ( match(tok2->next, "var = true ; else var = false ;") )
|
|
||||||
{
|
|
||||||
std::ostringstream ostr;
|
|
||||||
ostr << FileLine(tok) << ": Found \"if (condition) var=true; else var=false;\", it can be rewritten as \"var = (condition);\"";
|
|
||||||
ReportErr(ostr.str());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
else if ( match(tok2->next, "var = true ;") )
|
|
||||||
{
|
|
||||||
std::ostringstream ostr;
|
|
||||||
ostr << FileLine(tok) << ": Found \"if (condition) var = true;\", it can be rewritten as \"var |= (condition);\"";
|
|
||||||
ReportErr(ostr.str());
|
|
||||||
}
|
|
||||||
|
|
||||||
else if ( match(tok2->next, "var = false ;") )
|
|
||||||
{
|
|
||||||
std::ostringstream ostr;
|
|
||||||
ostr << FileLine(tok) << ": Found \"if (condition) var = false;\", it can be rewritten as \"var &= (!condition);\"";
|
|
||||||
ReportErr(ostr.str());
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
newstatement = (strchr("{};",tok->str[0]));
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
|
@ -3,8 +3,11 @@
|
||||||
#include "tokenize.h"
|
#include "tokenize.h"
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
|
#include <list>
|
||||||
|
#include <algorithm>
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
bool HasErrors;
|
bool HasErrors;
|
||||||
|
bool OnlyReportUniqueErrors;
|
||||||
std::ostringstream errout;
|
std::ostringstream errout;
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -16,8 +19,16 @@ std::string FileLine(TOKEN *tok)
|
||||||
}
|
}
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
std::list<std::string> ErrorList;
|
||||||
|
|
||||||
void ReportErr(const std::string errmsg)
|
void ReportErr(const std::string errmsg)
|
||||||
{
|
{
|
||||||
|
if ( OnlyReportUniqueErrors )
|
||||||
|
{
|
||||||
|
if ( std::find( ErrorList.begin(), ErrorList.end(), errmsg ) != ErrorList.end() )
|
||||||
|
return;
|
||||||
|
ErrorList.push_back( errmsg );
|
||||||
|
}
|
||||||
errout << errmsg << std::endl;
|
errout << errmsg << std::endl;
|
||||||
HasErrors = true;
|
HasErrors = true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,6 +9,8 @@
|
||||||
struct TOKEN;
|
struct TOKEN;
|
||||||
|
|
||||||
std::string FileLine(TOKEN *tok);
|
std::string FileLine(TOKEN *tok);
|
||||||
|
|
||||||
|
extern bool OnlyReportUniqueErrors;
|
||||||
|
|
||||||
void ReportErr(const std::string errmsg);
|
void ReportErr(const std::string errmsg);
|
||||||
extern std::ostringstream errout;
|
extern std::ostringstream errout;
|
||||||
|
|
7
main.cpp
7
main.cpp
|
@ -169,6 +169,7 @@ extern bool HasErrors;
|
||||||
static void CppCheck(const char FileName[])
|
static void CppCheck(const char FileName[])
|
||||||
{
|
{
|
||||||
HasErrors = false;
|
HasErrors = false;
|
||||||
|
OnlyReportUniqueErrors = true;
|
||||||
|
|
||||||
std::cout << "Checking " << FileName << "...\n";
|
std::cout << "Checking " << FileName << "...\n";
|
||||||
|
|
||||||
|
@ -190,9 +191,9 @@ static void CppCheck(const char FileName[])
|
||||||
CheckUnsignedDivision();
|
CheckUnsignedDivision();
|
||||||
|
|
||||||
|
|
||||||
// Including header which is not needed
|
// Including header which is not needed (too many false positives)
|
||||||
if ( CheckCodingStyle )
|
//if ( CheckCodingStyle )
|
||||||
WarningIncludeHeader();
|
// WarningIncludeHeader();
|
||||||
|
|
||||||
|
|
||||||
SimplifyTokenList();
|
SimplifyTokenList();
|
||||||
|
|
Loading…
Reference in New Issue