diff options
| author | Alexander Kornienko <alexfh@google.com> | 2015-08-31 13:17:43 +0000 |
|---|---|---|
| committer | Alexander Kornienko <alexfh@google.com> | 2015-08-31 13:17:43 +0000 |
| commit | 0ed6c478a4699854d68718eda35d14d900fb8199 (patch) | |
| tree | 331ab86afa73111be436cd571de2c656e69231c2 /clang-tools-extra/clang-tidy/readability/ShrinkToFitCheck.cpp | |
| parent | f3ded811b2f865c804617d16fba981f731db3e47 (diff) | |
| download | bcm5719-llvm-0ed6c478a4699854d68718eda35d14d900fb8199.tar.gz bcm5719-llvm-0ed6c478a4699854d68718eda35d14d900fb8199.zip | |
[clang-tidy] Move misc-use-override and readability-shrink-to-fit to "modernize/"
These checks are focusing on migrating the code from C++98/03 to C++11, so they
belong to the modernize module.
llvm-svn: 246437
Diffstat (limited to 'clang-tools-extra/clang-tidy/readability/ShrinkToFitCheck.cpp')
| -rw-r--r-- | clang-tools-extra/clang-tidy/readability/ShrinkToFitCheck.cpp | 104 |
1 files changed, 0 insertions, 104 deletions
diff --git a/clang-tools-extra/clang-tidy/readability/ShrinkToFitCheck.cpp b/clang-tools-extra/clang-tidy/readability/ShrinkToFitCheck.cpp deleted file mode 100644 index bbaec7a8862..00000000000 --- a/clang-tools-extra/clang-tidy/readability/ShrinkToFitCheck.cpp +++ /dev/null @@ -1,104 +0,0 @@ -//===--- ShrinkToFitCheck.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 "ShrinkToFitCheck.h" -#include "clang/AST/ASTContext.h" -#include "clang/ASTMatchers/ASTMatchFinder.h" -#include "clang/Lex/Lexer.h" -#include "llvm/ADT/StringRef.h" - -using namespace clang::ast_matchers; - -namespace clang { -namespace { -bool isShrinkableContainer(llvm::StringRef ClassName) { - static const char *Shrinkables[] = { - "std::basic_string", - "std::deque", - "std::vector" - }; - return std::binary_search(std::begin(Shrinkables), std::end(Shrinkables), - ClassName); -} - -AST_MATCHER(NamedDecl, stlShrinkableContainer) { - return isShrinkableContainer(Node.getQualifiedNameAsString()); -} -} // namespace - -namespace tidy { -namespace readability { - -void ShrinkToFitCheck::registerMatchers(MatchFinder *Finder) { - // Swap as a function need not to be considered, because rvalue can not - // be bound to a non-const reference. - const auto ShrinkableAsMember = - memberExpr(member(valueDecl().bind("ContainerDecl"))); - const auto ShrinkableAsDecl = - declRefExpr(hasDeclaration(valueDecl().bind("ContainerDecl"))); - const auto CopyCtorCall = constructExpr( - hasArgument(0, anyOf(ShrinkableAsMember, ShrinkableAsDecl, - unaryOperator(has(ShrinkableAsMember)), - unaryOperator(has(ShrinkableAsDecl))))); - const auto SwapParam = expr(anyOf( - memberExpr(member(equalsBoundNode("ContainerDecl"))), - declRefExpr(hasDeclaration(equalsBoundNode("ContainerDecl"))), - unaryOperator(has(memberExpr(member(equalsBoundNode("ContainerDecl"))))), - unaryOperator( - has(declRefExpr(hasDeclaration(equalsBoundNode("ContainerDecl"))))))); - - Finder->addMatcher( - memberCallExpr(on(hasType(namedDecl(stlShrinkableContainer()))), - callee(methodDecl(hasName("swap"))), - has(memberExpr(hasDescendant(CopyCtorCall))), - hasArgument(0, SwapParam.bind("ContainerToShrink")), - unless(isInTemplateInstantiation())) - .bind("CopyAndSwapTrick"), - this); -} - -void ShrinkToFitCheck::check(const MatchFinder::MatchResult &Result) { - const LangOptions &Opts = Result.Context->getLangOpts(); - - if (!Opts.CPlusPlus11) - return; - - const auto *MemberCall = - Result.Nodes.getNodeAs<CXXMemberCallExpr>("CopyAndSwapTrick"); - const auto *Container = Result.Nodes.getNodeAs<Expr>("ContainerToShrink"); - FixItHint Hint; - - if (!MemberCall->getLocStart().isMacroID()) { - std::string ReplacementText; - if (const auto *UnaryOp = llvm::dyn_cast<UnaryOperator>(Container)) { - ReplacementText = - Lexer::getSourceText(CharSourceRange::getTokenRange( - UnaryOp->getSubExpr()->getSourceRange()), - *Result.SourceManager, Opts); - ReplacementText += "->shrink_to_fit()"; - } else { - ReplacementText = Lexer::getSourceText( - CharSourceRange::getTokenRange(Container->getSourceRange()), - *Result.SourceManager, Opts); - ReplacementText += ".shrink_to_fit()"; - } - - Hint = FixItHint::CreateReplacement(MemberCall->getSourceRange(), - ReplacementText); - } - - diag(MemberCall->getLocStart(), "the shrink_to_fit method should be used " - "to reduce the capacity of a shrinkable " - "container") - << Hint; -} - -} // namespace readability -} // namespace tidy -} // namespace clang |

