bool UnusedNonTrivialVariable::isInterestingType()

in src/checks/level0/unused-non-trivial-variable.cpp [110:198]


bool UnusedNonTrivialVariable::isInterestingType(QualType t) const
{
    // TODO Remove QColor in Qt6
    static const std::vector<StringRef> nonTrivialTypes = {
        "QColor",
        "QVariant",
        "QFont",
        "QUrl",
        "QIcon",
        "QImage",
        "QPixmap",
        "QPicture",
        "QBitmap",
        "QBrush",
        "QPen",
        "QBuffer",
        "QCache",
        "QDateTime",
        "QDir",
        "QEvent",
        "QFileInfo",
        "QFontInfo",
        "QFontMetrics",
        "QJSValue",
        "QLocale",
        "QRegularExpression",
        "QRegExp",
        "QUrlQuery",
        "QStorageInfo",
        "QPersistentModelIndex",
        "QJsonArray",
        "QJsonValue",
        "QJsonDocument",
        "QMimeType",
        "QBitArray",
        "QCollator",
        "QByteArrayList",
        "QCollatorSortKey",
        "QCursor",
        "QPalette",
        "QPainterPath",
        "QRegion",
        "QFontInfo",
        "QTextCursor",
        "QStaticText",
        "QFontMetricsF",
        "QTextFrameFormat",
        "QTextImageFormat",
        "QNetworkCookie",
        "QNetworkRequest",
        "QNetworkConfiguration",
        "QHostAddress",
        "QSqlQuery",
        "QSqlRecord",
        "QSqlField",
        "QLine",
        "QLineF",
        "QRect",
        "QRectF",
        "QDomNode",
    };

    const CXXRecordDecl *record = clazy::typeAsRecord(t);
    if (!record) {
        return false;
    }

    if (isOptionSet("no-whitelist")) {
        // Will cause too many false-positives, like RAII classes. Use suppressing comments to silence them.
        return !isUninterestingType(record);
    }

    if (clazy::isQtContainer(record)) {
        return true;
    }

    StringRef typeName = clazy::name(record);
    bool any = clazy::any_of(nonTrivialTypes, [typeName](StringRef container) {
        return container == typeName;
    });

    if (any) {
        return true;
    }

    return clazy::any_of(m_userWhitelist, [typeName](const std::string &container) {
        return container == typeName;
    });
}