unused private functions: don't check classes declared in header files unless it is known that their whole implementation is seen
This commit is contained in:
parent
dfdbf85730
commit
b86b07827a
|
@ -439,6 +439,12 @@ void CheckClass::privateFunctions()
|
|||
// Locate some class
|
||||
for (const Token *tok1 = Token::findmatch(_tokenizer->tokens(), "class %var% {"); tok1; tok1 = Token::findmatch(tok1->next(), "class %var% {"))
|
||||
{
|
||||
// If the class implementation is incomplete there may be false positives about unused private functions.
|
||||
// Therefore I only check classes that are declared in the source file.
|
||||
// Todo: check classes that are declared in header file too. make sure the whole implementation is seen.
|
||||
if (tok1->fileIndex() != 0)
|
||||
continue;
|
||||
|
||||
const std::string &classname = tok1->next()->str();
|
||||
|
||||
// Get private functions..
|
||||
|
|
|
@ -46,6 +46,7 @@ private:
|
|||
|
||||
TEST_CASE(classInClass);
|
||||
TEST_CASE(sameFunctionNames);
|
||||
TEST_CASE(incompleteImplementation);
|
||||
}
|
||||
|
||||
|
||||
|
@ -102,7 +103,7 @@ private:
|
|||
"unsigned int Fred::f()\n"
|
||||
"{ }\n");
|
||||
|
||||
ASSERT_EQUALS("[p.h:4]: (style) Unused private function 'Fred::f'\n", errout.str());
|
||||
TODO_ASSERT_EQUALS("[p.h:4]: (style) Unused private function 'Fred::f'\n", errout.str());
|
||||
|
||||
check("#file \"p.h\"\n"
|
||||
"class Fred\n"
|
||||
|
@ -118,7 +119,7 @@ private:
|
|||
"{\n"
|
||||
"}\n"
|
||||
"\n");
|
||||
ASSERT_EQUALS("[p.h:4]: (style) Unused private function 'Fred::f'\n", errout.str());
|
||||
TODO_ASSERT_EQUALS("[p.h:4]: (style) Unused private function 'Fred::f'\n", errout.str());
|
||||
|
||||
// Don't warn about include files which implementation we don't see
|
||||
check("#file \"p.h\"\n"
|
||||
|
@ -272,6 +273,25 @@ private:
|
|||
"};");
|
||||
ASSERT_EQUALS("", errout.str());
|
||||
}
|
||||
|
||||
void incompleteImplementation()
|
||||
{
|
||||
// The implementation for "A::a" is missing - so don't check if
|
||||
// "A::b" is used or not
|
||||
check("#file \"test.h\"\n"
|
||||
"class A\n"
|
||||
"{\n"
|
||||
"public:\n"
|
||||
" A()\n"
|
||||
" void a();\n"
|
||||
"private:\n"
|
||||
" void b();\n"
|
||||
"};\n"
|
||||
"#endfile\n"
|
||||
"A::A() { }\n"
|
||||
"void A::b() { }\n");
|
||||
ASSERT_EQUALS("", errout.str());
|
||||
}
|
||||
};
|
||||
|
||||
REGISTER_TEST(TestUnusedPrivateFunction)
|
||||
|
|
Loading…
Reference in New Issue