@@ -43,18 +43,20 @@ OptionalValueConversionCheck::getCheckTraversalKind() const {
43
43
}
44
44
45
45
void OptionalValueConversionCheck::registerMatchers (MatchFinder *Finder) {
46
- auto ConstructTypeMatcher =
47
- qualType (hasCleanType (qualType ().bind (" optional-type" )));
46
+ auto BindOptionalType = qualType (
47
+ hasCleanType (qualType (hasDeclaration (namedDecl (
48
+ matchers::matchesAnyListedName (OptionalTypes))))
49
+ .bind (" optional-type" )));
48
50
49
- auto CallTypeMatcher =
51
+ auto EqualsBoundOptionalType =
50
52
qualType (hasCleanType (equalsBoundNode (" optional-type" )));
51
53
52
54
auto OptionalDereferenceMatcher = callExpr (
53
55
anyOf (
54
56
cxxOperatorCallExpr (hasOverloadedOperatorName (" *" ),
55
- hasUnaryOperand (hasType (CallTypeMatcher )))
57
+ hasUnaryOperand (hasType (EqualsBoundOptionalType )))
56
58
.bind (" op-call" ),
57
- cxxMemberCallExpr (thisPointerType (CallTypeMatcher ),
59
+ cxxMemberCallExpr (thisPointerType (EqualsBoundOptionalType ),
58
60
callee (cxxMethodDecl (anyOf (
59
61
hasOverloadedOperatorName (" *" ),
60
62
matchers::matchesAnyListedName (ValueMethods)))))
@@ -66,10 +68,7 @@ void OptionalValueConversionCheck::registerMatchers(MatchFinder *Finder) {
66
68
hasArgument (0 , ignoringImpCasts (OptionalDereferenceMatcher)));
67
69
Finder->addMatcher (
68
70
cxxConstructExpr (
69
- argumentCountIs (1U ),
70
- hasDeclaration (cxxConstructorDecl (
71
- ofClass (matchers::matchesAnyListedName (OptionalTypes)))),
72
- hasType (ConstructTypeMatcher),
71
+ argumentCountIs (1U ), hasType (BindOptionalType),
73
72
hasArgument (0U , ignoringImpCasts (anyOf (OptionalDereferenceMatcher,
74
73
StdMoveCallMatcher))),
75
74
unless (anyOf (hasAncestor (typeLoc ()),
0 commit comments