@@ -21,31 +21,24 @@ namespace modernize {
21
21
void ShrinkToFitCheck::registerMatchers (MatchFinder *Finder) {
22
22
// Swap as a function need not to be considered, because rvalue can not
23
23
// 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" ))));
39
29
40
30
Finder->addMatcher (
41
31
cxxMemberCallExpr (
42
- on (hasType (hasCanonicalType (hasDeclaration (namedDecl (
43
- hasAnyName (" std::basic_string" , " std::deque" , " std::vector" )))))),
44
32
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" )))))
49
42
.bind (" CopyAndSwapTrick" ),
50
43
this );
51
44
}
0 commit comments