src/checks/level1/foreach.h (20 lines of code) (raw):
/*
SPDX-FileCopyrightText: 2015 Klarälvdalens Datakonsult AB a KDAB Group company info@kdab.com
SPDX-FileContributor: Sérgio Martins <sergio.martins@kdab.com>
SPDX-FileCopyrightText: 2015 Sergio Martins <smartins@kde.org>
SPDX-License-Identifier: LGPL-2.0-or-later
*/
#ifndef FOREACH_DETACHMENTS_H
#define FOREACH_DETACHMENTS_H
#include "checkbase.h"
#include <string>
namespace clang
{
class ForStmt;
class ValueDecl;
}
/**
* - Foreach:
* - Finds places where you're detaching the foreach container.
* - Finds places where big or non-trivial types are passed by value instead of const-ref.
* - Finds places where you're using foreach on STL containers. It causes deep-copy.
* - For Range Loops:
* - Finds places where you're using C++11 for range loops with Qt containers. (potential detach)
*/
class Foreach : public CheckBase
{
public:
Foreach(const std::string &name, ClazyContext *context);
void VisitStmt(clang::Stmt *stmt) override;
private:
void checkBigTypeMissingRef();
bool containsDetachments(clang::Stmt *stmt, clang::ValueDecl *containerValueDecl);
clang::ForStmt *m_lastForStmt = nullptr;
};
#endif