File indexing completed on 2024-05-12 17:13:11

0001 /*
0002     This file is part of the clazy static checker.
0003 
0004     Copyright (C) 2016-2017 Sergio Martins <smartins@kde.org>
0005 
0006     This library is free software; you can redistribute it and/or
0007     modify it under the terms of the GNU Library General Public
0008     License as published by the Free Software Foundation; either
0009     version 2 of the License, or (at your option) any later version.
0010 
0011     This library is distributed in the hope that it will be useful,
0012     but WITHOUT ANY WARRANTY; without even the implied warranty of
0013     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
0014     Library General Public License for more details.
0015 
0016     You should have received a copy of the GNU Library General Public License
0017     along with this library; see the file COPYING.LIB.  If not, write to
0018     the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
0019     Boston, MA 02110-1301, USA.
0020 */
0021 
0022 #ifndef CLAZY_UNUSED_NON_TRIVIAL_VARIABLE_H
0023 #define CLAZY_UNUSED_NON_TRIVIAL_VARIABLE_H
0024 
0025 #include "checkbase.h"
0026 
0027 #include <string>
0028 #include <vector>
0029 
0030 class ClazyContext;
0031 
0032 namespace clang {
0033 class Stmt;
0034 class VarDecl;
0035 class CXXRecordDecl;
0036 class QualType;
0037 }
0038 
0039 /**
0040  * Warns about unused Qt value classes.
0041  * Compilers usually only warn when trivial classes are unused and don't emit warnings for non-trivial classes.
0042  * This check has a whitelist of common Qt classes such as containers, QFont, QUrl, etc and warns for those too.
0043  *
0044  * See README-unused-non-trivial-variable.md for more information
0045  */
0046 class UnusedNonTrivialVariable
0047     : public CheckBase
0048 {
0049 public:
0050     explicit UnusedNonTrivialVariable(const std::string &name, ClazyContext *context);
0051     void VisitStmt(clang::Stmt *stmt) override;
0052 private:
0053     void handleVarDecl(clang::VarDecl *varDecl);
0054     bool isInterestingType(clang::QualType t) const;
0055     bool isUninterestingType(const clang::CXXRecordDecl *record) const;
0056     std::vector<std::string> m_userBlacklist;
0057     std::vector<std::string> m_userWhitelist;
0058 };
0059 
0060 #endif