Author: alexfh Date: Mon Mar 9 07:18:39 2015 New Revision: 231650 URL: http://llvm.org/viewvc/llvm-project?rev=231650&view=rev Log: [clang-tidy] Refactor: Rename clang-tidy readability check files and classes to follow naming conventions
Classes are named WhateverCheck, files are WhateverCheck.cpp and` WhateverCheck.h` http://reviews.llvm.org/D8144 Patch by Richard Thomson! Added: clang-tools-extra/trunk/clang-tidy/readability/ContainerSizeEmptyCheck.cpp - copied, changed from r231648, clang-tools-extra/trunk/clang-tidy/readability/ContainerSizeEmpty.cpp clang-tools-extra/trunk/clang-tidy/readability/ContainerSizeEmptyCheck.h - copied, changed from r231648, clang-tools-extra/trunk/clang-tidy/readability/ContainerSizeEmpty.h clang-tools-extra/trunk/clang-tidy/readability/FunctionSizeCheck.cpp - copied, changed from r231648, clang-tools-extra/trunk/clang-tidy/readability/FunctionSize.cpp clang-tools-extra/trunk/clang-tidy/readability/FunctionSizeCheck.h - copied, changed from r231648, clang-tools-extra/trunk/clang-tidy/readability/FunctionSize.h clang-tools-extra/trunk/clang-tidy/readability/RedundantSmartptrGetCheck.cpp - copied, changed from r231648, clang-tools-extra/trunk/clang-tidy/readability/RedundantSmartptrGet.cpp clang-tools-extra/trunk/clang-tidy/readability/RedundantSmartptrGetCheck.h - copied, changed from r231648, clang-tools-extra/trunk/clang-tidy/readability/RedundantSmartptrGet.h Removed: clang-tools-extra/trunk/clang-tidy/readability/ContainerSizeEmpty.cpp clang-tools-extra/trunk/clang-tidy/readability/ContainerSizeEmpty.h clang-tools-extra/trunk/clang-tidy/readability/FunctionSize.cpp clang-tools-extra/trunk/clang-tidy/readability/FunctionSize.h clang-tools-extra/trunk/clang-tidy/readability/RedundantSmartptrGet.cpp clang-tools-extra/trunk/clang-tidy/readability/RedundantSmartptrGet.h Modified: clang-tools-extra/trunk/clang-tidy/google/GoogleTidyModule.cpp clang-tools-extra/trunk/clang-tidy/readability/CMakeLists.txt clang-tools-extra/trunk/clang-tidy/readability/ReadabilityTidyModule.cpp Modified: clang-tools-extra/trunk/clang-tidy/google/GoogleTidyModule.cpp URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/google/GoogleTidyModule.cpp?rev=231650&r1=231649&r2=231650&view=diff ============================================================================== --- clang-tools-extra/trunk/clang-tidy/google/GoogleTidyModule.cpp (original) +++ clang-tools-extra/trunk/clang-tidy/google/GoogleTidyModule.cpp Mon Mar 9 07:18:39 2015 @@ -11,9 +11,9 @@ #include "../ClangTidyModule.h" #include "../ClangTidyModuleRegistry.h" #include "../readability/BracesAroundStatementsCheck.h" -#include "../readability/FunctionSize.h" +#include "../readability/FunctionSizeCheck.h" #include "../readability/NamespaceCommentCheck.h" -#include "../readability/RedundantSmartptrGet.h" +#include "../readability/RedundantSmartptrGetCheck.h" #include "AvoidCStyleCastsCheck.h" #include "ExplicitConstructorCheck.h" #include "ExplicitMakePairCheck.h" @@ -69,7 +69,7 @@ public: .registerCheck<clang::tidy::readability::NamespaceCommentCheck>( "google-readability-namespace-comments"); CheckFactories - .registerCheck<clang::tidy::readability::RedundantSmartptrGet>( + .registerCheck<clang::tidy::readability::RedundantSmartptrGetCheck>( "google-readability-redundant-smartptr-get"); } Modified: clang-tools-extra/trunk/clang-tidy/readability/CMakeLists.txt URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/readability/CMakeLists.txt?rev=231650&r1=231649&r2=231650&view=diff ============================================================================== --- clang-tools-extra/trunk/clang-tidy/readability/CMakeLists.txt (original) +++ clang-tools-extra/trunk/clang-tidy/readability/CMakeLists.txt Mon Mar 9 07:18:39 2015 @@ -2,12 +2,12 @@ set(LLVM_LINK_COMPONENTS support) add_clang_library(clangTidyReadabilityModule BracesAroundStatementsCheck.cpp - ContainerSizeEmpty.cpp + ContainerSizeEmptyCheck.cpp ElseAfterReturnCheck.cpp - FunctionSize.cpp + FunctionSizeCheck.cpp NamespaceCommentCheck.cpp ReadabilityTidyModule.cpp - RedundantSmartptrGet.cpp + RedundantSmartptrGetCheck.cpp ShrinkToFitCheck.cpp LINK_LIBS Removed: clang-tools-extra/trunk/clang-tidy/readability/ContainerSizeEmpty.cpp URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/readability/ContainerSizeEmpty.cpp?rev=231649&view=auto ============================================================================== --- clang-tools-extra/trunk/clang-tidy/readability/ContainerSizeEmpty.cpp (original) +++ clang-tools-extra/trunk/clang-tidy/readability/ContainerSizeEmpty.cpp (removed) @@ -1,163 +0,0 @@ -//===--- ContainerSizeEmpty.cpp - clang-tidy ------------------------------===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -#include "ContainerSizeEmpty.h" -#include "clang/AST/ASTContext.h" -#include "clang/ASTMatchers/ASTMatchers.h" -#include "clang/Lex/Lexer.h" -#include "llvm/ADT/StringRef.h" -#include "llvm/ADT/StringSet.h" - -using namespace clang::ast_matchers; - -namespace { -bool isContainer(llvm::StringRef ClassName) { - static const llvm::StringSet<> ContainerNames = [] { - llvm::StringSet<> RetVal; - RetVal.insert("std::vector"); - RetVal.insert("std::list"); - RetVal.insert("std::array"); - RetVal.insert("std::deque"); - RetVal.insert("std::forward_list"); - RetVal.insert("std::set"); - RetVal.insert("std::map"); - RetVal.insert("std::multiset"); - RetVal.insert("std::multimap"); - RetVal.insert("std::unordered_set"); - RetVal.insert("std::unordered_map"); - RetVal.insert("std::unordered_multiset"); - RetVal.insert("std::unordered_multimap"); - RetVal.insert("std::stack"); - RetVal.insert("std::queue"); - RetVal.insert("std::priority_queue"); - return RetVal; - }(); - return ContainerNames.find(ClassName) != ContainerNames.end(); -} -} // namespace - -namespace clang { -namespace ast_matchers { -AST_MATCHER(QualType, isBoolType) { return Node->isBooleanType(); } - -AST_MATCHER(NamedDecl, stlContainer) { - return isContainer(Node.getQualifiedNameAsString()); -} -} // namespace ast_matchers -} // namespace clang - -namespace clang { -namespace tidy { -namespace readability { - -ContainerSizeEmptyCheck::ContainerSizeEmptyCheck(StringRef Name, - ClangTidyContext *Context) - : ClangTidyCheck(Name, Context) {} - -void ContainerSizeEmptyCheck::registerMatchers(MatchFinder *Finder) { - const auto WrongUse = anyOf( - hasParent( - binaryOperator( - anyOf(has(integerLiteral(equals(0))), - allOf(anyOf(hasOperatorName("<"), hasOperatorName(">="), - hasOperatorName(">"), hasOperatorName("<=")), - hasEitherOperand(integerLiteral(equals(1)))))) - .bind("SizeBinaryOp")), - hasParent(implicitCastExpr( - hasImplicitDestinationType(isBoolType()), - anyOf( - hasParent(unaryOperator(hasOperatorName("!")).bind("NegOnSize")), - anything()))), - hasParent(explicitCastExpr(hasDestinationType(isBoolType())))); - - Finder->addMatcher( - memberCallExpr( - on(expr(anyOf(hasType(namedDecl(stlContainer())), - hasType(pointsTo(namedDecl(stlContainer()))), - hasType(references(namedDecl(stlContainer()))))) - .bind("STLObject")), - callee(methodDecl(hasName("size"))), WrongUse).bind("SizeCallExpr"), - this); -} - -void ContainerSizeEmptyCheck::check(const MatchFinder::MatchResult &Result) { - const auto *MemberCall = - Result.Nodes.getNodeAs<CXXMemberCallExpr>("SizeCallExpr"); - const auto *BinaryOp = Result.Nodes.getNodeAs<BinaryOperator>("SizeBinaryOp"); - const auto *E = Result.Nodes.getNodeAs<Expr>("STLObject"); - FixItHint Hint; - std::string ReplacementText = Lexer::getSourceText( - CharSourceRange::getTokenRange(E->getSourceRange()), - *Result.SourceManager, Result.Context->getLangOpts()); - if (E->getType()->isPointerType()) - ReplacementText += "->empty()"; - else - ReplacementText += ".empty()"; - - if (BinaryOp) { // Determine the correct transformation. - bool Negation = false; - const bool ContainerIsLHS = !llvm::isa<IntegerLiteral>(BinaryOp->getLHS()); - const auto OpCode = BinaryOp->getOpcode(); - uint64_t Value = 0; - if (ContainerIsLHS) { - if (const auto *Literal = - llvm::dyn_cast<IntegerLiteral>(BinaryOp->getRHS())) - Value = Literal->getValue().getLimitedValue(); - else - return; - } else { - Value = llvm::dyn_cast<IntegerLiteral>(BinaryOp->getLHS()) - ->getValue() - .getLimitedValue(); - } - - // Constant that is not handled. - if (Value > 1) - return; - - // Always true, no warnings for that. - if ((OpCode == BinaryOperatorKind::BO_GE && Value == 0 && ContainerIsLHS) || - (OpCode == BinaryOperatorKind::BO_LE && Value == 0 && !ContainerIsLHS)) - return; - - if (OpCode == BinaryOperatorKind::BO_NE && Value == 0) - Negation = true; - if ((OpCode == BinaryOperatorKind::BO_GT || - OpCode == BinaryOperatorKind::BO_GE) && - ContainerIsLHS) - Negation = true; - if ((OpCode == BinaryOperatorKind::BO_LT || - OpCode == BinaryOperatorKind::BO_LE) && - !ContainerIsLHS) - Negation = true; - - if (Negation) - ReplacementText = "!" + ReplacementText; - Hint = FixItHint::CreateReplacement(BinaryOp->getSourceRange(), - ReplacementText); - - } else { - // If there is a conversion above the size call to bool, it is safe to just - // replace size with empty. - if (const auto *UnaryOp = - Result.Nodes.getNodeAs<UnaryOperator>("NegOnSize")) - Hint = FixItHint::CreateReplacement(UnaryOp->getSourceRange(), - ReplacementText); - else - Hint = FixItHint::CreateReplacement(MemberCall->getSourceRange(), - "!" + ReplacementText); - } - diag(MemberCall->getLocStart(), - "The 'empty' method should be used to check for emptiness instead " - "of 'size'.") - << Hint; -} - -} // namespace readability -} // namespace tidy -} // namespace clang Removed: clang-tools-extra/trunk/clang-tidy/readability/ContainerSizeEmpty.h URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/readability/ContainerSizeEmpty.h?rev=231649&view=auto ============================================================================== --- clang-tools-extra/trunk/clang-tidy/readability/ContainerSizeEmpty.h (original) +++ clang-tools-extra/trunk/clang-tidy/readability/ContainerSizeEmpty.h (removed) @@ -1,40 +0,0 @@ -//===--- ContainerSizeEmpty.h - clang-tidy ----------------------*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -#ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_READABILITY_CONTAINERSIZEEMPTY_H -#define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_READABILITY_CONTAINERSIZEEMPTY_H - -#include "../ClangTidy.h" - -namespace clang { -namespace tidy { -namespace readability { - -/// \brief Checks whether a call to the \c size() method can be replaced with a -/// call to \c empty(). -/// -/// The emptiness of a container should be checked using the \c empty() method -/// instead of the \c size() method. It is not guaranteed that \c size() is a -/// constant-time function, and it is generally more efficient and also shows -/// clearer intent to use \c empty(). Furthermore some containers may implement -/// the \c empty() method but not implement the \c size() method. Using \c -/// empty() whenever possible makes it easier to switch to another container in -/// the future. -class ContainerSizeEmptyCheck : public ClangTidyCheck { -public: - ContainerSizeEmptyCheck(StringRef Name, ClangTidyContext *Context); - void registerMatchers(ast_matchers::MatchFinder *Finder) override; - void check(const ast_matchers::MatchFinder::MatchResult &Result) override; -}; - -} // namespace readability -} // namespace tidy -} // namespace clang - -#endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_READABILITY_CONTAINERSIZEEMPTY_H Copied: clang-tools-extra/trunk/clang-tidy/readability/ContainerSizeEmptyCheck.cpp (from r231648, clang-tools-extra/trunk/clang-tidy/readability/ContainerSizeEmpty.cpp) URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/readability/ContainerSizeEmptyCheck.cpp?p2=clang-tools-extra/trunk/clang-tidy/readability/ContainerSizeEmptyCheck.cpp&p1=clang-tools-extra/trunk/clang-tidy/readability/ContainerSizeEmpty.cpp&r1=231648&r2=231650&rev=231650&view=diff ============================================================================== --- clang-tools-extra/trunk/clang-tidy/readability/ContainerSizeEmpty.cpp (original) +++ clang-tools-extra/trunk/clang-tidy/readability/ContainerSizeEmptyCheck.cpp Mon Mar 9 07:18:39 2015 @@ -1,4 +1,4 @@ -//===--- ContainerSizeEmpty.cpp - clang-tidy ------------------------------===// +//===--- ContainerSizeEmptyCheck.cpp - clang-tidy -------------------------===// // // The LLVM Compiler Infrastructure // @@ -6,7 +6,7 @@ // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// -#include "ContainerSizeEmpty.h" +#include "ContainerSizeEmptyCheck.h" #include "clang/AST/ASTContext.h" #include "clang/ASTMatchers/ASTMatchers.h" #include "clang/Lex/Lexer.h" Copied: clang-tools-extra/trunk/clang-tidy/readability/ContainerSizeEmptyCheck.h (from r231648, clang-tools-extra/trunk/clang-tidy/readability/ContainerSizeEmpty.h) URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/readability/ContainerSizeEmptyCheck.h?p2=clang-tools-extra/trunk/clang-tidy/readability/ContainerSizeEmptyCheck.h&p1=clang-tools-extra/trunk/clang-tidy/readability/ContainerSizeEmpty.h&r1=231648&r2=231650&rev=231650&view=diff ============================================================================== --- clang-tools-extra/trunk/clang-tidy/readability/ContainerSizeEmpty.h (original) +++ clang-tools-extra/trunk/clang-tidy/readability/ContainerSizeEmptyCheck.h Mon Mar 9 07:18:39 2015 @@ -1,4 +1,4 @@ -//===--- ContainerSizeEmpty.h - clang-tidy ----------------------*- C++ -*-===// +//===--- ContainerSizeEmptyCheck.h - clang-tidy -----------------*- C++ -*-===// // // The LLVM Compiler Infrastructure // @@ -7,8 +7,8 @@ // //===----------------------------------------------------------------------===// -#ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_READABILITY_CONTAINERSIZEEMPTY_H -#define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_READABILITY_CONTAINERSIZEEMPTY_H +#ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_READABILITY_CONTAINERSIZEEMPTYCHECK_H +#define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_READABILITY_CONTAINERSIZEEMPTYCHECK_H #include "../ClangTidy.h" @@ -37,4 +37,4 @@ public: } // namespace tidy } // namespace clang -#endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_READABILITY_CONTAINERSIZEEMPTY_H +#endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_READABILITY_CONTAINERSIZEEMPTYCHECK_H Removed: clang-tools-extra/trunk/clang-tidy/readability/FunctionSize.cpp URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/readability/FunctionSize.cpp?rev=231649&view=auto ============================================================================== --- clang-tools-extra/trunk/clang-tidy/readability/FunctionSize.cpp (original) +++ clang-tools-extra/trunk/clang-tidy/readability/FunctionSize.cpp (removed) @@ -1,106 +0,0 @@ -//===--- FunctionSize.cpp - clang-tidy ------------------------------------===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -#include "FunctionSize.h" -#include "clang/ASTMatchers/ASTMatchFinder.h" - -using namespace clang::ast_matchers; - -namespace clang { -namespace tidy { -namespace readability { - -FunctionSizeCheck::FunctionSizeCheck(StringRef Name, ClangTidyContext *Context) - : ClangTidyCheck(Name, Context), - LineThreshold(Options.get("LineThreshold", -1U)), - StatementThreshold(Options.get("StatementThreshold", 800U)), - BranchThreshold(Options.get("BranchThreshold", -1U)) {} - -void FunctionSizeCheck::storeOptions(ClangTidyOptions::OptionMap &Opts) { - Options.store(Opts, "LineThreshold", LineThreshold); - Options.store(Opts, "StatementThreshold", StatementThreshold); - Options.store(Opts, "BranchThreshold", BranchThreshold); -} - -void FunctionSizeCheck::registerMatchers(MatchFinder *Finder) { - Finder->addMatcher( - functionDecl( - unless(isInstantiated()), - forEachDescendant( - stmt(unless(compoundStmt()), - hasParent(stmt(anyOf(compoundStmt(), ifStmt(), - anyOf(whileStmt(), doStmt(), - forRangeStmt(), forStmt()))))) - .bind("stmt"))).bind("func"), - this); -} - -void FunctionSizeCheck::check(const MatchFinder::MatchResult &Result) { - const auto *Func = Result.Nodes.getNodeAs<FunctionDecl>("func"); - - FunctionInfo &FI = FunctionInfos[Func]; - - // Count the lines including whitespace and comments. Really simple. - if (!FI.Lines) { - if (const Stmt *Body = Func->getBody()) { - SourceManager *SM = Result.SourceManager; - if (SM->isWrittenInSameFile(Body->getLocStart(), Body->getLocEnd())) { - FI.Lines = SM->getSpellingLineNumber(Body->getLocEnd()) - - SM->getSpellingLineNumber(Body->getLocStart()); - } - } - } - - const auto *Statement = Result.Nodes.getNodeAs<Stmt>("stmt"); - ++FI.Statements; - - // TODO: switch cases, gotos - if (isa<IfStmt>(Statement) || isa<WhileStmt>(Statement) || - isa<ForStmt>(Statement) || isa<SwitchStmt>(Statement) || - isa<DoStmt>(Statement) || isa<CXXForRangeStmt>(Statement)) - ++FI.Branches; -} - -void FunctionSizeCheck::onEndOfTranslationUnit() { - // If we're above the limit emit a warning. - for (const auto &P : FunctionInfos) { - const FunctionInfo &FI = P.second; - if (FI.Lines > LineThreshold || FI.Statements > StatementThreshold || - FI.Branches > BranchThreshold) { - diag(P.first->getLocation(), - "function '%0' exceeds recommended size/complexity thresholds") - << P.first->getNameAsString(); - } - - if (FI.Lines > LineThreshold) { - diag(P.first->getLocation(), - "%0 lines including whitespace and comments (threshold %1)", - DiagnosticIDs::Note) - << FI.Lines << LineThreshold; - } - - if (FI.Statements > StatementThreshold) { - diag(P.first->getLocation(), "%0 statements (threshold %1)", - DiagnosticIDs::Note) - << FI.Statements << StatementThreshold; - } - - if (FI.Branches > BranchThreshold) { - diag(P.first->getLocation(), "%0 branches (threshold %1)", - DiagnosticIDs::Note) - << FI.Branches << BranchThreshold; - } - } - - FunctionInfos.clear(); -} - -} // namespace readability -} // namespace tidy -} // namespace clang Removed: clang-tools-extra/trunk/clang-tidy/readability/FunctionSize.h URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/readability/FunctionSize.h?rev=231649&view=auto ============================================================================== --- clang-tools-extra/trunk/clang-tidy/readability/FunctionSize.h (original) +++ clang-tools-extra/trunk/clang-tidy/readability/FunctionSize.h (removed) @@ -1,48 +0,0 @@ -//===--- FunctionSize.h - clang-tidy ----------------------------*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -#ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_READABILITY_FUNCTIONSIZE_H -#define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_READABILITY_FUNCTIONSIZE_H - -#include "../ClangTidy.h" - -namespace clang { -namespace tidy { -namespace readability { - -/// \brief Checks for large functions based on various metrics. -class FunctionSizeCheck : public ClangTidyCheck { -public: - FunctionSizeCheck(StringRef Name, ClangTidyContext *Context); - - void storeOptions(ClangTidyOptions::OptionMap &Opts) override; - void registerMatchers(ast_matchers::MatchFinder *Finder) override; - void check(const ast_matchers::MatchFinder::MatchResult &Result) override; - void onEndOfTranslationUnit() override; - -private: - struct FunctionInfo { - FunctionInfo() : Lines(0), Statements(0), Branches(0) {} - unsigned Lines; - unsigned Statements; - unsigned Branches; - }; - - const unsigned LineThreshold; - const unsigned StatementThreshold; - const unsigned BranchThreshold; - - llvm::DenseMap<const FunctionDecl *, FunctionInfo> FunctionInfos; -}; - -} // namespace readability -} // namespace tidy -} // namespace clang - -#endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_READABILITY_FUNCTIONSIZE_H Copied: clang-tools-extra/trunk/clang-tidy/readability/FunctionSizeCheck.cpp (from r231648, clang-tools-extra/trunk/clang-tidy/readability/FunctionSize.cpp) URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/readability/FunctionSizeCheck.cpp?p2=clang-tools-extra/trunk/clang-tidy/readability/FunctionSizeCheck.cpp&p1=clang-tools-extra/trunk/clang-tidy/readability/FunctionSize.cpp&r1=231648&r2=231650&rev=231650&view=diff ============================================================================== --- clang-tools-extra/trunk/clang-tidy/readability/FunctionSize.cpp (original) +++ clang-tools-extra/trunk/clang-tidy/readability/FunctionSizeCheck.cpp Mon Mar 9 07:18:39 2015 @@ -7,7 +7,7 @@ // //===----------------------------------------------------------------------===// -#include "FunctionSize.h" +#include "FunctionSizeCheck.h" #include "clang/ASTMatchers/ASTMatchFinder.h" using namespace clang::ast_matchers; Copied: clang-tools-extra/trunk/clang-tidy/readability/FunctionSizeCheck.h (from r231648, clang-tools-extra/trunk/clang-tidy/readability/FunctionSize.h) URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/readability/FunctionSizeCheck.h?p2=clang-tools-extra/trunk/clang-tidy/readability/FunctionSizeCheck.h&p1=clang-tools-extra/trunk/clang-tidy/readability/FunctionSize.h&r1=231648&r2=231650&rev=231650&view=diff ============================================================================== --- clang-tools-extra/trunk/clang-tidy/readability/FunctionSize.h (original) +++ clang-tools-extra/trunk/clang-tidy/readability/FunctionSizeCheck.h Mon Mar 9 07:18:39 2015 @@ -1,4 +1,4 @@ -//===--- FunctionSize.h - clang-tidy ----------------------------*- C++ -*-===// +//===--- FunctionSizeCheck.h - clang-tidy -----------------------*- C++ -*-===// // // The LLVM Compiler Infrastructure // @@ -7,8 +7,8 @@ // //===----------------------------------------------------------------------===// -#ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_READABILITY_FUNCTIONSIZE_H -#define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_READABILITY_FUNCTIONSIZE_H +#ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_READABILITY_FUNCTIONSIZECHECK_H +#define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_READABILITY_FUNCTIONSIZECHECK_H #include "../ClangTidy.h" @@ -45,4 +45,4 @@ private: } // namespace tidy } // namespace clang -#endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_READABILITY_FUNCTIONSIZE_H +#endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_READABILITY_FUNCTIONSIZECHECK_H Modified: clang-tools-extra/trunk/clang-tidy/readability/ReadabilityTidyModule.cpp URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/readability/ReadabilityTidyModule.cpp?rev=231650&r1=231649&r2=231650&view=diff ============================================================================== --- clang-tools-extra/trunk/clang-tidy/readability/ReadabilityTidyModule.cpp (original) +++ clang-tools-extra/trunk/clang-tidy/readability/ReadabilityTidyModule.cpp Mon Mar 9 07:18:39 2015 @@ -11,10 +11,10 @@ #include "../ClangTidyModule.h" #include "../ClangTidyModuleRegistry.h" #include "BracesAroundStatementsCheck.h" -#include "ContainerSizeEmpty.h" +#include "ContainerSizeEmptyCheck.h" #include "ElseAfterReturnCheck.h" -#include "FunctionSize.h" -#include "RedundantSmartptrGet.h" +#include "FunctionSizeCheck.h" +#include "RedundantSmartptrGetCheck.h" #include "ShrinkToFitCheck.h" namespace clang { @@ -32,7 +32,7 @@ public: "readability-else-after-return"); CheckFactories.registerCheck<FunctionSizeCheck>( "readability-function-size"); - CheckFactories.registerCheck<RedundantSmartptrGet>( + CheckFactories.registerCheck<RedundantSmartptrGetCheck>( "readability-redundant-smartptr-get"); CheckFactories.registerCheck<ShrinkToFitCheck>( "readability-shrink-to-fit"); Removed: clang-tools-extra/trunk/clang-tidy/readability/RedundantSmartptrGet.cpp URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/readability/RedundantSmartptrGet.cpp?rev=231649&view=auto ============================================================================== --- clang-tools-extra/trunk/clang-tidy/readability/RedundantSmartptrGet.cpp (original) +++ clang-tools-extra/trunk/clang-tidy/readability/RedundantSmartptrGet.cpp (removed) @@ -1,123 +0,0 @@ -//===--- RedundantSmartptrGet.cpp - clang-tidy ----------------------------===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -#include "RedundantSmartptrGet.h" -#include "clang/ASTMatchers/ASTMatchFinder.h" -#include "clang/Lex/Lexer.h" - -using namespace clang::ast_matchers; - -namespace clang { -namespace tidy { -namespace readability { - -namespace { -internal::Matcher<Expr> callToGet(internal::Matcher<Decl> OnClass) { - return memberCallExpr( - on(expr(anyOf(hasType(OnClass), - hasType(qualType(pointsTo(decl(OnClass).bind( - "ptr_to_ptr")))))).bind("smart_pointer")), - unless(callee(memberExpr(hasObjectExpression(thisExpr())))), - callee(methodDecl(hasName("get")))).bind("redundant_get"); -} - -void registerMatchersForGetArrowStart(MatchFinder *Finder, - MatchFinder::MatchCallback *Callback) { - const auto QuacksLikeASmartptr = recordDecl( - recordDecl().bind("duck_typing"), - has(methodDecl(hasName("operator->"), - returns(qualType(pointsTo(type().bind("op->Type")))))), - has(methodDecl(hasName("operator*"), - returns(qualType(references(type().bind("op*Type")))))), - has(methodDecl(hasName("get"), - returns(qualType(pointsTo(type().bind("getType"))))))); - - // Catch 'ptr.get()->Foo()' - Finder->addMatcher(memberExpr(expr().bind("memberExpr"), isArrow(), - hasObjectExpression(ignoringImpCasts( - callToGet(QuacksLikeASmartptr)))), - Callback); - - // Catch '*ptr.get()' or '*ptr->get()' - Finder->addMatcher( - unaryOperator(hasOperatorName("*"), - hasUnaryOperand(callToGet(QuacksLikeASmartptr))), - Callback); -} - -void registerMatchersForGetEquals(MatchFinder *Finder, - MatchFinder::MatchCallback *Callback) { - // This one is harder to do with duck typing. - // The operator==/!= that we are looking for might be member or non-member, - // might be on global namespace or found by ADL, might be a template, etc. - // For now, lets keep a list of known standard types. - - const auto IsAKnownSmartptr = recordDecl( - anyOf(hasName("::std::unique_ptr"), hasName("::std::shared_ptr"))); - - // Matches against nullptr. - Finder->addMatcher( - binaryOperator(anyOf(hasOperatorName("=="), hasOperatorName("!=")), - hasEitherOperand(ignoringImpCasts(nullPtrLiteralExpr())), - hasEitherOperand(callToGet(IsAKnownSmartptr))), - Callback); - // TODO: Catch ptr.get() == other_ptr.get() -} - - -} // namespace - -void RedundantSmartptrGet::registerMatchers(MatchFinder *Finder) { - registerMatchersForGetArrowStart(Finder, this); - registerMatchersForGetEquals(Finder, this); -} - -namespace { -bool allReturnTypesMatch(const MatchFinder::MatchResult &Result) { - if (Result.Nodes.getNodeAs<Decl>("duck_typing") == nullptr) - return true; - // Verify that the types match. - // We can't do this on the matcher because the type nodes can be different, - // even though they represent the same type. This difference comes from how - // the type is referenced (eg. through a typedef, a type trait, etc). - const Type *OpArrowType = - Result.Nodes.getNodeAs<Type>("op->Type")->getUnqualifiedDesugaredType(); - const Type *OpStarType = - Result.Nodes.getNodeAs<Type>("op*Type")->getUnqualifiedDesugaredType(); - const Type *GetType = - Result.Nodes.getNodeAs<Type>("getType")->getUnqualifiedDesugaredType(); - return OpArrowType == OpStarType && OpArrowType == GetType; -} -} // namespace - -void RedundantSmartptrGet::check(const MatchFinder::MatchResult &Result) { - if (!allReturnTypesMatch(Result)) return; - - bool IsPtrToPtr = Result.Nodes.getNodeAs<Decl>("ptr_to_ptr") != nullptr; - bool IsMemberExpr = Result.Nodes.getNodeAs<Expr>("memberExpr") != nullptr; - const Expr *GetCall = Result.Nodes.getNodeAs<Expr>("redundant_get"); - const Expr *Smartptr = Result.Nodes.getNodeAs<Expr>("smart_pointer"); - - if (IsPtrToPtr && IsMemberExpr) { - // Ignore this case (eg. Foo->get()->DoSomething()); - return; - } - - StringRef SmartptrText = Lexer::getSourceText( - CharSourceRange::getTokenRange(Smartptr->getSourceRange()), - *Result.SourceManager, Result.Context->getLangOpts()); - // Replace foo->get() with *foo, and foo.get() with foo. - std::string Replacement = Twine(IsPtrToPtr ? "*" : "", SmartptrText).str(); - diag(GetCall->getLocStart(), "Redundant get() call on smart pointer.") - << FixItHint::CreateReplacement(GetCall->getSourceRange(), Replacement); -} - -} // namespace readability -} // namespace tidy -} // namespace clang Removed: clang-tools-extra/trunk/clang-tidy/readability/RedundantSmartptrGet.h URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/readability/RedundantSmartptrGet.h?rev=231649&view=auto ============================================================================== --- clang-tools-extra/trunk/clang-tidy/readability/RedundantSmartptrGet.h (original) +++ clang-tools-extra/trunk/clang-tidy/readability/RedundantSmartptrGet.h (removed) @@ -1,38 +0,0 @@ -//===--- RedundantSmartptrGet.h - clang-tidy --------------------*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -#ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_READABILITY_REDUNDANTSMARTPTRGET_H -#define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_READABILITY_REDUNDANTSMARTPTRGET_H - -#include "../ClangTidy.h" - -namespace clang { -namespace tidy { -namespace readability { - -/// \brief Find and remove redundant calls to smart pointer's .get() method. -/// -/// Examples: -/// ptr.get()->Foo() ==> ptr->Foo() -/// *ptr.get() ==> *ptr -/// *ptr->get() ==> **ptr -class RedundantSmartptrGet : public ClangTidyCheck { -public: - RedundantSmartptrGet(StringRef Name, ClangTidyContext *Context) - : ClangTidyCheck(Name, Context) {} - void registerMatchers(ast_matchers::MatchFinder *Finder) override; - void check(const ast_matchers::MatchFinder::MatchResult &Result) override; -}; - -} // namespace readability -} // namespace tidy -} // namespace clang - -#endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_READABILITY_REDUNDANTSMARTPTRGET_H - Copied: clang-tools-extra/trunk/clang-tidy/readability/RedundantSmartptrGetCheck.cpp (from r231648, clang-tools-extra/trunk/clang-tidy/readability/RedundantSmartptrGet.cpp) URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/readability/RedundantSmartptrGetCheck.cpp?p2=clang-tools-extra/trunk/clang-tidy/readability/RedundantSmartptrGetCheck.cpp&p1=clang-tools-extra/trunk/clang-tidy/readability/RedundantSmartptrGet.cpp&r1=231648&r2=231650&rev=231650&view=diff ============================================================================== --- clang-tools-extra/trunk/clang-tidy/readability/RedundantSmartptrGet.cpp (original) +++ clang-tools-extra/trunk/clang-tidy/readability/RedundantSmartptrGetCheck.cpp Mon Mar 9 07:18:39 2015 @@ -1,4 +1,4 @@ -//===--- RedundantSmartptrGet.cpp - clang-tidy ----------------------------===// +//===--- RedundantSmartptrGetCheck.cpp - clang-tidy -----------------------===// // // The LLVM Compiler Infrastructure // @@ -7,7 +7,7 @@ // //===----------------------------------------------------------------------===// -#include "RedundantSmartptrGet.h" +#include "RedundantSmartptrGetCheck.h" #include "clang/ASTMatchers/ASTMatchFinder.h" #include "clang/Lex/Lexer.h" @@ -73,7 +73,7 @@ void registerMatchersForGetEquals(MatchF } // namespace -void RedundantSmartptrGet::registerMatchers(MatchFinder *Finder) { +void RedundantSmartptrGetCheck::registerMatchers(MatchFinder *Finder) { registerMatchersForGetArrowStart(Finder, this); registerMatchersForGetEquals(Finder, this); } @@ -96,7 +96,7 @@ bool allReturnTypesMatch(const MatchFind } } // namespace -void RedundantSmartptrGet::check(const MatchFinder::MatchResult &Result) { +void RedundantSmartptrGetCheck::check(const MatchFinder::MatchResult &Result) { if (!allReturnTypesMatch(Result)) return; bool IsPtrToPtr = Result.Nodes.getNodeAs<Decl>("ptr_to_ptr") != nullptr; Copied: clang-tools-extra/trunk/clang-tidy/readability/RedundantSmartptrGetCheck.h (from r231648, clang-tools-extra/trunk/clang-tidy/readability/RedundantSmartptrGet.h) URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/readability/RedundantSmartptrGetCheck.h?p2=clang-tools-extra/trunk/clang-tidy/readability/RedundantSmartptrGetCheck.h&p1=clang-tools-extra/trunk/clang-tidy/readability/RedundantSmartptrGet.h&r1=231648&r2=231650&rev=231650&view=diff ============================================================================== --- clang-tools-extra/trunk/clang-tidy/readability/RedundantSmartptrGet.h (original) +++ clang-tools-extra/trunk/clang-tidy/readability/RedundantSmartptrGetCheck.h Mon Mar 9 07:18:39 2015 @@ -1,4 +1,4 @@ -//===--- RedundantSmartptrGet.h - clang-tidy --------------------*- C++ -*-===// +//===--- RedundantSmartptrGetCheck.h - clang-tidy ---------------*- C++ -*-===// // // The LLVM Compiler Infrastructure // @@ -7,8 +7,8 @@ // //===----------------------------------------------------------------------===// -#ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_READABILITY_REDUNDANTSMARTPTRGET_H -#define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_READABILITY_REDUNDANTSMARTPTRGET_H +#ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_READABILITY_REDUNDANTSMARTPTRGETCHECK_H +#define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_READABILITY_REDUNDANTSMARTPTRGETCHECK_H #include "../ClangTidy.h" @@ -22,9 +22,9 @@ namespace readability { /// ptr.get()->Foo() ==> ptr->Foo() /// *ptr.get() ==> *ptr /// *ptr->get() ==> **ptr -class RedundantSmartptrGet : public ClangTidyCheck { +class RedundantSmartptrGetCheck : public ClangTidyCheck { public: - RedundantSmartptrGet(StringRef Name, ClangTidyContext *Context) + RedundantSmartptrGetCheck(StringRef Name, ClangTidyContext *Context) : ClangTidyCheck(Name, Context) {} void registerMatchers(ast_matchers::MatchFinder *Finder) override; void check(const ast_matchers::MatchFinder::MatchResult &Result) override; @@ -34,5 +34,4 @@ public: } // namespace tidy } // namespace clang -#endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_READABILITY_REDUNDANTSMARTPTRGET_H - +#endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_READABILITY_REDUNDANTSMARTPTRGETCHECK_H _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
