--check-headers=no: remove types in headers that are not used in the source file
This commit is contained in:
parent
411a3f09f7
commit
59ec5f961f
|
@ -4266,10 +4266,20 @@ void Tokenizer::simplifyHeaders()
|
||||||
|
|
||||||
// TODO: Remove unused types/variables/etc in headers..
|
// TODO: Remove unused types/variables/etc in headers..
|
||||||
|
|
||||||
std::set<std::string> functions;
|
// functions and types to keep
|
||||||
|
std::set<std::string> keep;
|
||||||
for (const Token *tok = list.front(); tok; tok = tok->next()) {
|
for (const Token *tok = list.front(); tok; tok = tok->next()) {
|
||||||
if (tok->fileIndex() == 0 && Token::Match(tok, "%name% (") && !Token::simpleMatch(tok->linkAt(1), ") {"))
|
if (tok->fileIndex() != 0 || !tok->isName())
|
||||||
functions.insert(tok->str());
|
continue;
|
||||||
|
|
||||||
|
if (Token::Match(tok, "%name% (") && !Token::simpleMatch(tok->linkAt(1), ") {")) {
|
||||||
|
keep.insert(tok->str());
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Token::Match(tok, "%name% %name%|::|*|&|<")) {
|
||||||
|
keep.insert(tok->str());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const std::set<std::string> functionStart{"static", "const", "unsigned", "signed", "void", "bool", "char", "short", "int", "long", "float", "*"};
|
const std::set<std::string> functionStart{"static", "const", "unsigned", "signed", "void", "bool", "char", "short", "int", "long", "float", "*"};
|
||||||
|
@ -4293,17 +4303,29 @@ void Tokenizer::simplifyHeaders()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Remove unused function declarations
|
|
||||||
if (Token::Match(tok, "[;{}]")) {
|
if (Token::Match(tok, "[;{}]")) {
|
||||||
|
// Remove unused function declarations
|
||||||
while (1) {
|
while (1) {
|
||||||
Token *start = tok->next();
|
Token *start = tok->next();
|
||||||
while (start && functionStart.find(start->str()) != functionStart.end())
|
while (start && functionStart.find(start->str()) != functionStart.end())
|
||||||
start = start->next();
|
start = start->next();
|
||||||
if (Token::Match(start, "%name% (") && Token::simpleMatch(start->linkAt(1), ") const| ;") && functions.find(start->str()) == functions.end())
|
if (Token::Match(start, "%name% (") && Token::simpleMatch(start->linkAt(1), ") const| ;") && keep.find(start->str()) == keep.end())
|
||||||
Token::eraseTokens(tok, start->linkAt(1)->tokAt(2));
|
Token::eraseTokens(tok, start->linkAt(1)->tokAt(2));
|
||||||
else
|
else
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (Token::Match(tok, "[;{}] class|struct %name% [:{]") && keep.find(tok->strAt(2)) == keep.end()) {
|
||||||
|
// Remove this class/struct
|
||||||
|
const Token *endToken = tok->tokAt(3);
|
||||||
|
if (endToken->str() == ":") {
|
||||||
|
endToken = endToken->next();
|
||||||
|
while (Token::Match(endToken, "%name%|,"))
|
||||||
|
endToken = endToken->next();
|
||||||
|
}
|
||||||
|
if (endToken && endToken->str() == "{" && Token::simpleMatch(endToken->link(), "} ;"))
|
||||||
|
Token::eraseTokens(tok, endToken->link()->next());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue