File indexing completed on 2024-04-28 05:38:35

0001 /*
0002     SPDX-FileCopyrightText: 2015 Sergio Martins <smartins@kde.org>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #include "ruleofbase.h"
0008 #include "StringUtils.h"
0009 #include "clazy_stl.h"
0010 
0011 #include <clang/AST/DeclCXX.h>
0012 
0013 #include <vector>
0014 
0015 class ClazyContext;
0016 
0017 using namespace clang;
0018 
0019 RuleOfBase::RuleOfBase(const std::string &name, ClazyContext *context)
0020     : CheckBase(name, context)
0021 {
0022 }
0023 
0024 bool RuleOfBase::isBlacklisted(CXXRecordDecl *record) const
0025 {
0026     if (!record || clazy::startsWith(record->getQualifiedNameAsString(), "std::")) {
0027         return true;
0028     }
0029 
0030     const auto qualifiedName = clazy::classNameFor(record);
0031 
0032     static const std::vector<std::string> blacklisted = {
0033         "QAtomicInt",
0034         "QBasicAtomicInteger",
0035         "QAtomicInteger",
0036         "QBasicAtomicPointer",
0037         "QList::iterator",
0038         "QList::const_iterator",
0039         "QTextBlock::iterator",
0040         "QAtomicPointer",
0041         "QtPrivate::ConverterMemberFunction",
0042         "QtPrivate::ConverterMemberFunctionOk",
0043         "QtPrivate::ConverterFunctor",
0044         "QtMetaTypePrivate::VariantData",
0045         "QScopedArrayPointer",
0046         "QtPrivate::AlignOfHelper",
0047         "QColor",
0048         "QCharRef",
0049         "QByteRef",
0050         "QObjectPrivate::Connection",
0051         "QMutableListIterator",
0052         "QStringList",
0053         "QVariant::Private",
0054         "QModelIndex", // Qt4
0055         "QPair", // Qt4
0056         "QSet", // Fixed for Qt 5.7
0057         "QSet::iterator",
0058         "QSet::const_iterator",
0059         "QLinkedList::iterator",
0060         "QLinkedList::const_iterator",
0061         "QJsonArray::const_iterator",
0062         "QJsonArray::iterator",
0063         "QTextFrame::iterator",
0064         "QFuture::const_iterator",
0065         "QFuture::iterator",
0066         "QMatrix",
0067         "QBitRef",
0068         "QJsonValueRef",
0069         "QTypedArrayData::iterator",
0070     };
0071     return clazy::contains(blacklisted, qualifiedName);
0072 }