Skip to content

Commit 296c6e8

Browse files
committed
[clang-tidy] Simplify shrink to fit check
Differential Revision: https://reviews.llvm.org/D97144
1 parent a5e3d87 commit 296c6e8

File tree

2 files changed

+17
-21
lines changed

2 files changed

+17
-21
lines changed

clang-tools-extra/clang-tidy/modernize/ShrinkToFitCheck.cpp

Lines changed: 14 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -21,31 +21,24 @@ namespace modernize {
2121
void ShrinkToFitCheck::registerMatchers(MatchFinder *Finder) {
2222
// Swap as a function need not to be considered, because rvalue can not
2323
// be bound to a non-const reference.
24-
const auto ShrinkableAsMember =
25-
memberExpr(member(valueDecl().bind("ContainerDecl")));
26-
const auto ShrinkableAsDecl =
27-
declRefExpr(hasDeclaration(valueDecl().bind("ContainerDecl")));
28-
const auto CopyCtorCall = cxxConstructExpr(hasArgument(
29-
0, anyOf(ShrinkableAsMember, ShrinkableAsDecl,
30-
unaryOperator(has(ignoringParenImpCasts(ShrinkableAsMember))),
31-
unaryOperator(has(ignoringParenImpCasts(ShrinkableAsDecl))))));
32-
const auto SwapParam =
33-
expr(anyOf(memberExpr(member(equalsBoundNode("ContainerDecl"))),
34-
declRefExpr(hasDeclaration(equalsBoundNode("ContainerDecl"))),
35-
unaryOperator(has(ignoringParenImpCasts(
36-
memberExpr(member(equalsBoundNode("ContainerDecl")))))),
37-
unaryOperator(has(ignoringParenImpCasts(declRefExpr(
38-
hasDeclaration(equalsBoundNode("ContainerDecl"))))))));
24+
const auto ShrinkableExpr = mapAnyOf(memberExpr, declRefExpr);
25+
const auto Shrinkable =
26+
ShrinkableExpr.with(hasDeclaration(valueDecl().bind("ContainerDecl")));
27+
const auto BoundShrinkable = ShrinkableExpr.with(
28+
hasDeclaration(valueDecl(equalsBoundNode("ContainerDecl"))));
3929

4030
Finder->addMatcher(
4131
cxxMemberCallExpr(
42-
on(hasType(hasCanonicalType(hasDeclaration(namedDecl(
43-
hasAnyName("std::basic_string", "std::deque", "std::vector")))))),
4432
callee(cxxMethodDecl(hasName("swap"))),
45-
has(ignoringParenImpCasts(
46-
memberExpr(traverse(TK_AsIs, hasDescendant(CopyCtorCall))))),
47-
hasArgument(0, SwapParam.bind("ContainerToShrink")),
48-
unless(isInTemplateInstantiation()))
33+
hasArgument(
34+
0, anyOf(Shrinkable, unaryOperator(hasUnaryOperand(Shrinkable)))),
35+
on(cxxConstructExpr(hasArgument(
36+
0,
37+
expr(anyOf(BoundShrinkable,
38+
unaryOperator(hasUnaryOperand(BoundShrinkable))),
39+
hasType(hasCanonicalType(hasDeclaration(namedDecl(hasAnyName(
40+
"std::basic_string", "std::deque", "std::vector"))))))
41+
.bind("ContainerToShrink")))))
4942
.bind("CopyAndSwapTrick"),
5043
this);
5144
}

clang-tools-extra/clang-tidy/modernize/ShrinkToFitCheck.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,9 @@ class ShrinkToFitCheck : public ClangTidyCheck {
3030
}
3131
void registerMatchers(ast_matchers::MatchFinder *Finder) override;
3232
void check(const ast_matchers::MatchFinder::MatchResult &Result) override;
33+
llvm::Optional<TraversalKind> getCheckTraversalKind() const override {
34+
return TK_IgnoreUnlessSpelledInSource;
35+
}
3336
};
3437

3538
} // namespace modernize

0 commit comments

Comments
 (0)