================ @@ -0,0 +1,160 @@ +//===----------------------------------------------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#include "SmartPtrInitializationCheck.h" +#include "../utils/OptionsUtils.h" +#include "clang/AST/ASTContext.h" +#include "clang/AST/DeclCXX.h" +#include "clang/ASTMatchers/ASTMatchFinder.h" +#include "clang/ASTMatchers/ASTMatchers.h" + +using namespace clang::ast_matchers; + +namespace clang::tidy::bugprone { + +namespace { + +const auto DefaultSharedPointers = "::std::shared_ptr;::boost::shared_ptr"; +const auto DefaultUniquePointers = "::std::unique_ptr"; +const auto DefaultDefaultDeleters = "::std::default_delete"; + +} // namespace + +SmartPtrInitializationCheck::SmartPtrInitializationCheck( + StringRef Name, ClangTidyContext *Context) + : ClangTidyCheck(Name, Context), + SharedPointers(utils::options::parseStringList( + Options.get("SharedPointers", DefaultSharedPointers))), + UniquePointers(utils::options::parseStringList( + Options.get("UniquePointers", DefaultUniquePointers))), + DefaultDeleters(utils::options::parseStringList( + Options.get("DefaultDeleters", DefaultDefaultDeleters))) {} + +void SmartPtrInitializationCheck::storeOptions( + ClangTidyOptions::OptionMap &Opts) { + Options.store(Opts, "SharedPointers", + utils::options::serializeStringList(SharedPointers)); + Options.store(Opts, "UniquePointers", + utils::options::serializeStringList(UniquePointers)); + Options.store(Opts, "DefaultDeleters", + utils::options::serializeStringList(DefaultDeleters)); +} + +void SmartPtrInitializationCheck::registerMatchers(MatchFinder *Finder) { + const auto IsSharedPtr = hasAnyName(SharedPointers); + const auto IsUniquePtr = hasAnyName(UniquePointers); + const auto IsSmartPtr = anyOf(IsSharedPtr, IsUniquePtr); + const auto IsDefaultDeleter = hasAnyName(DefaultDeleters); + + const auto IsSharedPtrRecord = cxxRecordDecl(IsSharedPtr); + const auto IsUniquePtrRecord = cxxRecordDecl(IsUniquePtr); + const auto IsSmartPtrRecord = cxxRecordDecl(IsSmartPtr); + + auto ReleaseMethod = cxxMethodDecl(hasName("release")); + auto ResetMethod = cxxMethodDecl(hasName("reset")); ---------------- vbvictor wrote:
Are these needed as separate variables? All of them are used only once. https://github.com/llvm/llvm-project/pull/181570 _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
