File indexing completed on 2024-05-12 05:40:58
0001 /* 0002 SPDX-FileCopyrightText: 2017 Klarälvdalens Datakonsult AB a KDAB Group company info@kdab.com 0003 SPDX-FileContributor: Sérgio Martins <sergio.martins@kdab.com> 0004 0005 SPDX-License-Identifier: LGPL-2.0-or-later 0006 */ 0007 0008 #include "qlatin1string-non-ascii.h" 0009 #include "HierarchyUtils.h" 0010 #include "Utils.h" 0011 0012 #include <clang/AST/DeclCXX.h> 0013 #include <clang/AST/Expr.h> 0014 #include <clang/AST/ExprCXX.h> 0015 #include <clang/AST/Stmt.h> 0016 #include <clang/Basic/LLVM.h> 0017 #include <llvm/Support/Casting.h> 0018 0019 class ClazyContext; 0020 0021 using namespace clang; 0022 0023 QLatin1StringNonAscii::QLatin1StringNonAscii(const std::string &name, ClazyContext *context) 0024 : CheckBase(name, context, Option_CanIgnoreIncludes) 0025 { 0026 } 0027 0028 void QLatin1StringNonAscii::VisitStmt(clang::Stmt *stmt) 0029 { 0030 auto *constructExpr = dyn_cast<CXXConstructExpr>(stmt); 0031 CXXConstructorDecl *ctor = constructExpr ? constructExpr->getConstructor() : nullptr; 0032 0033 if (!ctor || ctor->getQualifiedNameAsString() != "QLatin1String::QLatin1String") { 0034 return; 0035 } 0036 0037 auto *lt = clazy::getFirstChildOfType2<StringLiteral>(stmt); 0038 if (lt && !Utils::isAscii(lt)) { 0039 emitWarning(stmt, "QLatin1String with non-ascii literal"); 0040 } 0041 }