| 283 | } |
| 284 | |
| 285 | void CheckInternalImpl::checkRedundantNextPrevious() |
| 286 | { |
| 287 | const SymbolDatabase *symbolDatabase = mTokenizer->getSymbolDatabase(); |
| 288 | for (const Scope* scope : symbolDatabase->functionScopes) { |
| 289 | for (const Token* tok = scope->bodyStart->next(); tok != scope->bodyEnd; tok = tok->next()) { |
| 290 | if (tok->str() != ".") |
| 291 | continue; |
| 292 | tok = tok->next(); |
| 293 | |
| 294 | if (Token::Match(tok, "previous ( ) . previous|next|tokAt|str|strAt|link|linkAt (") || Token::Match(tok, "next ( ) . previous|next|tokAt|str|strAt|link|linkAt (") || |
| 295 | (Token::simpleMatch(tok, "tokAt (") && Token::Match(tok->linkAt(1), ") . previous|next|tokAt|strAt|linkAt|str|link ("))) { |
| 296 | const std::string& func1 = tok->str(); |
| 297 | const std::string& func2 = tok->linkAt(1)->strAt(2); |
| 298 | |
| 299 | if ((func2 == "previous" || func2 == "next" || func2 == "str" || func2 == "link") && tok->linkAt(1)->strAt(4) != ")") |
| 300 | continue; |
| 301 | |
| 302 | redundantNextPreviousError(tok, func1, func2); |
| 303 | } |
| 304 | } |
| 305 | } |
| 306 | } |
| 307 | |
| 308 | void CheckInternalImpl::checkExtraWhitespace() |
| 309 | { |
no test coverage detected